接收 Cloud Audit Logs 事件

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本教程介绍如何使用 Cloud Audit Logs 部署经身份验证的 Cloud Run 服务,该服务接收来自 Cloud Storage 的事件。使用本教程部署生产工作负载。Eventarc 触发器根据 Cloud Audit Logs 条目过滤事件。如需了解详情,请参阅确定 Cloud Audit Logs 的事件过滤条件

您可以使用 Google Cloud Console 或 Google Cloud CLI 来完成本教程。

目标

在此教程中,您将学习以下操作:

  1. 创建 Cloud Storage 存储桶作为事件来源。

  2. 将事件接收器服务部署到 Cloud Run。

  3. 创建 Eventarc 触发器。

  4. 通过将文件上传到 Cloud Storage 存储桶来创建事件,并在 Cloud Run 日志中查看该事件。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

如果您的组织将限制应用于您的 Google Cloud 环境,则本文档中的某些步骤可能无法正常工作。在这种情况下,您可能无法完成创建公共 IP 地址或服务帐号密钥等任务。如果您发出的请求会返回有关限制条件的错误,请参阅如何在受限的 Google Cloud 环境中开发应用

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  4. 启用 Cloud Build、Logging、Pub/Sub、Cloud Run、Eventarc API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  7. 启用 Cloud Build、Logging、Pub/Sub、Cloud Run、Eventarc API。

    启用 API

  8. 通过控制台或 gcloud CLI 完成以下步骤:

    控制台

    1. 在控制台中,转到服务帐号页面。

      转到“服务帐号”
    2. 点击创建服务帐号
    3. 输入在控制台中显示的服务帐号名称。

      控制台会根据此名称生成服务帐号 ID。如有必要,请修改 ID。此 ID 创建后便无法更改。

    4. 可选:输入服务帐号的说明。
    5. 如果您现在不想设置访问权限控制,请点击完成以完成服务帐号的创建过程。

      如需立即设置访问权限控制,请点击创建并继续,然后继续执行下一步。

    6. 选择要授予项目服务帐号的 Cloud Run InvokerEventarc Event Receiver Identity and Access Management 角色
    7. 完成添加角色后,点击继续完成以完成服务帐号的创建过程。
    8. 如需将 IAM 角色授予主帐号,请执行以下操作:
      1. 在控制台中,转到 IAM 页面。

        转到 IAM
      2. 找到包含 USER_EMAIL 电子邮件地址的行,点击该行中的 修改主帐号,然后点击 添加其他角色
      3. 从下拉列表中添加 Eventarc AdminService Account User 角色。
      4. 点击保存。主帐号将被授予资源的 Identity and Access Management 角色。

    gcloud

    1. 更新 gcloud 组件:
      gcloud components update
    2. 使用您的帐号登录:
      gcloud auth login
      
    3. 设置本教程中使用的配置变量:
      gcloud config set project PROJECT_ID
      gcloud config set run/region us-central1
      gcloud config set run/platform managed
      gcloud config set eventarc/location us-central1
      
    4. PROJECT_ID 替换为相应项目的 ID。
    5. 在 Google Cloud Storage 中启用 Cloud Audit Logs 管理员读取数据读取数据写入日志类型:转到 Cloud Audit Logs
    6. 为项目创建服务帐号:
      gcloud iam service-accounts create sample-service-account \
          --description="A sample service account" \
          --display-name="Sample service account"
      创建服务帐号后,最多可能需要 7 分钟才能使用该服务帐号。如果您在创建服务帐号后立即尝试使用该服务帐号,并且收到错误消息,请至少等待 60 秒再重试。
    7. 要确认 sample-service-account 已创建,请运行以下命令:
      gcloud iam service-accounts list
      输出应类似如下所示:
      DISPLAY NAME                     EMAIL                                                               DISABLED
      Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
      Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
    8. 向服务帐号授予以下角色:

        run.invoker

        gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
          --role="roles/run.invoker"

        PROJECT_ID 替换为 Google Cloud 项目 ID。

        eventarc.eventReceiver

        gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
          --role="roles/eventarc.eventReceiver"

        PROJECT_ID 替换为 Google Cloud 项目 ID。

    9. 向用户授予以下 IAM 角色:

        eventarc.admin

        gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="PRINCIPAL" \
          --role='roles/eventarc.admin'

        替换以下值:

        • PROJECT_ID:Google Cloud 项目 ID。
        • PRINCIPAL:您要向其授予相应角色的有效身份。

            例如:

          • Google 帐号电子邮件地址:user:test-user@gmail.com
          • Google 群组:group:admins@example.com
          • 服务帐号:serviceAccount:test123@example.domain.com
          • Google Workspace 或 Cloud Identity 网域:domain:example.domain.com

        iam.serviceAccountUser

        gcloud iam service-accounts add-iam-policy-binding \
          sample-service-account@PROJECT_ID.iam.gserviceaccount.com \
          --member="PRINCIPAL" \
          --role="roles/iam.serviceAccountUser"

        替换以下值:

        • PROJECT_ID:Google Cloud 项目 ID。
        • PRINCIPAL:您要向其授予相应角色的有效身份。

            例如:

          • Google 帐号电子邮件地址:user:test-user@gmail.com
          • Google 群组:group:admins@example.com
          • 服务帐号:serviceAccount:test123@example.domain.com
          • Google Workspace 或 Cloud Identity 网域:domain:example.domain.com
    10. 下载并安装 Git 源代码管理工具。

创建 Cloud Storage 存储桶

本教程使用 Cloud Storage 作为事件来源。要创建存储桶,请执行以下操作:

控制台

  1. 在控制台中转到 Cloud Storage。

    转到 Cloud Storage

  2. 点击创建存储桶
  3. 新存储桶。
  4. 输入您的存储桶信息,然后点击继续以完成各个步骤:
    1. 请输入具有唯一性的名称。例如 eventarcbucket
    2. 选择区域作为位置类型
    3. 选择 us-central1 (Iowa) 作为位置
    4. 默认存储类别选择标准
    5. 访问权限控制中选择统一
  5. 点击创建

gcloud

gsutil mb -l us-central1 gs://events-tutorial-PROJECT_ID/

创建事件来源后,您可以在 Cloud Run 上部署事件接收器服务。

将事件接收器服务部署到 Cloud Run

部署接收和记录事件的 Cloud Run 服务。要部署示例事件接收器服务,请执行以下操作:

控制台

  1. 将示例代码库克隆到 GitHub 帐号:
  2. Go

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/golang-samples
    2. 点击创建分支 (Fork)。
    3. 克隆按钮的屏幕截图。
    4. 如果出现提示,请选择克隆代码库的位置。

    Java

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/java-docs-samples
    2. 点击创建分支 (Fork)。
    3. 克隆按钮的屏幕截图。
    4. 如果出现提示,请选择克隆代码库的位置。

    .NET

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/dotnet-docs-samples
    2. 点击创建分支 (Fork)。
    3. 克隆按钮的屏幕截图。
    4. 如果出现提示,请选择克隆代码库的位置。

    Node.js

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/nodejs-docs-samples
    2. 点击创建分支 (Fork)。
    3. 克隆按钮的屏幕截图。
    4. 如果出现提示,请选择克隆代码库的位置。

    Python

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/python-docs-samples
    2. 点击创建分支 (Fork)。
    3. 克隆按钮的屏幕截图。
    4. 如果出现提示,请选择克隆代码库的位置。
  3. 在控制台中,转到 Cloud Run。
  4. 转到 Cloud Run

  5. 点击 创建服务,以显示创建服务表单。
  6. “创建服务”页面。
  7. 选择从源代码库持续部署新修订版本 (Continuously deploy new revisions from a source repository)。
  8. 点击使用 Cloud Build 进行设置,以打开使用 Cloud Build 进行设置表单。
  9. 通过 Cloud Build 页面进行设置。

    通过 Cloud Build 进行设置表单中:

    1. 出现提示时,启用 Cloud Build APIContainer Analysis API
    2. 选择 GitHub 作为代码库提供程序
    3. 如果系统提示,请点击安装 Google Cloud Build
    4. 选择克隆的 GitHub 代码库为代码库
    5. 点击下一步
    6. 分支字段中,输入 ^master$
    7. 选择 Dockerfile 作为 Build 类型,并提供 Dockerfile 的来源位置:eventarc/audit-storage/Dockerfileeventarc/audit_storage/Dockerfile(Go)
    8. 点击保存
  10. 创建服务表单中,输入所需的服务名称。例如 helloworld-events
  11. 选择 us-central1(Iowa) 作为您的服务所在的区域
  12. 点击下一步
  13. 配置此服务的触发方式部分:
    • 根据您要在 Cloud Run 服务上允许的入站流量,选择任何入站流量选项。
    • 选择需要进行身份验证
  14. (可选)点击 添加 Eventarc 触发器创建触发器或在创建服务后创建触发器。如需详细了解如何创建触发器,请参阅创建 Eventarc 触发器
  15. 点击创建

gcloud

  1. 克隆代码库:

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage

    .NET

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
  2. 构建容器并将其上传到 Cloud Build:
    gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld-events
    
  3. 将容器映像部署到 Cloud Run:
    gcloud run deploy helloworld-events \
      --image gcr.io/PROJECT_ID/helloworld-events
    

    在系统提示允许未经身份验证的调用时,输入 n

    部署成功后,命令行会显示服务网址。

现在,您已将名为 helloworld-events 的事件接收器服务部署到 Cloud Run,接下来便可以设置触发器了。

创建 Eventarc 触发器

Eventarc 触发器会将 Cloud Storage 存储桶中的事件发送到“helloworld-events”Cloud Run 服务。

控制台

  1. 在控制台中,转到 Cloud Run。

    转到 Cloud Run

  2. 在服务列表中,点击您创建的服务,转到该服务的服务详情页面。
  3. 点击触发器标签页,然后点击 添加 Eventarc 触发器
  4. 选择事件下拉列表中,选择 Cloud Storage > storage.objects.create
  5. 如需为 storage.googleapis.com 启用所需的审核日志类型,请点击全部启用
  6. 接收来自以下位置的事件字段中,选择单区域,然后选择 us-central1 以接收来自此区域的事件。
  7. 如果出现提示,请向 Compute Engine 服务帐号授予 eventarc.eventReceiver 角色,并将 iam.serviceAccountTokenCreator 角色授予 Pub/Sub 服务帐号。设置新触发器
  8. 选择您创建的服务帐号。例如,SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com。
  9. 点击保存

gcloud

  1. 创建一个用于过滤 Cloud Storage 事件并且使用您创建的服务帐号的触发器:
    gcloud eventarc triggers create events-tutorial-trigger \
       --destination-run-service=helloworld-events \
       --destination-run-region=us-central1 \
       --event-filters="type=google.cloud.audit.log.v1.written" \
       --event-filters="serviceName=storage.googleapis.com" \
       --event-filters="methodName=storage.objects.create" \
       --service-account=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
    PROJECT_ID 替换为 Google Cloud 项目 ID。这将创建一个名为 events-tutorial-trigger 的触发器。
  2. 要确认 events-tutorial-trigger 已成功创建,请运行以下命令:
    gcloud eventarc triggers list --location=us-central1
  3. 此时应列出 events-tutorial-trigger,其目标为 helloworld-events

生成并查看事件

  1. 要生成事件,请执行以下操作:

    控制台

    1. 使用文件名 random.txt 和文本“Hello World”创建文本文件。
    2. 在控制台中转到 Cloud Storage。

      转到 Cloud Storage

    3. 选择您创建的存储桶。
    4. 对象标签页中,点击上传文件,然后上传 random.txt 文件。

    gcloud

    将文本文件上传到 Cloud Storage:

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
  2. 如需查看日志条目,请执行以下操作:
  3. 控制台

    1. 在控制台中,转到 Cloud Run。

      转到 Cloud Run

    2. 在服务列表中,点击您创建的服务的名称,以转到其服务详情页面。
    3. 点击日志标签页,以获取此服务的所有修订版本的请求日志及容器日志。您可以按日志严重级别进行过滤。
    4. 查找类似如下的日志条目:触发器日志。

    gcloud

    1. gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
    2. 查找类似如下的日志条目:
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      其中,BUCKET_NAME 是 Cloud Storage 存储桶的名称。

恭喜!您已成功将事件接收器服务部署到 Cloud Run,创建 Eventarc 触发器,在 Cloud Storage 中生成事件并在 Cloud Run 日志中查看该事件。

清理

虽然当服务未在使用时 Cloud Run 不会产生费用,但您可能仍然需要为在 Container Registry 中存储容器映像Eventarc 资源以及在 Cloud Storage 存储桶中存储文件付费。

您可以删除映像以及删除存储桶。要删除 Eventarc 触发器,请运行以下命令:

gcloud eventarc triggers delete events-tutorial-trigger

或者,您也可以删除 Google Cloud 项目,以避免产生费用。删除 Cloud 项目后,系统即会停止对该项目中使用的所有资源计费。

  1. 在 Google Cloud 控制台中,转到管理资源页面:

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤