決定 Cloud 稽核記錄的事件篩選器

Eventarc 觸發條件會宣告您對特定事件或一組事件感興趣,讓您擷取特定事件並對事件採取行動。當建立的稽核記錄檔符合觸發條件的篩選條件時,Eventarc 觸發條件會向目的地傳送要求。type=google.cloud.audit.log.v1.written系統會根據稽核記錄項目的下列值進行比對:

  • serviceName:寫入稽核記錄的服務
  • methodName:要稽核的作業
  • resourceName:接受稽核的資源

如要查看提供稽核記錄的 Google Cloud 服務清單,請參閱「Google Cloud 具備稽核記錄的服務」。您也可以擷取適用於 google.cloud.audit.log.v1.written 事件類型的事件篩選器值。

找出事件篩選器

如要找出建立觸發條件所需的確切事件篩選器,請產生要擷取的事件,然後查看對應的 Cloud 稽核記錄項目。請注意,記錄項目的資料可能會拆分並分散到多個項目。

  1. 確認您已為服務啟用資料存取稽核記錄類型。

    前往「Audit Logs」(稽核記錄) 頁面

    請注意,系統不會列出預設啟用稽核的服務。

    1. 在「稽核記錄」頁面的主表格中,選取 Google Cloud服務。

    2. 在「記錄類型」分頁中,勾選「管理員讀取」、「資料讀取」和「資料寫入」核取方塊,然後點按「儲存」。

  2. 執行要建立事件篩選器的作業,並產生稽核記錄項目。例如將檔案儲存在 Cloud Storage bucket 中。

  3. 前往 Google Cloud 控制台的「Logs Explorer」。

    前往 Logs Explorer

  4. 在「查詢產生器」窗格中,建立並執行查詢,篩選記錄項目並擷取結果。例如:

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

    如要進一步瞭解如何建構查詢來擷取及修正記錄,請參閱「使用 Logging 查詢語言建構查詢」。

  5. 如要查看單一記錄項目的完整詳細資料,請按一下項目開頭的展開箭頭 (▸)。

    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 稽核記錄事件。Eventarc 觸發條件會為每個分割項目傳送事件。

如果稽核記錄項目分成多個記錄項目,您可以篩選 LogEntry 中的任何欄位。舉例來說,如果您需要一系列分割記錄項目的第一個項目,可以執行下列 gcloud CLI 指令,並使用 split.index=0 指出第一個項目的位置:

gcloud logging read "split.index=0"

如要瞭解如何辨識項目和查詢範例,請參閱「分割稽核記錄項目」。

後續步驟