資產是機構的 Google Cloud 資源,例如 Compute Engine 執行個體或 Cloud Storage 值區。
本指南說明如何使用 Security Command Center 用戶端程式庫,存取 Security Command Center 為專案或組織中的資產維護的已淘汰記錄。
Security Command Center 只會記錄 Cloud Asset Inventory 中的部分資產。如要取得環境中最完整的資產清單,請使用 Cloud Asset Inventory 列出資產。
如要瞭解詳情,請參考下列資源:
IAM 角色的授予層級
您可以在機構、資料夾或專案層級授予 Security Command Center 的 IAM 角色。您能否查看、編輯、建立或更新發現項目、資產和安全來源,取決於獲准的存取層級。如要進一步瞭解 Security Command Center 角色,請參閱存取控管。
事前準備
設定來源前,請先完成下列步驟:
頁面大小
所有 Security Command Center 清單 API 都會分頁。每個回應都會傳回一頁結果和一個符記,用來傳回下一頁。頁面大小可設定。 預設的 pageSize 為 10,可設為最小值 1 和最大值 1000。
資源類型
Security Command Center 中的 resourceType 屬性使用的命名慣例與 Cloud Asset Inventory 不同。如需資源類型格式清單,請參閱「Security Command Center 支援的資產類型」。
列出所有資產
以下範例說明如何列出所有資產:
gcloud
如要列出專案、資料夾或機構中的所有資產,請執行下列指令:
gcloud scc assets list PARENT_ID
將 PARENT_ID 替換為下列其中一個值:
- 機構 ID,格式如下:
ORGANIZATION_ID(僅限數值 ID) - 資料夾 ID,格式如下:
folders/FOLDER_ID - 專案 ID,格式如下:
projects/PROJECT_ID
如需更多範例,請執行:
gcloud scc assets list --help
如需說明文件中的範例,請參閱 gcloud scc assets list。
Python
Java
Go
Node.js
每個資產的輸出內容都是類似下列內容的 JSON 物件:
asset:
createTime: '2020-10-05T17:55:14.823Z'
iamPolicy:
policyBlob: '{"bindings":[{"role":"roles/owner","members":["serviceAccount:SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com","user:USER_EMAIL@gmail.com"]}]}'
name: organizations/ORGANIZATION_ID/assets/ASSET_ID
resourceProperties:
createTime: '2020-10-05T17:36:17.915Z'
lifecycleState: ACTIVE
name: PROJECT_ID
parent: '{"id":"ORGANIZATION_ID","type":"organization"}'
projectId: PROJECT_ID
projectNumber: 'PROJECT_NUMBER'
securityCenterProperties:
resourceDisplayName: PROJECT_ID
resourceName: //cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER
resourceOwners:
- serviceAccount:SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
- user:USER_EMAIL@gmail.com
resourceParent: //cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID
resourceParentDisplayName: ORGANIZATION_NAME
resourceProject: //cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER
resourceProjectDisplayName: PROJECT_ID
resourceType: google.cloud.resourcemanager.Project
securityMarks:
name: organizations/ORGANIZATION_ID/assets/ASSET_ID/securityMarks
updateTime: '2020-10-05T17:55:14.823Z'
篩選資產
專案、資料夾或機構可能包含許多資產。前例未使用任何篩選器,因此會傳回所有資產。您可以使用資產篩選器,在 Security Command Center 中取得特定資產的相關資訊。篩選條件類似於 SQL 陳述式中的「where」子句,但不是套用至資料欄,而是套用至 API 傳回的物件。
上例中的輸出範例顯示一些可用於資產篩選器的欄位和子欄位,以及這些欄位的屬性。Security Command Center 支援完整的 JSON 陣列和物件,做為潛在的屬性類型。你可以依下列條件篩選:
- 陣列元素
- 完整 JSON 物件,物件內有部分字串相符
- JSON 物件子欄位
子欄位必須是數字、字串或布林值,且篩選器運算式必須使用下列比較運算子:
- 字串:
- 完全平等
= - 部分字串比對
:
- 完全平等
- 數字:
- 不等式
<、>、<=、>= - 等號
=
- 不等式
- 布林值:
- 等號
=
- 等號
下列範例會篩選素材資源:
gcloud
使用下列指令篩選資產:
gcloud scc assets list PARENT_ID --filter="FILTER"
更改下列內容:
FILTER改成要使用的篩選器。舉例來說,下列篩選器只會傳回專案資源:--filter="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\""
PARENT_ID,值為下列其中之一:- 機構 ID,格式如下:
ORGANIZATION_ID(僅限數值 ID) - 資料夾 ID,格式如下:
folders/FOLDER_ID - 專案 ID,格式如下:
projects/PROJECT_ID
- 機構 ID,格式如下:
如需更多範例,請執行:
gcloud scc assets list --help
如需說明文件中的範例,請參閱 gcloud scc assets list。
Python
Java
Go
Node.js
列出特定時間點的檔案
先前的範例說明如何列出目前的資產集。您也可以透過 Security Command Center 查看資產的歷史快照。以下範例會傳回特定時間點所有資產的狀態。Security Command Center 支援毫秒時間解析度。
gcloud
使用下列指令列出特定時間點的資產:
gcloud scc assets list PARENT_ID --read-time="READ_TIME"
更改下列內容:
READ_TIME,其中包含列出資產的時間。 請使用下列格式:YYYY-MM-DDThh:mm:ss.ffffffZ。例如:--read-time="2022-12-21T07:00:06.861Z"
PARENT_ID,值為下列其中之一:- 機構 ID,格式如下:
ORGANIZATION_ID(僅限數值 ID) - 專案 ID,格式如下:
projects/PROJECT_ID - 資料夾 ID,格式如下:
folders/FOLDER_ID
- 機構 ID,格式如下:
如需更多範例,請執行:
gcloud scc assets list --help
如需說明文件中的範例,請參閱 gcloud scc assets list。
Python
Java
Go
Node.js
列出含有狀態變更的資產
Security Command Center 可讓您比較資產在兩個時間點的狀態,判斷資產是否在指定時間範圍內新增、移除或存在。以下範例會比較 READ_TIME 中現有的專案與 COMPARE_DURATION 指定的先前時間點。COMPARE_DURATION會在幾秒內提供。
設定 COMPARE_DURATION 後,清單素材資源結果的 stateChange 屬性會更新為下列其中一個值:
ADDED:資產在compareDuration開始時不存在,但在readTime時存在。REMOVED:資產在compareDuration開始時存在,但readTime時不存在。ACTIVE:資產在compareDuration和readTime定義的時間範圍內,於開始和結束時都存在。
gcloud
使用下列指令比較兩個時間點的資產狀態:
gcloud scc assets list PARENT_ID \ --filter="FILTER" \ --read-time=READ_TIME \ --compare-duration=COMPARE_DURATION
更改下列內容:
COMPARE_DURATION,其中包含的秒數定義了--read-time旗標指定時間之前的時間點。例如:--compare-duration=84600sFILTER改成要使用的篩選器。舉例來說,下列篩選器只會傳回專案資源:--filter="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\""
PARENT_ID,值為下列其中之一:- 機構 ID,格式如下:
ORGANIZATION_ID(僅限數值 ID) - 專案 ID,格式如下:
projects/PROJECT_ID - 資料夾 ID,格式如下:
folders/FOLDER_ID
- 機構 ID,格式如下:
READ_TIME,並指定列出資產的時間。請使用下列格式:YYYY-MM-DDThh:mm:ss.ffffffZ。例如: 如需更多範例,請執行:--read-time="2022-12-21T07:00:06.861Z"
gcloud scc assets list --help
如需說明文件中的範例,請參閱 gcloud scc assets list。
Python
Java
Go
Node.js
篩選器範例
以下列出其他實用的素材資源篩選條件。您可以在篩選器中使用 AND 和 OR,合併參數並擴大或縮小結果範圍。
尋找特定擁有者的專案資產
"security_center_properties.resource_type = \"google.cloud.resourcemanager.Project\" AND security_center_properties.resource_owners : \"$USER\""
$USER 通常採用 user:someone@domain.com 格式。user 的比較會使用子字串運算子 :,不一定要完全相符。
開啟 HTTP 通訊埠的防火牆規則
"security_center_properties.resource_type = \"google.compute.Firewall\" AND resource_properties.name =\"default-allow-http\""
屬於特定專案的資源
"security_center_properties.resource_parent = \"$PROJECT_1_NAME\" OR security_center_properties.resource_parent = \"$PROJECT_2_NAME\""
$PROJECT_1_NAME 和 $PROJECT_2_NAME 是 //cloudresourcemanager.googleapis.com/projects/$PROJECT_ID 形式的資源 ID,其中 $PROJECT_ID 是專案編號。完整範例如下://cloudresourcemanager.googleapis.com/projects/100090906
尋找名稱包含特定字串的 Compute Engine 映像檔
這個篩選器會傳回含有子字串「Debia」的 Compute Engine 映像檔:
"security_center_properties.resource_type = \"google.compute.Image\" AND resource_properties.name : \"Debia\""
屬性包含鍵/值組合的資源
這個篩選器會傳回已停用 bucketPolicyOnly 的 Cloud Storage 值區。resourceProperties.iamConfiguration 的值會編碼為字串。您可以使用 \ 字元逸出字串中的特殊字元,包括鍵名和值之間的 : 運算子。
"resourceProperties.iamConfiguration:"\"bucketPolicyOnly\"\:{\"enabled\"\:false""
尋找在特定時間建立或之前建立的專案資產
這些範例篩選器會比對 2019 年 7 月 18 日 GMT 下午 8:26:21 建立或之前建立的資產。使用 create_time 篩選器時,可以採用下列格式和類型表示時間:
以整數常值表示的 Unix 時間 (以毫秒為單位)
"create_time <= 1563481581000"RFC 3339 (字串常值)
"create_time <= \"2019-07-18T20:26:21+00:00\""
從結果中排除資產
如要從結果中排除素材資源,請在參數前面加上 - 字元,使用否定運算子。這項作業類似於在 SQL 陳述式中使用 NOT 運算子。
這個篩選條件會傳回所有專案資源,但 Debia 除外:
"security_center_properties.resource_type = \"google.cloud.resourcemanager.Project\" AND -resource_properties.projectId = \"Debia\""
後續步驟
進一步瞭解如何使用用戶端程式庫存取 Security Command Center。