このページでは、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 を情報源とする検出結果はすべて同じ source_id 値になります。 例: |
finding_id | 検出結果を表す一意の識別子。これは、組織のソース内で一意です。英数字で、32 文字以下です。 |
event_time |
イベントが発生した時間、または検出結果の更新が発生した時間。たとえば、検出結果がオープン状態のファイアウォールを表している場合、 例: |
検出結果 |
セキュリティ、リスク、健全性、プライバシーなどの評価データの記録。Security Command Center に取り込まれ、表示、通知、分析、ポリシーテスト、適用で使用されます。たとえば、App Engine アプリケーションで見つかったクロスサイト スクリプティング(XSS)の脆弱性が記録されます。
ネストされたフィールドの詳細については、
|
リソース |
この検出結果に関連付けられている Google Cloud リソースに関する情報。
ネストされたフィールドの詳細については、
|
費用
この機能に関連して 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 エクスポートを構成する必要があります。
BigQuery エクスポートで使用されるフィルタには、所在地管理の対象となるデータが含まれる可能性があるため、作成する前に正しいロケーションを指定していることを確認してください。Security Command Center では、エクスポートを作成するロケーションは制限されません。
BigQuery エクスポートは作成場所にのみ保存され、他のロケーションで表示や編集はできません。
BigQuery エクスポートを作成した後に、そのロケーションを変更することはできません。ロケーションを変更するには、BigQuery エクスポートを削除して、新しいロケーションに再作成する必要があります。
API 呼び出しを使用して BigQuery エクスポートを取得するには、bigQueryExport
の完全なリソース名でロケーションを指定する必要があります。次に例を示します。
GET https://securitycenter.googleapis.com/v2/organizations/123/locations/eu/bigQueryExports/my-export-01
同様に、gcloud CLI を使用して BigQuery エクスポートを取得するには、--location
フラグを使用してロケーションを指定する必要があります。次に例を示します。
gcloud scc bqexports get myBigQueryExport --organization=123 \
--location=us
検出結果を 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 Console の [VPC Service Controls] ページに移動します。
必要に応じて組織を選択します。
変更するサービス境界の名前をクリックします。
変更する必要があるサービス境界を確認するには、ログで
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
違反を示すエントリを確認します。これらのエントリで、servicePerimeterName
フィールドaccessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
を確認します。[境界を編集] をクリックします。
ナビゲーション メニューで、[上り(内向き)ポリシー] をクリックします。
ユーザーやサービス アカウントの上り(内向き)ルールを構成するには、次のパラメータを使用します。
- API クライアントの FROM 属性:
- [ID] メニューで、[選択した ID] を選択します。
- [ソース] メニューで、[すべてのソース] を選択します。
- [選択] をクリックして、Security Command Center API の呼び出しに使用するプリンシパルを入力します。
- Google Cloud サービス / リソースの TO 属性:
- [プロジェクト] メニューで、[選択したプロジェクト] を選択します。
- [選択] をクリックし、BigQuery データセットを含むプロジェクトを入力します。
- [サービス] メニューで [選択したサービス]、[BigQuery API] の順に選択します。
- [メソッド] メニューで、[すべてのアクション] を選択します。
- API クライアントの FROM 属性:
[保存] をクリックします。
ナビゲーション メニューで、[下り(外向き)ポリシー] をクリックします。
[Add Rule] をクリックします。
ユーザー アカウントやサービス アカウントの下り(外向き)ルールを構成するには、次のパラメータを入力します。
- API クライアントの FROM 属性:
- [ID] メニューで、[選択した ID] を選択します。
- [選択] をクリックして、Security Command Center API の呼び出しに使用するプリンシパルを入力します。
- Google Cloud サービス / リソースの TO 属性:
- [プロジェクト] メニューで、[すべてのプロジェクト] を選択します。
- [サービス] メニューで [選択したサービス]、[BigQuery API] の順に選択します。
- [メソッド] メニューで、[すべてのアクション] を選択します。
- API クライアントの FROM 属性:
[保存] をクリックします。
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 クライアント ライブラリで管理できます。
これらの BigQueryExport
リソースを gcloud CLI で管理するには、gcloud CLI コマンドを実行するときにロケーションを指定しないでください。
gcloud
Google Cloud Console に移動します。
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 のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。DESCRIPTION
は、人が読める形式のエクスポート構成の説明に置き換えます。この変数の指定は任意です。FILTER
は、エクスポートに含める検出結果を定義する式で置き換えます。たとえば、XSS_SCRIPTING カテゴリでフィルタリングする場合は「"category=\"XSS_SCRIPTING\"
」と入力します。この変数は省略可能です。
Java
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、 ローカル開発環境の ADC を設定するをご覧ください。
Python
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、 ローカル開発環境の ADC を設定するをご覧ください。
エクスポート構成を作成してから約 15 分以内に、BigQuery データセットに検出結果が表示されます。BigQuery テーブルが作成されると、フィルタとスコープに一致する新しい結果と更新された結果が、ほぼリアルタイムでテーブルに表示されます。
検出結果を確認するには、検出結果の確認をご覧ください。
BigQuery への新しいエクスポートの Ingress ルールを作成する
VPC Service Controls を使用していて、BigQuery データセットがサービス境界内のプロジェクトに含まれている場合は、BigQuery への新しいエクスポートの Ingress ルールを作成する必要があります。
BigQuery への新しいエクスポートを設定するでサービス境界を再度開きます。
[上り(内向き)ポリシー] をクリックします。
[Add Rule] をクリックします。
エクスポート構成の上り(内向き)ルールを構成するには、次のパラメータを入力します。
- API クライアントの FROM 属性:
- [ソース] プルダウン メニューで、[すべてのソース] を選択します。
- [ID] プルダウン メニューで [選択した ID] を選択します。
- [選択] をクリックして、BigQuery エクスポート構成サービス アカウントの名前「
service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
」を入力します。
- GCP サービス / リソースの TO 属性:
- [プロジェクト] プルダウン メニューで、[選択したプロジェクト] を選択します。
- [選択] をクリックし、BigQuery データセットを含むプロジェクトを選択します。
- [サービス] プルダウン メニューで [選択したサービス]、[BigQuery API] の順に選択します。
- [メソッド] プルダウン メニューで、[すべてのアクション] を選択します。
- API クライアントの FROM 属性:
ナビゲーション メニューで、[保存] をクリックします。
これで、選択したプロジェクト、ユーザー、サービス アカウントが保護されたリソースにアクセスし、検出結果をエクスポートできるようになりました。
このガイドの手順をすべて完了していて、エクスポートが正しく機能している場合、次のルールは削除できます。
- プリンシパルの上り(内向き)ルール
- プリンシパルの下り(外向き)ルール
これらのルールは、エクスポート構成を構成するためだけに必要でした。ただし、エクスポート構成が引き続き機能するには、前に作成した上り(内向き)ルールを維持する必要があります。このルールにより、Security Command Center は検出結果をサービス境界の背後にある BigQuery データセットにエクスポートできます。
エクスポート構成の詳細を表示する
gcloud
Google Cloud Console に移動します。
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 のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。たとえば、組織 ID が
123
の組織からmy-bq-export
という名前のエクスポート構成を取得するには、次のコマンドを実行します。gcloud scc bqexports get my-bq-export \ --organization=123 \ --location=global
エクスポート構成を更新する
必要に応じて、既存のエクスポート構成のフィルタ、データセット、説明を変更できます。エクスポート構成の名前は変更できません。
gcloud
Google Cloud Console に移動します。
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 のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。DESCRIPTION
は、人が読める形式のエクスポート構成の説明に置き換えます。この変数の指定は任意です。FILTER
は、エクスポートに含める検出結果を定義する式で置き換えます。たとえば、XSS_SCRIPTING カテゴリでフィルタリングする場合は「"category=\"XSS_SCRIPTING\"
」と入力します。この変数は省略可能です。
すべてのエクスポート構成を表示する
組織、フォルダ、プロジェクトのすべてのエクスポート構成を表示できます。
gcloud
Google Cloud Console に移動します。
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 のロケーション。データ所在地が有効になっていない場合は、値global
を使用します。LIMIT
は、表示するエクスポート構成の数に置き換えます。この変数の指定は任意です。PAGE_SIZE
は、ページサイズの値で置き換えます。この変数の指定は任意です。
Java
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、 ローカル開発環境の ADC を設定するをご覧ください。
Python
Security Command Center で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、 ローカル開発環境の ADC を設定するをご覧ください。
エクスポート構成を削除する
不要になったエクスポート構成は削除できます。
gcloud
Google Cloud Console に移動します。
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 のロケーション。データ所在地が有効になっていない場合は、値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 を開いてログインします。
- メッセージが表示されたら、追加情報を提供して他の設定を行います。利用規約を確認し、問題がなければ続行します。
- [空のレポート] をクリックします。
- [Connect to data] タブで、[BigQuery] カードをクリックします。
- プロンプトが表示されたら、Looker Studio が BigQuery プロジェクトにアクセスすることを承認します。
検出結果データに接続します。
- [Project] で、データセットのプロジェクトを選択します。または、[My projects] タブでプロジェクト ID を入力して検索します。
- [Dataset] で、データセットの名前をクリックします。
- [Table] で、[findings] をクリックします。
- [追加] をクリックします。
- ダイアログで [Add to report] をクリックします。
レポートを追加したら、[Add a chart] をクリックします。
[Stacked column chart] をクリックし、グラフを配置する領域をクリックします。
[Chart] > [Bar] ペインの [Data] タブで、次のフィールドを設定します。
- [Dimension] フィールドで [finding.severity] を選択します。
- [Breakdown Dimension] フィールドで [finding.category] を選択します。
レポートが更新され、複数の列に検出結果と重要度とカテゴリ別に表示されます。
次のステップ
BigQuery でクエリを実行する方法を学習する。