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

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

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

監査ログを書き込む Google Cloud サービスの一覧については、監査ログ付きの Google サービスをご覧ください。

serviceNamemethodName の値など、Eventarc でサポートされている監査ログイベントのリストについては、Eventarc でサポートされるイベントをご覧ください。

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

トリガーの作成に必要なイベント フィルタを特定するには、キャプチャするイベントを生成し、対応する 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"
    

    ログを取得して絞り込むクエリの詳細については、ログクエリの作成をご覧ください。

  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 フィールドは、監査対象のリソースです。

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

Eventarc トリガーの例

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

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=jobservice.jobcompleted" \
   --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 Audit Logs の分割

Cloud Logging は、512 KB のサイズ上限を超える単一の監査ログエントリを分割し、元の監査ログエントリに含まれるデータを複数の split ログエントリに分散します。split フィールドは LogSplit オブジェクトで、関連する分割ログエントリを識別するために必要な情報が含まれます。

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

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

gcloud logging read "split.index=0"

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

次のステップ