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