アセットとは、組織の 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 の list API は、すべてページ分けされます。各レスポンスでは、結果のページと次のページを返すためのトークンが戻されます。ページサイズは構成可能です。デフォルトの pageSize は 10 で、最小値の 1 から最大値の 1,000 まで設定できます。
リソースタイプ
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 アセットリストをご覧ください。
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 アセットリストをご覧ください。
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 アセットリストをご覧ください。
Python
Java
Go
Node.js
状態の変化とともにアセットを一覧表示する
Security Command Center では、1 つのアセットを 2 つの時点で比較して、指定した期間中に存在するかどうか、あるいは追加や削除があったどうかを確認できます。次の例では、READ_TIME
の時点でのプロジェクトと COMPARE_DURATION
で指定された過去の時点を比較します。COMPARE_DURATION
の単位は秒で指定します。
COMPARE_DURATION
を設定すると、アセットの一覧表示結果の stateChange
属性が次のいずれかの値で更新されます。
ADDED
: アセットはcompareDuration
の開始時には存在していませんでしたが、readTime
の時点では存在しています。REMOVED
: アセットはcompareDuration
の開始時に存在していましたが、readTime
の時点では存在しません。ACTIVE
: アセットは、compareDuration
とreadTime
で定義された期間の開始時間と終了時間のどちらでも存在していました。
gcloud
次のコマンドを使用して、2 つの時点のアセットの状態を比較します。
gcloud scc assets list PARENT_ID \ --filter="FILTER" \ --read-time=READ_TIME \ --compare-duration=COMPARE_DURATION
以下を置き換えます。
COMPARE_DURATION
:--read-time
フラグで指定された時点より前の時点を定義する秒数。次に例を示します。--compare-duration=84600s
FILTER
は、使用するフィルタに置き換えます。たとえば、次のフィルタはプロジェクト リソースのみを返します。--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 アセットリストをご覧ください。
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\""
プロパティに Key-Value ペアが含まれるリソース
このフィルタは、bucketPolicyOnly
が無効になっている Cloud Storage バケットを返します。resourceProperties.iamConfiguration
の値は文字列としてエンコードされます。\
文字を使用して、文字列内の特殊文字(キー名と値の間の :
演算子など)をエスケープします。
"resourceProperties.iamConfiguration:"\"bucketPolicyOnly\"\:{\"enabled\"\:false""
特定の日時までに作成されたプロジェクト アセットの検索
これらのフィルタは、2019 年 7 月 18 日午後 8 時 26 分 21 分(GMT)以前に作成されたアセットと一致します。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 へのアクセスについて詳細を確認する。