このガイドでは、Security Command Center の Security Command Center API を使用してセキュリティ マークを管理する方法について説明します。セキュリティ マーク(または「マーク」)は、Security Command Center のアセットや検出結果に関するカスタマイズ可能なアノテーションで、これらのオブジェクトにビジネス コンテキストを追加できます。
セキュリティ マークは、Security Command Center でサポートされているアセットのみ追加や更新が可能です。Security Command Center でサポートされているアセットの一覧については、Security Command Center でサポートされているアセットタイプをご覧ください。
始める前に
セキュリティ マークを使用するには、事前にサービス アカウントと SDK を設定しておく必要があります。
セキュリティマークを追加または変更するには、使用するマークの種類の権限を含む、次の Identity and Access Management のロールが必要です。
- アセット マーク: アセット セキュリティ マーク書き込み、
securitycenter.assetSecurityMarksWriter
- 検出のマーク: 検出セキュリティ マーク編集者、
securitycenter.findingSecurityMarksWriter
Security Command Center での IAM ロールの詳細については、アクセス制御をご覧ください。セキュリティ マークを効果的に使用する方法については、Security Command Center のセキュリティ マークの使用をご覧ください。
アセットへのセキュリティ マークの追加または更新
Security Command Center API を使用する場合、セキュリティ マークの追加と更新の操作は同じです。以下の例は、2 つの Key-Value ペア (key_a, value_a)
と (key_b, value_b)
のセキュリティ マークを追加する方法を示しています。
次のコードは、フィールド マスクを使用して、それらの値のみが更新されるようにしています。フィールド マスクが指定されていない場合、与えられたキーと値を追加する前に、すべてのセキュリティ マークがクリアされます。
gcloud
gcloud scc assets update-marks ASSET_ID \ --PARENT=PARENT_ID \ --location=LOCATION \ --security-marks=SECURITY_MARKS \ --update-mask=UPDATE_MASK
次のように置き換えます。
ASSET_ID
: 更新するアセット。PARENT
: アセットが配置されているリソース階層のレベル。organization
、folder
、またはproject
を使用します。PARENT_ID
: 親組織、フォルダ、プロジェクトの数値 ID、または親プロジェクトの英数字 ID。LOCATION
: データ所在地が有効になっている場合は、アセットのセキュリティ マークを更新する Security Command Center のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。SECURITY_MARKS
: セキュリティ マークとその値を表すカンマ区切りの Key-Value ペア(例:key_a=value_a,key_b=value_b
)。UPDATE_MASK
: アセットで更新するセキュリティ マーク フィールドのカンマ区切りリスト(例:marks.key_a,marks.key_b
)。
Go
Python
Security Health Analytics の検出機能専用のアセットマークについては、ポリシーの管理をご覧ください。
アセットのセキュリティ マークの削除
特定のセキュリティ マークの削除は、追加や削除と同様の方法で行うことができます。具体的には、対応する値を使用せずにフィールド マスクを使用して更新を呼び出します。以下の例では、キー key_a
と key_b
を使用するセキュリティ マークが削除されます。
gcloud
gcloud scc assets update-marks ASSET_ID \ --PARENT=PARENT_ID \ --location=LOCATION \ --update-mask=UPDATE_MASK
ASSET_ID
: 更新するアセット。PARENT
: アセットが配置されているリソース階層のレベル。organization
、folder
、またはproject
を使用します。PARENT_ID
: 親組織、フォルダ、プロジェクトの数値 ID、または親プロジェクトの英数字 ID。LOCATION
: データ所在地が有効になっている場合は、アセットからセキュリティ マークを削除する Security Command Center のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。UPDATE_MASK
: アセットから削除するセキュリティ マーク フィールドのカンマ区切りリスト(例:marks.key_a,marks.key_b
)。
Node.js
Python
同じリクエストでのセキュリティ マークの追加と削除
セキュリティ マークの追加と更新と、セキュリティ マークを削除する方法は、同じリクエストの中に組み合わせることができます。次の例では、key_a
が更新される一方、key_b
が削除されます。
gcloud
gcloud scc assets update-marks ASSET_ID \ --PARENT=PARENT_ID \ --location=LOCATION \ --update-mask=UPDATE_MASK
ASSET_ID
: 更新するアセット。PARENT
: アセットが配置されているリソース階層のレベル。organization
、folder
、またはproject
を使用します。PARENT_ID
: 親組織、フォルダ、プロジェクトの数値 ID、または親プロジェクトの英数字 ID。LOCATION
: データ所在地が有効になっている場合は、アセットのセキュリティ マークを更新および削除する Security Command Center のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。SECURITY_MARKS
: 更新するセキュリティ マークを表すカンマ区切りの Key-Value ペア(例:key_a=value_a
)。削除するセキュリティ マークは省略します。UPDATE_MASK
: 更新または削除するセキュリティ マーク フィールドのカンマ区切りリスト(例:marks.key_a,marks.key_b
)。
Node.js
Python
検出結果へのセキュリティ マークの追加
検出結果のセキュリティ マークの追加、更新、削除は、アセットのセキュリティ マークの更新と同じプロセスで行われます。唯一の違いは、API 呼び出しで使用されるリソースの名前です。アセット リソースの代わりに、検出結果のリソース名を指定します。
たとえば、検出結果のセキュリティ マークを更新するには、次のコードを使用します。
gcloud
gcloud scc findings update-marks \ PARENT/PARENT_ID/sources/SOURCE_ID/locations/LOCATION/findings/FINDING_NAME \ --security-marks=SECURITY_MARKS \ --update-mask=UPDATE_MASK
次のように置き換えます。
PARENT
: 検出結果が存在するリソース階層のレベル。organizations
、folders
、またはprojects
を使用します。PARENT_ID
: 親組織、フォルダ、プロジェクトの数値 ID、または親プロジェクトの英数字 ID。SOURCE_ID
: ソース ID。LOCATION
: データ所在地が有効になっている場合は、検出結果のセキュリティ マークを更新する Security Command Center のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。FINDING_NAME
: 更新する検出結果。SECURITY_MARKS
: セキュリティ マークとその値を表すカンマ区切りの Key-Value ペア(例:key_a=value_a,key_b=value_b
)。UPDATE_MASK
: アセットに対して更新するセキュリティ マーク フィールドのカンマ区切りリスト(例:marks.key_a,marks.key_b
)。
Java
Node.js
Python
セキュリティ マークは、リアルタイムにではなく、毎日 2 回実行されるバッチスキャン中に処理されます。セキュリティ マークが処理され、検出結果を解決または再オープンするポリシーが適用されるまで、12~24 時間の遅延が発生する場合があります。
セキュリティ マーク フィルタを使用したアセットの一覧表示
アセットにセキュリティ マークを設定すると、そのセキュリティ マークは ListAssets
API 呼び出しのフィルタ引数で使用できます。たとえば、key_a = value_a
であるすべてのアセットにクエリを行うには、次のコードを使用します。
gcloud
# ORGANIZATION=12344321 FILTER="security_marks.marks.key_a = \"value_a\"" gcloud scc assets list $ORGANIZATION \ --filter="$FILTER"
Go
Java
Node.js
Python
セキュリティ マーク フィルタを使用した検出結果の一覧表示
検出結果にセキュリティ マークを設定すると、そのセキュリティ マークは ListFindings
API 呼び出しのフィルタ引数で使用できるようになります。たとえば、key_a != value_a
であるすべてのアセットにクエリを行うには、次のコードを使用します。
gcloud
gcloud scc findings list PARENT/PARENT_ID \ --location=LOCATION \ --source=SOURCE_ID \ --filter=FILTER
PARENT
: 検出結果が存在するリソース階層のレベル。organizations
、folders
、またはprojects
を使用します。PARENT_ID
: 親組織、フォルダ、プロジェクトの数値 ID、または親プロジェクトの英数字 ID。LOCATION
: データ所在地が有効になっている場合は、検出結果を一覧表示する Security Command Center のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。SOURCE_ID
: ソース ID。FILTER
: 検出結果に適用するフィルタ。たとえば、セキュリティ マークkey_a=value_a
の検出結果を除外するには、"NOT security_marks.marks.key_a=\"value_a\""
を使用します。