本教程介绍如何使用 Cloud Audit Logs 部署经身份验证的 Cloud Run 服务,该服务接收来自 Cloud Storage 的事件。使用本教程部署生产工作负载。Eventarc 触发器根据 Cloud Audit Logs 条目过滤事件。如需了解详情,请参阅确定 Cloud Audit Logs 的事件过滤条件。
您可以使用 Google Cloud Console 或 Google Cloud CLI 来完成本教程。
目标
在此教程中,您将学习以下操作:
创建 Cloud Storage 存储桶作为事件来源。
将事件接收器服务部署到 Cloud Run。
创建 Eventarc 触发器。
通过将文件上传到 Cloud Storage 存储桶来创建事件,并在 Cloud Run 日志中查看该事件。
费用
本教程使用 Google Cloud 的以下收费组件:
准备工作
如果您的组织将限制应用于您的 Google Cloud 环境,则本文档中的某些步骤可能无法正常工作。在这种情况下,您可能无法完成创建公共 IP 地址或服务帐号密钥等任务。如果您发出的请求会返回有关限制条件的错误,请参阅如何在受限的 Google Cloud 环境中开发应用。
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Build、Logging、Pub/Sub、Cloud Run、Eventarc API。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Build、Logging、Pub/Sub、Cloud Run、Eventarc API。
- 通过控制台或 gcloud CLI 完成以下步骤:
控制台
-
在控制台中,转到服务帐号页面。
转到“服务帐号” - 点击创建服务帐号。
-
输入在控制台中显示的服务帐号名称。
控制台会根据此名称生成服务帐号 ID。如有必要,请修改 ID。此 ID 创建后便无法更改。
- 可选:输入服务帐号的说明。
-
如果您现在不想设置访问权限控制,请点击完成以完成服务帐号的创建过程。
如需立即设置访问权限控制,请点击创建并继续,然后继续执行下一步。
- 选择要授予项目服务帐号的
Cloud Run Invoker
和Eventarc Event Receiver
Identity and Access Management 角色。 - 完成添加角色后,点击继续和完成以完成服务帐号的创建过程。
- 如需将 IAM 角色授予主帐号,请执行以下操作:
在控制台中,转到 IAM 页面。
转到 IAM- 找到包含 USER_EMAIL 电子邮件地址的行,点击该行中的 修改主帐号,然后点击 添加其他角色。
- 从下拉列表中添加
Eventarc Admin
和Service Account User
角色。 - 点击保存。主帐号将被授予资源的 Identity and Access Management 角色。
gcloud
- 更新
gcloud
组件:gcloud components update
- 使用您的帐号登录:
gcloud auth login
- 设置本教程中使用的配置变量:
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
将 PROJECT_ID 替换为相应项目的 ID。
- 在 Google Cloud Storage 中启用 Cloud Audit Logs 管理员读取、数据读取和数据写入日志类型:转到 Cloud Audit Logs
- 为项目创建服务帐号:
gcloud iam service-accounts create sample-service-account \ --description="A sample service account" \ --display-name="Sample service account"
创建服务帐号后,最多可能需要 7 分钟才能使用该服务帐号。如果您在创建服务帐号后立即尝试使用该服务帐号,并且收到错误消息,请至少等待 60 秒再重试。 - 要确认
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
- 向服务帐号授予以下角色:
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。 - 向用户授予以下 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
例如:
- Google 帐号电子邮件地址:
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
例如:
- Google 帐号电子邮件地址:
- 下载并安装 Git 源代码管理工具。
-
创建 Cloud Storage 存储桶
本教程使用 Cloud Storage 作为事件来源。要创建存储桶,请执行以下操作:
控制台
- 在控制台中转到 Cloud Storage。
- 点击 创建存储桶。
- 输入您的存储桶信息,然后点击继续以完成各个步骤:
- 请输入具有唯一性的名称。例如
eventarcbucket
。 - 选择区域作为位置类型。
- 选择 us-central1 (Iowa) 作为位置。
- 为默认存储类别选择标准。
- 在访问权限控制中选择统一。
- 请输入具有唯一性的名称。例如
- 点击创建。

gcloud
gsutil mb -l us-central1 gs://events-tutorial-PROJECT_ID/
创建事件来源后,您可以在 Cloud Run 上部署事件接收器服务。
将事件接收器服务部署到 Cloud Run
部署接收和记录事件的 Cloud Run 服务。要部署示例事件接收器服务,请执行以下操作:
控制台
- 将示例代码库克隆到 GitHub 帐号:
- 在 GitHub 上,导航到 GoogleCloudPlatform/golang-samples
- 点击创建分支 (Fork)。
- 如果出现提示,请选择克隆代码库的位置。
- 在 GitHub 上,导航到 GoogleCloudPlatform/java-docs-samples。
- 点击创建分支 (Fork)。
- 如果出现提示,请选择克隆代码库的位置。
- 在 GitHub 上,导航到 GoogleCloudPlatform/dotnet-docs-samples。
- 点击创建分支 (Fork)。
- 如果出现提示,请选择克隆代码库的位置。
- 在 GitHub 上,导航到 GoogleCloudPlatform/nodejs-docs-samples。
- 点击创建分支 (Fork)。
- 如果出现提示,请选择克隆代码库的位置。
- 在 GitHub 上,导航到 GoogleCloudPlatform/python-docs-samples。
- 点击创建分支 (Fork)。
- 如果出现提示,请选择克隆代码库的位置。
- 在控制台中,转到 Cloud Run。
- 点击 创建服务,以显示创建服务表单。
- 选择从源代码库持续部署新修订版本 (Continuously deploy new revisions from a source repository)。
- 点击使用 Cloud Build 进行设置,以打开使用 Cloud Build 进行设置表单。
- 出现提示时,启用 Cloud Build API 和 Container Analysis API。
- 选择 GitHub 作为代码库提供程序。
- 如果系统提示,请点击安装 Google Cloud Build。
- 选择克隆的 GitHub 代码库为代码库。
- 点击下一步。
- 在分支字段中,输入
^master$
。 - 选择 Dockerfile 作为 Build 类型,并提供 Dockerfile 的来源位置:
eventarc/audit-storage/Dockerfile
或eventarc/audit_storage/Dockerfile
(Go) - 点击保存。
- 在创建服务表单中,输入所需的服务名称。例如
helloworld-events
。 - 选择 us-central1(Iowa) 作为您的服务所在的区域。
- 点击下一步。
- 在配置此服务的触发方式部分:
- 根据您要在 Cloud Run 服务上允许的入站流量,选择任何入站流量选项。
- 选择需要进行身份验证
- (可选)点击 创建 Eventarc 触发器。 添加 Eventarc 触发器创建触发器或在创建服务后创建触发器。如需详细了解如何创建触发器,请参阅
- 点击创建。
Go

Java

.NET

Node.js

Python



在通过 Cloud Build 进行设置表单中:
gcloud
- 克隆代码库:
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
- 构建容器并将其上传到 Cloud Build:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld-events
- 将容器映像部署到 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 服务。
控制台
- 在控制台中,转到 Cloud Run。
- 在服务列表中,点击您创建的服务,转到该服务的服务详情页面。
- 点击触发器标签页,然后点击 添加 Eventarc 触发器。
- 在选择事件下拉列表中,选择 Cloud Storage > storage.objects.create。
- 如需为
storage.googleapis.com
启用所需的审核日志类型,请点击全部启用。 - 在接收来自以下位置的事件字段中,选择单区域,然后选择 us-central1 以接收来自此区域的事件。
- 如果出现提示,请向 Compute Engine 服务帐号授予
eventarc.eventReceiver
角色,并将iam.serviceAccountTokenCreator
角色授予 Pub/Sub 服务帐号。 - 选择您创建的服务帐号。例如,SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com。
- 点击保存。
gcloud
- 创建一个用于过滤 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
的触发器。 - 要确认
events-tutorial-trigger
已成功创建,请运行以下命令:gcloud eventarc triggers list --location=us-central1
此时应列出
events-tutorial-trigger
,其目标为 helloworld-events
。
生成并查看事件
- 要生成事件,请执行以下操作:
控制台
- 使用文件名
random.txt
和文本“Hello World”创建文本文件。 - 在控制台中转到 Cloud Storage。
- 选择您创建的存储桶。
- 在对象标签页中,点击上传文件,然后上传
random.txt
文件。
gcloud
将文本文件上传到 Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
- 使用文件名
- 如需查看日志条目,请执行以下操作:
- 在控制台中,转到 Cloud Run。
- 在服务列表中,点击您创建的服务的名称,以转到其服务详情页面。
- 点击日志标签页,以获取此服务的所有修订版本的请求日志及容器日志。您可以按日志严重级别进行过滤。
- 查找类似如下的日志条目:
-
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
- 查找类似如下的日志条目:
Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
其中,BUCKET_NAME
是 Cloud Storage 存储桶的名称。
控制台
gcloud
恭喜!您已成功将事件接收器服务部署到 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 项目后,系统即会停止对该项目中使用的所有资源计费。
- 在 Google Cloud 控制台中,转到管理资源页面:
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。