Cloud Audit Logs のイベント フィルタを決定する

Eventarc トリガーは、特定のイベントまたは一連のイベントに関心があることを宣言します。これにより、特定のイベントをキャプチャして処理できます。type=google.cloud.audit.log.v1.written の Eventarc トリガーは、トリガーのフィルタ条件に一致する監査ログが作成されると、宛先にリクエストを送信します。監査ログエントリの次の値と照合されます。

  • serviceName: 監査ログを書き込んだサービス
  • methodName: 監査対象のオペレーション
  • resourceName: 監査対象のリソース

監査ログを書き込む Google Cloud サービスの一覧については、監査ログ付きの Google Cloud サービスをご覧ください。google.cloud.audit.log.v1.written イベントタイプに適用されるイベント フィルタ値を取得することもできます。

イベント フィルタを特定する

トリガーの作成に必要なイベント フィルタを特定するには、キャプチャするイベントを生成し、対応する Cloud Audit Logs エントリを確認します。ログエントリのデータは、分割して複数のエントリに分散されることがあります。

  1. サービスのデータアクセス監査ログタイプが有効になっていることを確認します。

    監査ログに移動

    デフォルトで監査が有効になっているサービスは表示されません。

    1. [監査ログ] ページのメインのテーブルで、Google Cloud サービスを選択します。

    2. [ログタイプ] タブで、[管理読み取り]、[データ読み取り]、[データ書き込み] のチェックボックスをオンにし、[保存] をクリックします。

  2. イベント フィルタを作成するオペレーションを実行して、監査ログエントリを生成します。たとえば、Cloud Storage バケットにファイルを保存します。

  3. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  4. [クエリビルダー] ペインで、ログエントリをフィルタして結果を取得するクエリを作成して実行します。例:

    resource.type="gcs_bucket" resource.labels.bucket_name="eventarc-bucket"
    

    ログを取得して絞り込むためのクエリを作成する方法の詳細については、Logging のクエリ言語を使用してクエリを作成するをご覧ください。

  5. 1 つのログエントリの詳細を表示するには、エントリの先頭にある展開矢印(▸)をクリックします。

    protoPayload フィールドは、監査ログエントリと他のログエントリを区別します。次の例では、ログエントリの一部が省略され、一部のフィールドがハイライト表示されています。

    {
       protoPayload:{
          @type:"type.googleapis.com/google.cloud.audit.AuditLog",
          status:{},
          authenticationInfo:{},
          requestMetadata:{},
          serviceName:"storage.googleapis.com",
          methodName:"storage.objects.create",
          authorizationInfo:[],
          resourceName:"projects/_/buckets/eventarc-bucket/objects/random.txt",
          resourceLocation:{}
       },
       insertId:"il9evleafpdk",
       resource:{
          type:"gcs_bucket",
          labels:{
             project_id:"cloud-run-test",
             location:"us-central1",
             bucket_name:"eventarc-bucket"
          }
       },
       timestamp:"2021-03-05T15:55:20.754688805Z",
       severity:"INFO",
       logName:"projects/cloud-run-test/logs/cloudaudit.googleapis.com%2Fdata_access",
       receiveTimestamp:"2021-03-05T15:55:20.884984611Z"
    }

    • 次の情報を使用して、この監査ログエントリの内容を確認できます。

      • protoPayload.@type フィールドは type.googleapis.com/google.cloud.audit.AuditLog です。

      • logName フィールドにはドメイン cloudaudit.googleapis.com が含まれています。

    • protoPayload.serviceName フィールドは、監査ログを書き込むサービスです。

    • protoPayload.methodName フィールドは、監査対象のオペレーションです。

    • protoPayload.resourceName フィールドは、監査対象のリソースです。

    監査ログエントリの情報を調べる方法については、監査ログについてをご覧ください。

イベント フィルタ値を取得する

gcloud eventarc audit-logs-provider コマンドを使用して、google.cloud.audit.log.v1.written イベントタイプのプロバイダの serviceName 値と methodName 値を調べて一覧取得できます。

サービス名を一覧取得するには、次のコマンドを実行します。

gcloud eventarc audit-logs-provider service-names list

これにより、google.cloud.audit.log.v1.written イベントタイプのすべての serviceName 属性値が返されます。

特定のサービスのメソッド名を一覧取得するには、次のコマンドを実行します。

gcloud eventarc audit-logs-provider method-names list \
     --service-name=SERVICE_NAME

SERVICE_NAME は、serviceName 値(例: bigquery.googleapis.com)に置き換えます。

Eventarc トリガーの例

次の例では、Workflows の宛先に cal-workflows-trigger というトリガーを作成します。トリガーは、bigquery.googleapis.com によって書き込まれた監査ログと、google.cloud.bigquery.v2.JobService.InsertJob として識別されるオペレーションでフィルタします。

gcloud eventarc triggers create cal-workflows-trigger \
   --location=us-central1 \
   --destination-workflow=my-workflow \
   --destination-workflow-location=europe-west4 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=bigquery.googleapis.com" \
   --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
   --service-account=${TRIGGER_SA}@${PROJECT_ID}.iam.gserviceaccount.com

次の例では、Cloud Run の宛先に cal-run-trigger というトリガーを作成します。トリガーは、workflows.googleapis.com によって書き込まれた監査ログと、google.cloud.workflows.v1.Workflows.GetWorkflow として識別されるオペレーションでフィルタします。

gcloud eventarc triggers create cal-run-trigger \
   --location=us-central1 \
   --destination-run-service=helloworld-events \
   --destination-run-region=us-central1 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=workflows.googleapis.com" \
   --event-filters="methodName=google.cloud.workflows.v1.Workflows.GetWorkflow" \
   --event-filters="resourceName=projects/_/locations/us-central1/workflows/test-workflow" \
   --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

監査ログエントリのサイズ超過

Cloud Logging は、使用量上限を超える監査ログエントリを分割し、元の監査ログエントリに含まれるデータを複数の分割エントリに分散します。ログエントリに split フィールドが含まれている場合、エントリは、元の大きなログエントリを分割した結果です。split フィールドは LogSplit オブジェクトであり、関連する分割エントリを識別するために必要な情報が含まれます。

各分割エントリには、Cloud Audit Logs イベントのフィルタリングに役立つ同じ serviceNamemethodNameresourceName の値を含む protoPayload があります。Eventarc トリガーは、分割されたエントリごとにイベントを配信します。

監査ログエントリが複数のログエントリに分割されている場合は、LogEntry のいずれかのフィールドをフィルタリングできます。たとえば、一連の分割ログエントリの最初のエントリが必要な場合は、次の gcloud CLI コマンドを実行します。split.index=0 を使用して、最初のエントリの位置を指定します。

gcloud logging read "split.index=0"

エントリの認識方法やサンプルクエリなどの詳細については、監査ログエントリの分割をご覧ください。

次のステップ