接收 Cloud Audit Logs 事件

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

您可以使用 Google Cloud Console 或 gcloud 命令行工具完成本教程。

目标

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

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

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

  3. 创建 Eventarc 触发器。

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

费用

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

请使用价格计算器根据您的预计用量来估算费用。

Google Cloud 新用户可能有资格申请免费试用

准备工作

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

    转到“项目选择器”

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

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

    启用 API

  5. 使用 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. 在 Cloud Storage 中启用 Cloud Audit Logs 管理员读取数据读取数据写入日志类型:

      转到 Cloud Audit Logs 控制台

    5. eventarc.eventReceiver 角色授予 Compute Engine 服务帐号:

      export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
      
      gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
          --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \
          --role='roles/eventarc.eventReceiver'
      

    6. 下载并安装 Git 源代码管理工具。

创建 Cloud Storage 存储分区

本教程使用 Cloud Storage 作为事件来源。要创建存储分区,请运行以下命令:

控制台

  1. 在 Cloud Console 中转到 Cloud Storage。

    转到 Cloud Storage

  2. 点击创建存储分区

    新存储分区。

  3. 输入您的存储分区信息,然后点击继续以完成各个步骤:

    • 请输入具有唯一性的名称。例如 eventarcbucket
    • 选择区域作为位置类型
    • 选择 us-central1 (Iowa) 作为位置
    • 默认存储类别选择标准
    • 访问权限控制中选择统一
  4. 点击创建

命令行

gsutil mb -l us-central1 gs://events-tutorial-$(gcloud config get-value project)/

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

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

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

控制台

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

    Go

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/golang-samples

    2. 点击创建分支 (Fork)。

      Fork 按钮的屏幕截图

    3. 如果出现提示,请选择克隆代码库的位置。

    Java

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/java-docs-samples

    2. 点击创建分支 (Fork)。

      Fork 按钮的屏幕截图

    3. 如果出现提示,请选择克隆代码库的位置。

    .NET

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/dotnet-docs-samples

    2. 点击创建分支 (Fork)。

      Fork 按钮的屏幕截图

    3. 如果出现提示,请选择克隆代码库的位置。

    Node.js

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/nodejs-docs-samples

    2. 点击创建分支 (Fork)。

      Fork 按钮的屏幕截图

    3. 如果出现提示,请选择克隆代码库的位置。

    Python

    1. 在 GitHub 上,导航到 GoogleCloudPlatform/python-docs-samples

    2. 点击创建分支 (Fork)。

      Fork 按钮的屏幕截图

    3. 如果出现提示,请选择克隆代码库的位置。

  2. 在 Cloud Console 中,转到 Cloud Run。

    转到 Cloud Run

  3. 点击创建服务,以显示“创建服务”表单。

    create-service-page

  4. 选择 Cloud Run

  5. 选择 us-central1(Iowa) 作为您的服务所在的区域

  6. 输入所需的服务名称。例如 helloworld-events

  7. 点击下一步

  8. 选择从源代码库持续部署新修订版本 (Continuously deploy new revisions from a source repository)。

  9. 点击使用 Cloud Build 进行设置,以打开使用 Cloud Build 进行设置表单。

    通过 Cloud Build 页面进行设置

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

    1. 出现提示时,启用 Cloud Build APIContainer Analysis API
    2. 选择 GitHub 作为代码库提供程序

    3. 如果系统提示,请点击安装 Google Cloud Build

    4. 选择克隆的 GitHub 代码库为代码库

    5. 点击下一步

    6. 分支字段中,输入 ^master$

    7. 选择 Dockerfile 作为构建类型,并提供 Dockerfile 的源位置。

      eventarc/audit-storage/Dockerfileeventarc/audit_storage/Dockerfile (Go)

    8. 点击保存

  10. 创建服务表单中,点击下一步

  11. 配置此服务的触发方式部分:

    • 根据您要在 Cloud Run 服务上允许的入站流量,选择任何入站流量选项。

    • 选择允许未通过身份验证的调用

  12. (可选)点击 添加 Eventarc 触发器创建触发器或在创建服务后创建触发器。如需详细了解如何创建触发器,请参阅创建 Eventarc 触发器

  13. 点击创建

命令行

  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/$(gcloud config get-value project)/helloworld-events
    
  3. 将容器映像部署到 Cloud Run:

    gcloud run deploy helloworld-events \
        --image gcr.io/$(gcloud config get-value project)/helloworld-events \
        --allow-unauthenticated
    

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

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

创建 Eventarc 触发器

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

控制台

  1. 在 Cloud Console 中,转到 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. 点击保存

命令行

  1. 创建一个用于过滤 Cloud Storage 事件并且使用 Google Cloud 项目的 Compute Engine 默认服务帐号的触发器:

    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=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
    

    这将创建一个名为 events-tutorial-trigger 的触发器。

  2. 要确认 events-tutorial-trigger 已成功创建,请运行以下命令:

    gcloud eventarc triggers list --location=us-central1
    

    显示 events-tutorial-trigger 时的目标为 helloworld-events

生成和查看事件

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

    控制台

    1. 使用文件名创建文本文件random.txt文本“Hello World”

    2. 在 Cloud Console 中转到 Cloud Storage。

      转到 Cloud Storage

    3. 选择您创建的存储分区。

    4. 对象标签页中,点击上传文件,然后上传 random.txt 文件。

    命令行

    将文本文件上传到 Cloud Storage:

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://events-tutorial-$(gcloud config get-value project)/random.txt
    

    上传操作会生成事件,而 Cloud Run 服务会记录事件的消息。

  2. 如需查看日志条目,请执行以下操作:

    控制台

    1. 在 Cloud Console 中,转到 Cloud Run。

      转到 Cloud Run

    2. 在服务列表中,点击您创建的服务的名称,以转到其服务详情页面。

    3. 点击日志标签页,以获取此服务的所有修订版本的请求日志及容器日志。您可以按日志严重级别进行过滤。

    4. 查找类似如下的日志条目:

      触发日志

    命令行

    1. gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=helloworld-events"
      
    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. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

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

后续步骤