このページでは、BigQuery 用の Security Command Center エクスポート機能を使用して、新しい検出結果と更新された検出結果を BigQuery データセットにストリーミングする方法について説明します。既存の検出結果は、更新されない限り BigQuery に送信されません。
BigQuery は、 Google Cloudの費用対効果に優れたフルマネージド型の分析データ ウェアハウスです。ペタバイト規模に対応しており、膨大な量のデータに対してほぼリアルタイムで分析を行うことができます。BigQuery を使用すると、新規および更新された検索結果にクエリを実行して、データをフィルタして必要なものを探し、カスタム レポートを生成できます。BigQuery の詳細については、BigQuery のドキュメントをご覧ください。
概要
この機能を有効にすると、Security Command Center に書き込まれた新しい検出結果が、ほぼリアルタイムで BigQuery テーブルにエクスポートされます。このデータを既存のワークフローに統合し、カスタム分析を作成できます。この機能を組織、フォルダ、プロジェクトのレベルで有効にして、要件に基づいて検出結果をエクスポートできます。
この機能は、Security Command Center の検出結果を BigQuery にエクスポートする際におすすめの方法です。これはフルマネージド ソリューションであり、手動操作やカスタムコードの作成が不要です。
データセットの構造
この機能により、source_id
、finding_id
、event_time
でクラスタ化された findings
テーブルに、新しい検出結果とその後の更新が新しい行として追加されます。
検出結果が更新されると、複数の検出レコードが作成されます。source_id
と finding_id
の値は同じですが、event_time
の値は異なります。このデータセット構造を使用して、検出状態の変化を時系列で把握できます。
データセット内でエントリが重複している可能性があります。これらのエントリを解析するには、最初のクエリ例に示すように、DISTINCT
句を使用します。
各データセットには findings
テーブルが含まれています。テーブルには次のフィールドがあります。
フィールド | 説明 |
---|---|
source_id |
Security Command Center が検出結果のソースに割り当てる固有識別子。たとえば、Cloud Anomaly Detection を情報源とする検出結果はすべて同じ 例: |
finding_id |
検出結果を表す固有識別子。これは、組織のソース内で一意です。英数字で、32 文字以下です。 |
event_time |
イベントが発生した時間、または検出結果の更新が発生した時間。たとえば、検出結果がオープン状態のファイアウォールを表している場合、 例: |
bulk_export_id |
一括エクスポート(プレビュー)の場合、これは UUID です。 継続的エクスポートの場合、このフィールドは空です。 |
finding |
セキュリティ、リスク、健全性、プライバシーなどの評価データの記録。Security Command Center に取り込まれ、表示、通知、分析、ポリシーテスト、適用で使用されます。たとえば、App Engine アプリケーションで見つかったクロスサイト スクリプティング(XSS)の脆弱性が検出結果です。 ネストされたフィールドの詳細については、API リファレンスの |
resource |
この検出結果に関連付けられている Google Cloud リソースに関する情報。 ネストされたフィールドの詳細については、API リファレンスの |
費用
この機能に関連して BigQuery の料金が請求されます。詳細については、BigQuery の料金をご覧ください。
始める前に
この機能を有効にする前に、次の手順を完了する必要があります。
権限を設定する
このガイドの内容を行うには、次の Identity and Access Management(IAM)ロールが必要です。
検出結果をエクスポートする組織、フォルダ、プロジェクトに対する次のいずれかのロール。
- セキュリティ センターの BigQuery Export 編集者(
roles/securitycenter.bigQueryExportsEditor
) - セキュリティ センター管理者(
roles/securitycenter.admin
)
Security Command Center のロールの詳細については、アクセス制御をご覧ください。
- セキュリティ センターの BigQuery Export 編集者(
BigQuery データセットに対する BigQuery データセット オーナー(
roles/bigquery.dataOwner
)
BigQuery データセットを作成する
BigQuery データセットを作成します。詳細については、データセットの作成をご覧ください。
データ所在地を計画する
Security Command Center でデータ所在地が有効になっている場合、BigQuery(BigQueryExport
リソース)へのストリーミング エクスポートを定義する構成はデータ所在地の制御の対象であり、選択したSecurity Command Center のロケーションに保存されます。
Security Command Center のロケーションの検出結果を BigQuery にエクスポートするには、検出結果と同じ Security Command Center のロケーションに BigQuery Export を構成する必要があります。
BigQuery Export で使用されるフィルタには、所在地管理の対象となるデータが含まれる可能性があるため、作成する前に正しいロケーションを指定していることを確認してください。Security Command Center では、エクスポートを作成するロケーションは制限されません。
BigQuery Export は作成場所にのみ保存され、他のロケーションで表示や編集はできません。
BigQuery Export を作成した後に、そのロケーションを変更することはできません。ロケーションを変更するには、BigQuery Export を削除して、新しいロケーションに再作成する必要があります。
データ所在地が有効になっている場合に Security Command Center を使用する方法については、Security Command Center のリージョン エンドポイントをご覧ください。
検出結果を Security Command Center から BigQuery にエクスポートする
検出結果をエクスポートするには、まず Security Command Center API を有効にします。
Security Command Center API の有効化
Security Command Center API を有効にするには、次のようにします。
Google Cloud コンソールの [API ライブラリ] ページに移動します。
Security Command Center API を有効にするプロジェクトを選択します。
[検索] ボックスに「
Security Command Center
」と入力し、検索結果で [Security Command Center] をクリックします。表示された API ページで [有効にする] をクリックします。
プロジェクトで Security Command Center API が有効になります。次に、gcloud CLI を使用して、BigQuery に新しいエクスポート構成を作成します。
VPC Service Controls で境界へのアクセス権を付与する
VPC Service Controls を使用していて、BigQuery データセットがサービス境界内のプロジェクトに含まれている場合は、結果をエクスポートするためにプロジェクトへのアクセス権を付与する必要があります。
プロジェクトへのアクセス権を付与するには、検出結果をエクスポートするプリンシパルとプロジェクトに上り(内向き)ルールと下り(外向き)ルールを作成します。このルールは、保護されたリソースへのアクセスを許可し、ユーザーが BigQuery データセットに対する setIamPolicy
権限を持っていることを BigQuery で確認できるようにします。
BigQuery への新しいエクスポートを設定する前
コンソール
-
Google Cloud コンソールで、[VPC Service Controls] ページに移動します。
- 組織またはプロジェクトを選択します。
- 組織を選択した場合は、[アクセス ポリシーを選択] をクリックし、更新する境界に関連付けられているアクセス ポリシーを選択します。
-
更新する境界の名前をクリックします。
変更する必要があるサービス境界を確認するには、ログで
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
違反を示すエントリを確認します。これらのエントリで、servicePerimeterName
フィールドを確認します。accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
- [境界を編集] をクリックします。
- [下り(外向き)ポリシー] をクリックします。
- [下り(外向き)ルールを追加] をクリックします。
-
[送信元] セクションで、次の詳細を設定します。
- [ID] で、[選択されている ID とグループ] を選択します。
- [ID の追加] をクリックします。
-
Security Command Center API の呼び出しに使用されるプリンシパルのメールアドレスを入力します。
- プリンシパルを選択するか、Enter キーを押して、[ID を追加] をクリックします。
-
[宛先] セクションで、次の詳細を設定します。
- [プロジェクト] で、[すべてのプロジェクト] を選択します。
- [オペレーションまたは IAM ロール] で、[オペレーションを選択] を選択します。
-
[オペレーションを追加] をクリックして、次のオペレーションを追加します。
- bigquery.googleapis.com サービスを追加します。
- [すべてのメソッド] をクリックします。
- [すべてのメソッドを追加] をクリックします。
- bigquery.googleapis.com サービスを追加します。
- [上り(内向き)ポリシー] をクリックします。
- [上り(内向き)ルールを追加] をクリックします。
-
[送信元] セクションで、次の詳細を設定します。
- [ID] で、[選択されている ID とグループ] を選択します。
- [ID の追加] をクリックします。
-
Security Command Center API の呼び出しに使用されるプリンシパルのメールアドレスを入力します。
- プリンシパルを選択するか、Enter キーを押して、[ID を追加] をクリックします。
- [ソース] で [すべてのソース] を選択します。
-
[宛先] セクションで、次の詳細を設定します。
- [プロジェクト] で、[プロジェクトを選択] を選択します。
- [プロジェクトを追加] をクリックし、BigQuery データセットを含むプロジェクトを追加します。
- [オペレーションまたは IAM ロール] で、[オペレーションを選択] を選択します。
-
[オペレーションを追加] をクリックして、次のオペレーションを追加します。
- bigquery.googleapis.com サービスを追加します。
- [すべてのメソッド] をクリックします。
- [すべてのメソッドを追加] をクリックします。
- bigquery.googleapis.com サービスを追加します。
- [保存] をクリックします。
gcloud
-
割り当てプロジェクトがまだ設定されていない場合は、設定します。Access Context Manager API が有効になっているプロジェクトを選択します。
gcloud config set billing/quota_project QUOTA_PROJECT_ID
QUOTA_PROJECT_ID
は、請求と割り当てに使用するプロジェクトの ID に置き換えます。 -
次の内容のファイルを
egress-rule.yaml
という名前で作成します。- egressFrom: identities: - PRINCIPAL_ADDRESS egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: '*' resources: - '*'
PRINCIPAL_ADDRESS
は、Security Command Center API の呼び出しに使用されるプリンシパルのアドレスに置き換えます。 -
次の内容のファイルを
ingress-rule.yaml
という名前で作成します。- ingressFrom: identities: - PRINCIPAL_ADDRESS sources: - accessLevel: '*' ingressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: '*' resources: - '*'
PRINCIPAL_ADDRESS
は、Security Command Center API の呼び出しに使用されるプリンシパルのアドレスに置き換えます。 -
境界に下り(外向き)ルールを追加します。
gcloud access-context-manager perimeters update PERIMETER_NAME \ --set-egress-policies=egress-rule.yaml
次のように置き換えます。
-
PERIMETER_NAME
: 境界の名前。例:accessPolicies/1234567890/servicePerimeters/example_perimeter
。変更する必要があるサービス境界を確認するには、ログで
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
違反を示すエントリを確認します。これらのエントリで、servicePerimeterName
フィールドを確認します。accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
-
-
上り(内向き)ルールを境界に追加します。
gcloud access-context-manager perimeters update PERIMETER_NAME \ --set-ingress-policies=ingress-rule.yaml
次のように置き換えます。
-
PERIMETER_NAME
: 境界の名前。例:accessPolicies/1234567890/servicePerimeters/example_perimeter
。変更する必要があるサービス境界を確認するには、ログで
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
違反を示すエントリを確認します。これらのエントリで、servicePerimeterName
フィールドを確認します。accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
-
詳細については、上り(内向き)ルールと下り(外向き)ルールをご覧ください。
BigQuery への新しいエクスポートを設定する
このステップでは、検出結果を BigQuery インスタンスにエクスポートするためのエクスポート構成を作成します。エクスポート構成は、プロジェクト、フォルダ、組織のレベルで作成できます。たとえば、プロジェクトから検出結果を BigQuery データセットにエクスポートする場合、プロジェクト レベルでエクスポート構成を作成し、そのプロジェクトに関連する検出結果のみをエクスポートします。必要に応じてフィルタを指定し、特定の検索結果のみをエクスポートすることもできます。
エクスポート構成設は適切なレベルで作成してください。たとえば、プロジェクト B でエクスポート構成を作成して、プロジェクト A から検出結果をエクスポートし、resource.project_display_name: project-a-id
などのフィルタを定義する場合、この構成では検出結果はエクスポートされません。
組織で作成できる BigQuery へのエクスポート構成は最大 500 個です。同じデータセットを複数のエクスポート構成に使用できます。同じデータセットを使用する場合、すべての更新は同じ検出結果テーブルに対して行われます。
最初のエクスポート構成を作成すると、サービス アカウントが自動的に作成されます。このサービス アカウントは、データセット内に検出結果テーブルを作成または更新し、テーブルに結果をエクスポートするために必要です。形式は service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gservicaccount.com
で、BigQuery データセット レベルで BigQuery データ編集者(roles/bigquery.dataEditor
)のロールが付与されます。
Google Cloud コンソールでは、一部の BigQueryExport
リソースに [Legacy] ラベルが付いている場合があります。これは、v1 Security Command Center API で作成されたことを示します。これらの BigQueryExport
リソースは、 Google Cloud コンソール、gcloud CLI、v1 Security Command Center API、または Security Command Center の v1 クライアント ライブラリで管理できます。
gcloud CLI でこれらの BigQueryExport
リソースを管理するには、gcloud CLI コマンドの実行時にロケーションを指定しないでください。
gcloud
Google Cloud コンソールに移動します。
Security Command Center API を有効にしたプロジェクトを選択します。
[Cloud Shell をアクティブにする
] をクリックします。
次のコマンドを実行して、新しいエクスポート構成を作成します。
gcloud scc bqexports create BIGQUERY_EXPORT \ --dataset=DATASET_NAME \ --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \ --location=LOCATION \ [--description=DESCRIPTION] \ [--filter=FILTER]
次のように置き換えます。
BIGQUERY_EXPORT
は、このエクスポート構成の名前に置き換えます。DATASET_NAME
は、BigQuery データセットの名前に置き換えます(projects/PROJECT_ID/datasets/DATASET_ID
など)。FOLDER_ID
、ORGANIZATION_ID
またはPROJECT_ID
は、フォルダ、組織、またはプロジェクトの名前に置き換えます。次のいずれかのオプションを設定する必要があります。フォルダと組織の場合、名前はフォルダ ID または組織 ID です。プロジェクト名は、プロジェクト番号またはプロジェクト ID になります。LOCATION
: エクスポート構成を作成する Security Command Center のロケーション。データ所在地が有効になっている場合は、eu
、sa
、us
を使用します。それ以外の場合は、global
を使用します。DESCRIPTION
は、人が読める形式のエクスポート構成の説明に置き換えます。この変数の指定は任意です。FILTER
は、エクスポートに含める検出結果を定義する式で置き換えます。たとえば、XSS_SCRIPTING カテゴリでフィルタリングする場合は「"category=\"XSS_SCRIPTING\"
」と入力します。この変数の指定は任意です。
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。
組織のエクスポート構成を作成します。
フォルダのエクスポート構成を作成します。
プロジェクトのエクスポート構成を作成します。
Java
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC を設定するをご覧ください。
Python
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC を設定するをご覧ください。
エクスポート構成を作成してから約 15 分以内に、BigQuery データセットに検出結果が表示されます。BigQuery テーブルが作成されると、フィルタとスコープに一致する新しい結果と更新された結果が、ほぼリアルタイムでテーブルに表示されます。
検出結果を確認するには、検出結果の確認をご覧ください。
BigQuery への新しいエクスポートの上り(内向き)ルールを作成する
VPC Service Controls を使用していて、BigQuery データセットがサービス境界内のプロジェクトに含まれている場合は、BigQuery への新しいエクスポートの上り(内向き)ルールを作成する必要があります。
コンソール
-
前のセクションのサービス境界を再度開きます。
- [上り(内向き)ポリシー] をクリックします。
- [上り(内向き)ルールを追加] をクリックします。
-
[送信元] セクションで、次の詳細を設定します。
- [ID] で、[選択されている ID とグループ] を選択します。
- [ID の追加] をクリックします。
-
BigQuery Export 構成サービス エージェントのメールアドレスを入力します。サービス エージェントのアドレスは次の形式です。
service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
ORGANIZATION_ID
は、実際の組織 ID に置き換えます。 - サービス エージェントを選択するか、Enter キーを押して、[ID を追加] をクリックします。
- [ソース] で [すべてのソース] を選択します。
-
[宛先] セクションで、次の詳細を設定します。
- [プロジェクト] で、[プロジェクトを選択] を選択します。
- [プロジェクトを追加] をクリックし、BigQuery データセットを含むプロジェクトを追加します。
- [オペレーションまたは IAM ロール] で、[オペレーションを選択] を選択します。
-
[オペレーションを追加] をクリックして、次のオペレーションを追加します。
- bigquery.googleapis.com サービスを追加します。
- [すべてのメソッド] をクリックします。
- [すべてのメソッドを追加] をクリックします。
- bigquery.googleapis.com サービスを追加します。
- [保存] をクリックします。
gcloud
-
割り当てプロジェクトがまだ設定されていない場合は、設定します。Access Context Manager API が有効になっているプロジェクトを選択します。
gcloud config set billing/quota_project QUOTA_PROJECT_ID
QUOTA_PROJECT_ID
は、請求と割り当てに使用するプロジェクトの ID に置き換えます。 -
次の内容のファイルを
ingress-rule.yaml
という名前で作成します。- ingressFrom: identities: - serviceAccount:service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com sources: - accessLevel: '*' ingressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: '*' resources: - '*'
ORGANIZATION_ID
は、実際の組織 ID に置き換えます。 -
上り(内向き)ルールを境界に追加します。
gcloud access-context-manager perimeters update PERIMETER_NAME \ --set-ingress-policies=ingress-rule.yaml
次のように置き換えます。
-
PERIMETER_NAME
: 境界の名前。例:accessPolicies/1234567890/servicePerimeters/example_perimeter
。変更する必要があるサービス境界を確認するには、ログで
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
違反を示すエントリを確認します。これらのエントリで、servicePerimeterName
フィールドを確認します。accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
-
詳細については、上り(内向き)ルールと下り(外向き)ルールをご覧ください。
これで、選択したプロジェクト、ユーザー、サービス アカウントが保護されたリソースにアクセスし、検出結果をエクスポートできるようになりました。
このガイドの手順をすべて完了していて、エクスポートが正しく機能している場合、次のルールは削除できます。
- プリンシパルの上り(内向き)ルール
- プリンシパルの下り(外向き)ルール
これらのルールは、エクスポート構成を構成するためだけに必要でした。ただし、エクスポート構成が引き続き機能するには、以前に作成した上り(内向き)ルールを維持する必要があります。このルールによって、Security Command Center はサービス境界の背後にある BigQuery データセットに検出結果をエクスポートできます。
エクスポート構成の詳細を表示する
gcloud
Google Cloud コンソールに移動します。
Security Command Center API を有効にしたプロジェクトを選択します。
[Cloud Shell をアクティブにする
] をクリックします。
エクスポート構成の詳細を確認するには、次のコマンドを実行します。
gcloud scc bqexports get BIGQUERY_EXPORT \ --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \ --location=LOCATION
次のように置き換えます。
BIGQUERY_EXPORT
は、このエクスポート構成の名前に置き換えます。FOLDER_ID
、ORGANIZATION_ID
またはPROJECT_ID
は、フォルダ、組織、またはプロジェクトの名前に置き換えます。次のいずれかのオプションを設定する必要があります。フォルダと組織の場合、名前はフォルダ ID または組織 ID です。プロジェクト名は、プロジェクト番号またはプロジェクト ID になります。LOCATION
: エクスポート構成を作成する Security Command Center のロケーション。データ所在地が有効になっている場合は、eu
、sa
、us
を使用します。それ以外の場合は、global
を使用します。たとえば、組織 ID が
123
の組織からmy-bq-export
という名前のエクスポート構成を取得するには、次のコマンドを実行します。gcloud scc bqexports get my-bq-export \ --organization=123 \ --location=global
エクスポート構成を更新する
必要に応じて、既存のエクスポート構成のフィルタ、データセット、説明を変更できます。エクスポート構成の名前は変更できません。
gcloud
Google Cloud コンソールに移動します。
Security Command Center API を有効にしたプロジェクトを選択します。
[Cloud Shell をアクティブにする
] をクリックします。
エクスポート構成を更新するには、次のコマンドを実行します。
gcloud scc bqexports update BIGQUERY_EXPORT \ --dataset=DATASET_NAME \ --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \ --location=LOCATION \ [--description=DESCRIPTION] \ [--filter=FILTER]
次のように置き換えます。
BIGQUERY_EXPORT
は、更新するエクスポート構成の名前に置き換えます。DATASET_NAME
は、BigQuery データセットの名前に置き換えます(projects/PROJECT_ID/datasets/DATASET_ID
など)。FOLDER_ID
、ORGANIZATION_ID
またはPROJECT_ID
は、フォルダ、組織、またはプロジェクトの名前に置き換えます。次のいずれかのオプションを設定する必要があります。フォルダと組織の場合、名前はフォルダ ID または組織 ID です。プロジェクト名は、プロジェクト番号またはプロジェクト ID になります。LOCATION
: エクスポート構成を更新する Security Command Center のロケーション。データ所在地が有効になっている場合は、eu
、sa
、us
を使用します。それ以外の場合は、global
を使用します。DESCRIPTION
は、人が読める形式のエクスポート構成の説明に置き換えます。この変数の指定は任意です。FILTER
は、エクスポートに含める検出結果を定義する式で置き換えます。たとえば、XSS_SCRIPTING カテゴリでフィルタリングする場合は「"category=\"XSS_SCRIPTING\"
」と入力します。この変数の指定は任意です。
すべてのエクスポート構成を表示する
組織、フォルダ、プロジェクトのすべてのエクスポート構成を表示できます。
gcloud
Google Cloud コンソールに移動します。
Security Command Center API を有効にしたプロジェクトを選択します。
[Cloud Shell をアクティブにする
] をクリックします。
エクスポート構成を一覧表示するには、次のコマンドを実行します。
gcloud scc bqexports list \ --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \ --location=LOCATION \ [--limit=LIMIT] \ [--page-size=PAGE_SIZE]
次のように置き換えます。
FOLDER_ID
、ORGANIZATION_ID
またはPROJECT_ID
は、フォルダ、組織、またはプロジェクトの名前に置き換えます。次のいずれかのオプションを設定する必要があります。フォルダと組織の場合、名前はフォルダ ID または組織 ID です。プロジェクト名は、プロジェクト番号またはプロジェクト ID になります。組織 ID を指定すると、リストには、その組織で定義されているすべてのエクスポート構成が含まれます(フォルダレベルとプロジェクト レベルの組織も含む)。フォルダ ID を指定すると、リストには、フォルダレベルとフォルダ内のプロジェクトで定義されたすべてのエクスポート構成が含まれます。プロジェクト番号またはプロジェクト ID を指定すると、リストには、そのプロジェクトのすべてのエクスポート構成が含まれます。
LOCATION
: エクスポート構成を一覧表示する Security Command Center のロケーション。データ所在地が有効になっている場合は、eu
、sa
、us
を使用します。それ以外の場合は、global
を使用します。LIMIT
は、表示するエクスポート構成の数に置き換えます。この変数の指定は任意です。PAGE_SIZE
は、ページサイズの値で置き換えます。この変数の指定は任意です。
Java
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC を設定するをご覧ください。
Python
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC を設定するをご覧ください。
エクスポート構成を削除する
不要になったエクスポート構成は削除できます。
gcloud
Google Cloud コンソールに移動します。
Security Command Center API を有効にしたプロジェクトを選択します。
[Cloud Shell をアクティブにする
] をクリックします。
エクスポート構成を削除するには、次のコマンドを実行します。
gcloud scc bqexports delete BIGQUERY_EXPORT \ --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \ --location=LOCATION
次のように置き換えます。
BIGQUERY_EXPORT
は、削除するエクスポート構成の名前に置き換えます。FOLDER_ID
、ORGANIZATION_ID
またはPROJECT_ID
は、フォルダ、組織、またはプロジェクトの名前に置き換えます。次のいずれかのオプションを設定する必要があります。フォルダと組織の場合、名前はフォルダ ID または組織 ID です。プロジェクト名は、プロジェクト番号またはプロジェクト ID になります。LOCATION
: エクスポート構成を削除する Security Command Center のロケーション。データ所在地が有効になっている場合は、eu
、sa
、us
を使用します。それ以外の場合は、global
を使用します。たとえば、組織 ID が
123
の組織からmy-bq-export
という名前のエクスポート構成を削除するには、次のコマンドを実行します。gcloud scc bqexports delete my-bq-export \ --organization=123 \ --location=global
Java
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC を設定するをご覧ください。
Python
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC を設定するをご覧ください。
エクスポート構成を削除した後、Looker Studio からデータを削除できます。詳細については、データソースの削除、削除、復元をご覧ください。
BigQuery で検出結果を確認する
エクスポート構成を作成すると、指定したプロジェクトの BigQuery データセットに新しい検出結果がエクスポートされます。
BigQuery で検出結果を確認するには、次の操作を行います。
BigQuery でプロジェクトに移動します。
プロジェクトを選択します。
[エクスプローラ] ペインで、プロジェクトのノードを開きます。
データセットを開きます。
findings テーブルをクリックします。
表示されたタブで [プレビュー] をクリックします。データのサンプルセットが表示されます。
有益なクエリ
このセクションでは、検出結果データを分析するためのクエリの例を紹介します。次の例では、DATASET
をデータセットに割り当てられた名前に置き換え、PROJECT_ID
をデータセットのプロジェクト名に置き換えます。
発生したエラーのトラブルシューティングについては、エラー メッセージをご覧ください。
1 日に作成および更新された新しい検出結果の数
SELECT
FORMAT_DATETIME("%Y-%m-%d", event_time) AS date,
count(DISTINCT finding_id)
FROM `PROJECT_ID.DATASET.findings`
GROUP BY date
ORDER BY date DESC
各検出結果の最新の検出レコード
SELECT
* EXCEPT(row)
FROM (
SELECT *, ROW_NUMBER() OVER(
PARTITION BY finding_id
ORDER BY event_time DESC, finding.mute_update_time DESC
) AS row
FROM `PROJECT_ID.DATASET.findings`
)
WHERE row = 1
現在のアクティブな検出結果(時間順)
WITH latestFindings AS (
SELECT * EXCEPT(row)
FROM (
SELECT *, ROW_NUMBER() OVER(
PARTITION BY finding_id
ORDER BY event_time DESC, finding.mute_update_time DESC
) AS row
FROM `PROJECT_ID.DATASET.findings`
) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
WHERE finding.state = "ACTIVE"
ORDER BY event_time DESC
プロジェクト内の現在の検出結果
WITH latestFindings AS (
SELECT * EXCEPT(row)
FROM (
SELECT *, ROW_NUMBER() OVER(
PARTITION BY finding_id
ORDER BY event_time DESC, finding.mute_update_time DESC
) AS row
FROM `PROJECT_ID.DATASET.findings`
) WHERE row = 1
)
SELECT finding_id, event_time, finding, resource
FROM latestFindings
WHERE resource.project_display_name = 'PROJECT'
PROJECT
は、プロジェクト名に置き換えます。
フォルダ内の現在の検出結果
WITH latestFindings AS(
SELECT * EXCEPT(row)
FROM (
SELECT *, ROW_NUMBER() OVER(
PARTITION BY finding_id
ORDER BY event_time DESC, finding.mute_update_time DESC
) AS row
FROM `PROJECT_ID.DATASET.findings`
) WHERE row = 1
)
SELECT finding_id, event_time, finding, resource
FROM latestFindings
CROSS JOIN UNNEST(resource.folders) AS folder
WHERE folder.resource_folder_display_name = 'FOLDER'
FOLDER
は、フォルダ名に置き換えます。
スキャナ Logging Scanner
から得られる現在の検出結果
WITH latestFindings AS (
SELECT * EXCEPT(row)
FROM (
SELECT *, ROW_NUMBER() OVER(
PARTITION BY finding_id
ORDER BY event_time DESC, finding.mute_update_time DESC
) AS row
FROM `PROJECT_ID.DATASET.findings`
) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
CROSS JOIN UNNEST(finding.source_properties) AS source_property
WHERE source_property.key = "ScannerName"
AND source_property.value = "LOGGING_SCANNER"
Persistence: IAM Anomalous Grant
タイプの現在のアクティブな検出結果
WITH latestFindings AS(
SELECT * EXCEPT(row)
FROM (
SELECT *, ROW_NUMBER() OVER(
PARTITION BY finding_id
ORDER BY event_time DESC, finding.mute_update_time DESC
) AS row
FROM `PROJECT_ID.DATASET.findings`
) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
WHERE finding.state = "ACTIVE"
AND finding.category = "Persistence: IAM Anomalous Grant"
特定のタイプのアクティブな検出結果を Cloud Audit Logs に関連付ける
このサンプルクエリは、Cloud Audit Logs を使用して、Event Threat Detection から得られる異常な IAM 付与の検出結果を調査するのに役立ちます。異常な IAM 付与アクションの前後の期間に、権限付与者によって行われた一連の管理アクティビティ アクションを確認します。次のクエリは、検出結果のタイムスタンプの 1 時間前から 1 時間後までの管理アクティビティ ログを関連付けます。
WITH latestFindings AS(
SELECT * EXCEPT(row)
FROM (
SELECT *, ROW_NUMBER() OVER(
PARTITION BY finding_id
ORDER BY event_time DESC, finding.mute_update_time DESC
) AS row
FROM `PROJECT_ID.DATASET.findings`
) WHERE row = 1
)
SELECT
finding_id,
ANY_VALUE(event_time) as event_time,
ANY_VALUE(finding.access.principal_email) as grantor,
JSON_VALUE_ARRAY(ANY_VALUE(finding.source_properties_json), '$.properties.sensitiveRoleGrant.members') as grantees,
ARRAY_AGG(
STRUCT(
timestamp,
IF(timestamp < event_time, 'before', 'after') as timeline,
protopayload_auditlog.methodName,
protopayload_auditlog.resourceName,
protopayload_auditlog.serviceName
)
ORDER BY timestamp ASC
) AS recent_activity
FROM (
SELECT
f.*,
a.*,
FROM latestFindings AS f
LEFT JOIN `PROJECT_ID.DATASET.cloudaudit_googleapis_com_activity` AS a
ON a.protopayload_auditlog.authenticationInfo.principalEmail = f.finding.access.principal_email
WHERE f.finding.state = "ACTIVE"
AND f.finding.category = "Persistence: IAM Anomalous Grant"
AND a.timestamp >= TIMESTAMP_SUB(f.event_time, INTERVAL 1 HOUR)
AND a.timestamp <= TIMESTAMP_ADD(f.event_time, INTERVAL 1 HOUR)
)
GROUP BY
finding_id
ORDER BY
event_time DESC
出力は次のようになります。

Looker Studio でグラフを作成する
Looker Studio では、インタラクティブなレポートとダッシュボードを作成できます。
通常、Looker Studio 経由で BigQuery にアクセスすると、BigQuery の使用料金が発生します。詳細については、Looker Studio を使用して BigQuery データを可視化するをご覧ください。
重要度とカテゴリで検出結果を可視化するグラフを作成するには、次の操作を行います。
- Looker Studio を開いてログインします。
- メッセージが表示されたら、追加情報を提供して他の設定を行います。利用規約を確認し、問題がなければ続行します。
- [空のレポート] をクリックします。
- [データに接続] タブで、[BigQuery] カードをクリックします。
- プロンプトが表示されたら、Looker Studio が BigQuery プロジェクトにアクセスすることを承認します。
検出結果データに接続します。
- [プロジェクト] で、データセットのプロジェクトを選択します。または、[マイ プロジェクト] タブでプロジェクト ID を入力して検索します。
- [データセット] で、データセットの名前をクリックします。
- [Table] で、[findings] をクリックします。
- [Add] をクリックします。
- ダイアログで [Add to report] をクリックします。
レポートを追加したら、[グラフを追加] をクリックします。
[積み上げ縦棒グラフ] をクリックし、グラフを配置する領域をクリックします。
[Chart] > [Bar] ペインの [Data] タブで、次のフィールドを設定します。
- [Dimension] フィールドで [finding.severity] を選択します。
- [内訳ディメンション] フィールドで [finding.category] を選択します。
レポートが更新され、複数の列に検出結果と重要度とカテゴリ別に表示されます。
次のステップ
- BigQuery への一括エクスポート(プレビュー)を作成する方法を学習する。
- BigQuery でクエリを実行する方法を学習する。