Eventarc 觸發條件會宣告您對特定事件或一組事件感興趣,讓您擷取特定事件並採取行動。當建立的稽核記錄符合觸發條件的篩選條件時,Eventarc 觸發條件會type=google.cloud.audit.log.v1.written向目的地傳送要求。系統會根據稽核記錄項目的下列值進行比對:
- serviceName:寫入稽核記錄的服務
- methodName:受稽核的作業
- resourceName:接受稽核的資源
如需提供稽核記錄的 Google Cloud 服務清單,請參閱Google Cloud 含有稽核記錄的服務。您也可以擷取適用於 google.cloud.audit.log.v1.written 事件類型的事件篩選值。
找出事件篩選器
如要找出建立觸發程序所需的確切事件篩選器,請產生要擷取的事件,然後查看對應的 Cloud 稽核記錄項目。請注意,記錄項目中的資料可能會拆分並分散到多個項目。
- 確認您已為服務啟用資料存取稽核記錄類型。 - 請注意,系統不會列出預設啟用稽核的服務。 - 在「Audit Logs」(稽核記錄) 頁面的主要表格中,選取 Google Cloud服務。 
- 在「記錄類型」分頁中,選取「管理員讀取」、「資料讀取」和「資料寫入」核取方塊,然後按一下「儲存」。 
 
- 執行要建立事件篩選器的作業,並產生稽核記錄項目。例如,將檔案儲存在 Cloud Storage 值區中。 
- 前往 Google Cloud 控制台的「Logs Explorer」頁面。 
- 在「查詢建立工具」窗格中,建立並執行查詢來篩選記錄檔項目,然後擷取結果。例如: - resource.type="gcs_bucket" resource.labels.bucket_name="eventarc-bucket"- 如要進一步瞭解如何建構查詢來擷取及修正記錄檔,請參閱「使用 Logging 查詢語言建構查詢」。 
- 如要查看單一記錄項目的完整詳細資料,請按一下項目開頭的展開箭頭 (▸)。 - 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 物件,內含識別相關分割項目所需的資訊。
每個分割項目都有 protoPayload,其中包含相同的 serviceName、methodName 和 resourceName 值,有助於篩選 Cloud Audit Logs 事件。Eventarc 觸發條件會為每個分割項目傳送事件。
如果稽核記錄項目分成多個記錄項目,您可以篩選 LogEntry 中的任何欄位。舉例來說,如果您需要一系列分割記錄項目中的第一個項目,可以執行下列 gcloud CLI 指令,並使用 split.index=0 指出第一個項目的位置:
gcloud logging read "split.index=0"
如要瞭解如何辨識項目及查看查詢範例,請參閱「分割稽核記錄項目」一文。