アセットとは、Compute Engine インスタンスや Cloud Storage バケットなど、組織の Google Cloud リソースのことです。このガイドでは、Security Command Center クライアント ライブラリを使用して、組織のアセットに関するメタデータにアクセスする方法について説明します。
始める前に
ソースを設定する前に、以下の手順を完了しておく必要があります。
ページサイズ
Security Command Center の API の一覧表示はすべてページ分けされます。各レスポンスは結果のページと、次のページを返すトークンを返します。ページサイズは設定可能です。デフォルトの pageSize は 10 で、最小値は 1、最大値は 1,000 です。
すべてのアセットの一覧表示
次の例は、組織のすべてのアセットを一覧表示する方法を示しています。
gcloud
# ORGANIZATION_ID=12344321 gcloud scc assets list $ORGANIZATION_ID
他の例については、次のコマンドを実行します。
gcloud scc assets list --help
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'
アセットのフィルタリング
1 つの組織に多数のアセットがある場合があります。上記の例ではフィルタを使用していないため、すべてのアセットが返されます。Security Command Center では、アセット フィルタを使用して特定のアセットに関する情報を取得できます。フィルタは、SQL ステートメントの「WHERE」句に似ていますが、列の代わりに API によって返されるオブジェクトに適用されます。
上記の例の出力例では、アセット フィルタで使用できるフィールドとサブフィールドおよびそれらのプロパティを示しています。Security Command Center では、潜在的なプロパティ タイプとして完全な JSON 配列とオブジェクトもサポートされています。以下に基づいてフィルタできます。
- 配列の要素
- オブジェクト内で文字列が部分的に一致する完全な JSON オブジェクト
- JSON オブジェクトのサブフィールド
サブフィールドは数値、文字列、ブール値である必要があり、フィルタ式では次の比較演算子を使用する必要があります。
- 文字列:
- 完全な等式:
=
:
に一致する部分文字列
- 完全な等式:
- 数字:
- 不等式
<
、>
、<=
、>=
- 等式
=
- 不等式
- ブール値:
- 等式
=
- 等式
次の例では、フィルタを使用して組織内のプロジェクト リソースのみを返します。
gcloud
# ORGANIZATION_ID=12344321 FILTER="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\"" gcloud scc assets list $ORGANIZATION_ID --filter="$FILTER"
他の例については、次のコマンドを実行します。
gcloud scc assets list --help
Python
Java
Go
Node.js
特定の時点での一覧表示
上記の例は、組織の現在の一連のアセットを一覧表示する方法を示しています。Security Command Center では、組織のアセットの過去のスナップショットを表示することもできます。次の例では、特定の時点におけるすべてのアセットの状態が返されます。Security Command Center は、ミリ秒単位の解決策をサポートします。
gcloud
# ORGANIZATION_ID=12344321 # READ_TIME follows the format YYYY-MM-DDThh:mm:ss.ffffffZ READ_TIME=2019-02-28T07:00:06.861Z gcloud scc assets list $ORGANIZATION_ID --read-time=$READ_TIME
他の例については、次のコマンドを実行します。
gcloud scc assets list --help
Python
Java
Go
Node.js
状態の変化とともにアセットを一覧表示する
Security Command Center を使用すると、2 つの時点間でアセットを比較して、指定された期間中に追加、削除、または存在していたかどうかを確認できます。次の例では、READ_TIME
に存在するプロジェクトと、COMPARE_DURATION
で指定された前の時点を比較します。COMPARE_DURATION
は秒単位で指定します。
COMPARE_DURATION
を設定すると、アセットの一覧表示結果の stateChange
属性が次のいずれかの値で更新されます。
ADDED
: アセットはcompareDuration
の開始時には存在していませんでしたが、readTime
の時点では存在しています。REMOVED
: アセットはcompareDuration
の開始時に存在していましたが、readTime
の時点では存在しません。ACTIVE
: アセットは、compareDuration
とreadTime
で定義された期間の開始時間と終了時間のどちらでも存在していました。
gcloud
# ORGANIZATION_ID=12344321 # READ_TIME follows the format YYYY-MM-DDThh:mm:ss.ffffffZ READ_TIME=2019-02-28T07:00:06.861Z FILTER="security_center_properties.resource_type=\"google.cloud.resourcemanager.Project\"" COMPARE_DURATION=86400s gcloud scc assets list $ORGANIZATION_ID --read-time=$READ_TIME \ --filter="$FILTER" \ --compare-duration=$COMPARE_DURATION
他の例については、次のコマンドを実行します。
gcloud scc assets list --help
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\""