确定 Cloud Audit Logs 的事件过滤条件

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 条目。请注意,一个日志条目中的数据可能会拆分并分布到多个条目中

  1. 确保您已为服务启用数据访问审核日志类型。

    转到“审核日志”

    请注意,其中未列出任何默认启用审核的服务。

    1. 审核日志页面的主表格中,选择一个 Google Cloud 服务。

    2. 日志类型标签页中,选中管理员读取数据读取数据写入复选框,并然后点击保存

  2. 执行要为其创建事件过滤条件的操作并生成审核日志条目。例如,将文件存储到 Cloud Storage 存储分区中。

  3. 在 Google Cloud 控制台中,转到日志浏览器

    转到日志浏览器

  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 事件类型的提供方 serviceNamemethodName 值。

如需列出服务名称,请运行以下命令:

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,其中包含相同的 serviceNamemethodNameresourceName 值,以帮助过滤 Cloud Audit Logs 事件。Eventarc 触发器会为每个拆分条目传送一个事件。

当您将一个审核日志条目拆分成多个日志条目后,可以过滤 LogEntry 中的任何字段。例如,如果您需要一系列拆分日志条目中的第一个条目,则可以运行以下 gcloud CLI 命令,并使用 split.index=0 指示第一个条目的位置:

gcloud logging read "split.index=0"

如需了解详情(包括如何识别条目和示例查询),请参阅拆分审核日志条目

后续步骤