将审核日志事件路由到 Cloud Run

Eventarc 触发器声明您对某个事件或一系列事件感兴趣。如需配置事件路由,您可以为触发器指定过滤条件,包括事件来源和目标 Cloud Run 服务。

Eventarc 通过 HTTP 请求以 CloudEvents 格式将事件传送到事件接收器。

以下说明介绍了如何配置到 Cloud Run 服务的路由(当创建与触发器的过滤条件匹配的审核日志时触发)。如需查看 Eventarc 支持的审核日志事件列表(包括 serviceNamemethodName 值),请参阅 Eventarc 支持的事件类型

如需详细了解如何捕获在创建与触发器的过滤条件匹配的审核日志时触发的事件,请参阅确定 Cloud Audit Logs 的事件过滤条件

准备创建触发器

在创建触发器之前,请先完成以下前提条件:

控制台

  1. 在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目

    转到“项目选择器”

  2. 启用 Cloud Logging、Eventarc 和 Eventarc Publishing API。

    启用 API

  3. 如果适用,请启用与 Cloud Audit Logs 事件相关的 API。例如,对于 Cloud Functions 审核日志,请启用 Cloud Functions API。

  4. 如果您还没有用户管理的服务账号,请创建一个,然后为其授予必要的角色和权限,以便 Eventarc 可以管理目标服务的事件。

    1. 在 Google Cloud 控制台中,进入创建服务账号页面。

      转到“创建服务账号”

    2. 选择您的项目。

    3. 服务账号名称字段中,输入一个名称。Google Cloud 控制台会根据此名称填充服务账号 ID 字段。

      服务账号说明字段中,输入说明。例如 Service account for event trigger

    4. 点击创建并继续

    5. 如需提供适当的访问权限,请在选择角色列表中,针对经过身份验证或未经身份验证的调用选择要向服务账号授予的所需 Identity and Access Management (IAM) 角色。如需了解详情,请参阅 Cloud Run 目标的角色和权限

      如需添加其他角色,请点击 添加其他角色,然后添加其他各个角色。

    6. 点击继续

    7. 如需完成账号的创建过程,请点击完成

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 启用 Cloud Logging、Eventarc 和 Eventarc Publishing API。

    gcloud services enable logging.googleapis.com \
      eventarc.googleapis.com \
      eventarcpublishing.googleapis.com
    
  3. 如果适用,请启用与 Cloud Audit Logs 事件相关的 API。例如,对于 Cloud Functions 审核日志,请启用 cloudfunctions.googleapis.com

  4. 如果您还没有用户管理的服务账号,请创建一个,然后为其授予必要的角色和权限,以便 Eventarc 可以管理目标服务的事件。

    1. 创建服务账号:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      SERVICE_ACCOUNT_NAME 替换为服务账号的名称。该名称必须介于 6 到 30 个字符之间,且可以包含小写字母数字字符和短划线。在服务账号创建完毕后,无法再更改其名称。

    2. 为经过身份验证或未经身份验证的调用授予所需的 Identity and Access Management (IAM) 角色或权限。如需了解详情,请参阅 Cloud Run 目标的角色和权限

创建触发器

您可以使用 Google Cloud CLI 或通过 Google Cloud 控制台创建 Eventarc 触发器。

控制台

  1. 在 Google Cloud 控制台中,进入 Eventarc 触发器页面。

    转到“触发器”

  2. 点击 创建触发器
  3. 输入触发器名称

    这是触发器的 ID,必须以字母开头。最多可包含 63 个小写字母、数字或连字符。

  4. 触发器类型部分,选择 Google 来源
  5. 选择事件提供方

    这是通过审核日志作为事件来源的 Google 服务。例如,选择 BigQuery

    请注意,关联的 Google Cloud 文档中使用的事件提供方名称可能没有 Cloud 或 Google Cloud 前缀。例如,在控制台中,Memorystore for Redis 称为 Google Cloud Memorystore for Redis

  6. 事件类型列表中,从“通过 Cloud Audit Logs”事件中选择一种事件类型。
  7. 从下列选项中选择一项:
    • 任何资源 - 这是默认选项,其中包含动态创建的资源,这些资源会在创建时生成标识符。
    • 特定资源 - 必须提供完整的资源名称。
    • 路径模式 - 可以使用路径模式过滤资源。例如,输入 projects/_/buckets/eventarc-bucket/objects/random.txt 或输入 projects/_/buckets/**/r*.txt
  8. 如需指定事件载荷的编码,请在事件数据内容类型列表中选择 application/jsonapplication/protobuf

    请注意,采用 JSON 格式的事件载荷大于采用 Protobuf 格式的事件载荷。这可能会影响可靠性,具体取决于您的事件目标及其事件大小限制。如需了解详情,请参阅已知问题

  9. 区域列表中,选择一个区域。

    Eventarc 的 Cloud Audit Logs 触发器可在特定区域和全球区域使用,但无法在双区域和多区域位置使用。为避免全球触发器导致任何性能和数据驻留问题,Google 建议触发器位置与生成事件的 Google Cloud 服务的位置匹配。如需了解详情,请参阅 Eventarc 位置

    如果指定全球位置,您将收到所有位置中与事件过滤条件匹配的事件。例如,通过创建全球 Eventarc 触发器,您可以从 EU 和 US 多区域的资源接收事件。

    请注意,Compute Engine 的 Cloud Audit Logs 触发器存在一个已知问题,会导致事件来自单一区域:us-central1。这与虚拟机实例实际位于何处无关。创建触发器时,请将触发器位置设为 us-central1global

  10. ?
  11. 选择将调用您的服务或工作流的服务账号

    或者,您可以创建新的服务账号。

    这用于指定与触发器相关联且您之前向其授予 Eventarc 所需的特定角色的 Identity and Access Management (IAM) 服务账号电子邮件。

  12. 事件目的地列表中,选择 Cloud Run
  13. 选择一项服务。

    这是接收触发器事件的服务的名称。该服务必须与触发器位于同一项目中,并在事件生成时,接收作为 HTTP POST 请求发送到其根网址路径 (/) 的事件。

  14. (可选)您可以指定将传入请求发送到的服务网址路径

    这是触发器的事件应该发送到的目的地服务上的相对路径。例如://routerouteroute/subroute

  15. 点击创建
  16. 创建触发器之后,您便无法修改事件来源过滤条件。请创建新触发器,并删除旧触发器。 如需了解详情,请参阅管理触发器

gcloud

您可以通过运行包含必需和可选标志的 gcloud eventarc triggers create 命令来创建触发器。

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=SERVICE_NAME" \
    --event-filters="methodName=METHOD_NAME" \
    --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

替换以下内容:

  • TRIGGER:触发器的 ID 或完全限定标识符。
  • LOCATION:Eventarc 触发器的位置。或者,您可以设置 eventarc/location 属性;例如 gcloud config set eventarc/location us-central1

    Eventarc 的 Cloud Audit Logs 触发器可在特定区域和全球区域使用,但无法在双区域和多区域位置使用。为避免全球触发器导致任何性能和数据驻留问题,Google 建议触发器位置与生成事件的 Google Cloud 服务的位置匹配。如需了解详情,请参阅 Eventarc 位置

    如果指定全球位置,您将收到所有位置中与事件过滤条件匹配的事件。例如,通过创建全球 Eventarc 触发器,您可以从 EU 和 US 多区域的资源接收事件。

    请注意,Compute Engine 的 Cloud Audit Logs 触发器存在一个已知问题,会导致事件来自单一区域:us-central1。这与虚拟机实例实际位于何处无关。创建触发器时,请将触发器位置设为 us-central1global

  • DESTINATION_RUN_SERVICE:为触发器接收事件的 Cloud Run 服务的名称。该服务可以位于任何 Cloud Run 支持位置,无需与触发器位于同一位置。但是,该服务必须与触发器位于同一项目中,并在事件生成时,接收作为 HTTP POST 请求发送到其根网址路径 (/) 的事件。
  • DESTINATION_RUN_REGION:(可选)目标 Cloud Run 服务所在的区域。如果未指定,系统将假定服务与触发器位于同一区域。
  • SERVICE_NAME:Google Cloud 服务的标识符
  • METHOD_NAME:操作的标识符
  • EVENT_DATA_CONTENT_TYPE:(可选)事件载荷的编码,可以为 application/jsonapplication/protobuf。默认编码为 application/json

    请注意,采用 JSON 格式的事件载荷大于采用 Protobuf 格式的事件载荷。这可能会影响可靠性,具体取决于您的事件目标及其事件大小限制。如需了解详情,请参阅已知问题

  • SERVICE_ACCOUNT_NAME:用户管理的服务账号的名称。
  • PROJECT_ID:您的 Google Cloud 项目 ID。

注意:

  • 这些标志是必需的:

    • --event-filters="type=google.cloud.audit.log.v1.written"
    • --event-filters="serviceName=VALUE"
    • --event-filters="methodName=VALUE"
  • (可选)如需过滤特定资源的事件,您可以使用 --event-filters="resourceName=VALUE" 标志并指定资源的完整路径。忽略动态创建的资源的标志,系统在创建这些资源时会生成标识符。 或者,您可以使用 --event-filters-path-pattern="resourceName=VALUE" 标志并指定资源路径模式来过滤一组资源的事件。

  • 每个触发器可以有多个事件过滤条件,在一个 --event-filters=[ATTRIBUTE=VALUE,...] 标志内以英文逗号分隔,您也可以重复使用该标志来添加更多过滤条件。只有符合所有过滤条件的事件会被发送到目的地。不支持通配符和正则表达式。
  • 触发器创建后,事件过滤条件类型便无法更改。对于其他事件类型,您必须创建新的触发器。
  • --service-account 标志用于指定与触发器关联的 Identity and Access Management (IAM) 服务账号电子邮件。
  • (可选)您可以使用 --destination-run-path 标志指定触发器的事件应发送到的目标 Cloud Run 服务的相对路径。

示例:

  gcloud eventarc triggers create helloworld-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=bigquery.googleapis.com" \
      --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
      --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

这会为由 bigquery.googleapis.com 写入的审核日志和标识为 google.cloud.bigquery.v2.JobService.InsertJob 的操作创建名为 helloworld-trigger 的触发器。

Terraform

您可以使用 Terraform 为 Cloud Run 目标创建触发器。如需了解详情,请参阅使用 Terraform 创建触发器

列出触发器

如需确认触发器已创建,您可以使用 Google Cloud CLI 或通过 Google Cloud 控制台列出 Eventarc 触发器。

控制台

  1. 在 Google Cloud 控制台中,进入 Eventarc 触发器页面。

    转到“触发器”

    此页面会列出所有位置的触发器,并包含名称、区域、事件提供方、目标位置等详细信息。

  2. 如需过滤触发器,请执行以下操作:

    1. 点击 过滤过滤触发器字段。
    2. 属性列表中,选择要作为触发器过滤条件的选项。

    您可以选择单个属性,或使用逻辑运算符 OR 添加更多属性。

  3. 如需对触发器进行排序,请点击任意受支持的列标题旁边的 排序

gcloud

运行以下命令可列出触发器:

gcloud eventarc triggers list --location=-

此命令会列出所有位置的触发器,并包含名称、类型、目标位置和状态等详细信息。

后续步骤