Eventarc トリガーは、特定のイベントまたは一連のイベントに関心があることを宣言します。これにより、特定のイベントをキャプチャして処理できます。type=google.cloud.audit.log.v1.written
の Eventarc トリガーは、トリガーのフィルタ条件に一致する監査ログが作成されたときに、サービスまたはワークフローにリクエストを送信します。監査ログエントリの次の値と照合されます。
serviceName
: 監査ログを書き込んだサービスmethodName
: 監査対象のオペレーションresourceName
: 監査対象のリソース
監査ログを書き込む Google Cloud サービスの一覧については、監査ログ付きの Google サービスをご覧ください。
serviceName
や methodName
の値など、Eventarc でサポートされている監査ログイベントのリストについては、Eventarc でサポートされるイベントをご覧ください。
イベント フィルタを特定する
トリガーの作成に必要なイベント フィルタを特定するには、キャプチャするイベントを生成し、対応する Cloud Audit Logs エントリを確認します。ログエントリのデータは、分割して複数のエントリに分散されることがあります。
サービスのデータアクセス監査ログタイプが有効になっていることを確認します。
デフォルトで監査が有効になっているサービスは表示されません。
[監査ログ] ページのメインテーブルで、タイトル列から Google Cloud サービスを選択します。
[ログタイプ] タブで、[管理読み取り]、[データ読み取り]、[データ書き込み] のチェックボックスをオンにし、[保存] をクリックします。
イベント フィルタを作成するオペレーションを実行して、監査ログエントリを生成します。たとえば、Cloud Storage バケットにファイルを保存します。
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[クエリビルダー] ペインで、ログエントリをフィルタして結果を取得するクエリを作成して実行します。次に例を示します。
resource.type="gcs_bucket" resource.labels.bucket_name="eventarc-bucket"
ログを取得して絞り込むクエリの詳細については、ログクエリの作成をご覧ください。
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 イベントのフィルタリングに役立つ、同じ serviceName
、methodName
、resourceName
の値が含まれます。Eventarc トリガーは、分割ログエントリごとにイベントを配信します。
監査ログエントリが複数のログエントリに分割されている場合は、LogEntry
のフィールドをフィルタリングできます。たとえば、分割ログエントリの最初のエントリが必要な場合は、次の gcloud CLI コマンドを実行します。split.index
を使用して、一連の分割エントリ内でのエントリの位置を指定します(分割された最初のエントリのインデックスは 0 です)。
gcloud logging read "split.index=0"
エントリの認識方法やサンプルクエリなど、ログエントリの分割の詳細については、監査ログエントリの分割をご覧ください。