本教學課程說明如何部署已驗證的 Cloud Run 服務,透過 Cloud 稽核記錄接收 Cloud Storage 的事件。請參閱本教學課程,瞭解如何部署正式環境工作負載。Eventarc 觸發條件會根據 Cloud 稽核記錄項目篩選事件。詳情請參閱「決定 Cloud 稽核記錄的事件篩選器」。
您可以使用 Google Cloud 控制台或 Google Cloud CLI 完成本教學課程。
目標
在這個教學課程中,您將執行下列操作:
建立 Cloud Storage bucket 做為事件來源。
將事件接收器服務部署至 Cloud Run。
建立 Eventarc 觸發條件。
將檔案上傳至 Cloud Storage 值區以產生事件,以及在 Cloud Run 記錄檔中查看該事件。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。
如果您是專案建立者,系統會授予基本「擁有者」角色 (roles/owner
)。根據預設,這個身分與存取權管理 (IAM) 角色包含完全存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。
如果您不是專案建立者,必須在專案中將必要權限授予適當的主體。舉例來說,主體可以是 Google 帳戶 (適用於使用者) 或服務帳戶 (適用於應用程式和運算工作負載)。詳情請參閱活動目的地的「角色和權限」頁面。
請注意,根據預設,Cloud Build 權限包含上傳及下載 Artifact Registry 構件的權限。
所需權限
如要取得完成本教學課程所需的權限,請要求管理員為您授予專案的下列 IAM 角色:
-
Cloud Build 編輯器 (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Eventarc 管理員 (
roles/eventarc.admin
) -
記錄檔檢視存取者 (
roles/logging.viewAccessor
) -
專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin
) -
服務帳戶管理員 (
roles/iam.serviceAccountAdmin
) -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) -
服務使用情形管理員 (
roles/serviceusage.serviceUsageAdmin
) -
儲存空間管理員 (
roles/storage.admin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
使用 Google Cloud 控制台或 gcloud CLI 完成下列步驟:
控制台
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.
- 如要設定要在稽核記錄中記錄哪些資料存取作業,請為 Google Cloud Storage 啟用「管理員讀取」、「資料讀取」和「資料寫入」記錄類型:
-
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。
- 按一下「建立服務帳戶」。
-
輸入要顯示在 Google Cloud 控制台的服務帳戶名稱。
Google Cloud 控制台會根據這個名稱產生服務帳戶 ID。請視需要編輯 ID,ID 設定後即無法變更。
- 選用:輸入服務帳戶的說明。
-
如果您現在不想設定存取權控管機制,請按一下「Done」(完成) 以完成服務帳戶建立程序。
如要立即設定存取權控管,請按一下「Create and continue」(建立並繼續),然後繼續進行下一個步驟。
- 選取「Cloud Run Invoker」(Cloud Run 叫用者) 和「Eventarc Event Receiver」(Eventarc 事件接收者) 角色,授予與 Eventarc 觸發條件相關聯的服務帳戶專案權限。
為進行測試,這會將 Cloud Run Invoker 角色授予專案中的所有 Cloud Run 服務和工作;不過,您可以將角色授予服務。詳情請參閱「授予 Cloud Run 服務權限」。
請注意,如果您為經過驗證的 Cloud Run 服務建立觸發條件,但未授予 Cloud Run 叫用者角色,系統仍會成功建立並啟用觸發條件。不過,觸發程序無法正常運作,記錄中會顯示類似下列內容的訊息:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- 新增角色之後,請按一下「繼續」和「完成」,即可完成建立服務帳戶。
gcloud
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com and eventarc.googleapis.com -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com and eventarc.googleapis.com - 更新
gcloud
元件:gcloud components update
- 登入帳戶:
gcloud auth login
- 設定本教學課程中使用的設定變數:
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION} export SERVICE_NAME=helloworld-events
- 如要設定稽核記錄中記錄的資料存取作業,請為
storage.googleapis.com
服務啟用ADMIN_READ
、DATA_READ
和DATA_WRITE
記錄類型:- 讀取專案的 IAM 政策,並儲存在檔案中:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- 在
/tmp/policy.yaml
中編輯政策,僅新增或變更資料存取稽核記錄設定。auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_WRITE - logType: DATA_READ service: storage.googleapis.com
- 撰寫新的 IAM 政策:
如果上述指令回報與其他變更發生衝突,請重複這些步驟,從讀取專案的 IAM 政策開始。gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
- 讀取專案的 IAM 政策,並儲存在檔案中:
- 為專案建立服務帳戶:
建立服務帳戶後,最多可能需要七分鐘才能使用。如果您在建立服務帳戶後立即嘗試使用,並收到錯誤訊息,請至少等待 60 秒,然後再試一次。gcloud iam service-accounts create sample-service-account \ --description="A sample service account" \ --display-name="Sample service account"
- 如要確認
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
-
將專案的「Cloud Run Invoker」(Cloud Run 叫用者) (
run.invoker
) 和「Eventarc Event Receiver」(Eventarc 事件接收器) (roles/eventarc.eventReceiver
) 角色授予與 Eventarc 觸發條件相關聯的服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.invoker"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/eventarc.eventReceiver"
將
PROJECT_ID
替換為專案 ID。 Google Cloud為進行測試,這會將 Cloud Run 叫用者角色授予專案中的所有 Cloud Run 服務和工作;不過,您可以將角色授予服務。詳情請參閱「授予 Cloud Run 服務權限」。
請注意,如果您為經過驗證的 Cloud Run 服務建立觸發條件,但未授予 Cloud Run 叫用者角色,系統仍會成功建立並啟用觸發條件。不過,觸發程序無法正常運作,記錄中會顯示類似下列內容的訊息:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
建立 Artifact Registry 標準存放區
建立 Artifact Registry 標準存放區,用於儲存容器映像檔。控制台
- 前往 Google Cloud 控制台的「Repositories」頁面。
- 按一下 「建立存放區」。
- 設定存放區:
- 輸入不重複的名稱。
- 在「格式」部分選擇「Docker」。
- 針對「模式」,請選擇「標準」。
- 在「位置類型」中選擇「區域」。
- 在「Region」(區域) 清單中,選取「us-central1 (Iowa)」(us-central1 (愛荷華州))。
- 其餘設定均採用預設值,然後按一下「建立」。
gcloud
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
將 REPOSITORY
替換成 Artifact Registry 存放區的專屬名稱。
建立 Cloud Storage 值區
本教學課程會使用 Cloud Storage 做為事件來源。如要建立儲存空間 bucket,請按照下列步驟操作:
控制台
- 前往 Google Cloud 控制台的「Bucket」頁面。
- 按一下 「建立 bucket」。
- 輸入 bucket 資訊,並點選「繼續」來完成各個步驟:
- 輸入不重複的名稱。例如:
eventarcbucket
。 - 選取「區域」做為「位置類型」。
- 選取「us-central1 (Iowa)」(us-central1 (愛荷華州)) 做為「Location」(位置)。
- 在「預設儲存空間級別」部分選取「Standard」。
- 在「存取權控管」部分選取「統一」。
- 輸入不重複的名稱。例如:
- 點選「建立」。
gcloud
gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION
建立事件來源後,您可以在 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」。
- 如果系統提示,請選取要分叉存放區的位置。
- 前往 Google Cloud 控制台的「Services」頁面。
- 按一下「Create service」(建立服務) ,顯示「Create service」(建立服務) 表單。
- 選取「從存放區持續部署」。
GitHub 存放區的異動內容會自動更新至 Artifact Registry 中的容器映像檔,並部署至 Cloud Run。
- 按一下「Set up with Cloud Build」(設定 Cloud Build),開啟「Set up with Cloud Build」(設定 Cloud Build) 表單。
- 如果出現提示,請啟用 Cloud Build API 和 Artifact Analysis API。
- 選取「GitHub」做為「存放區供應商」。
- 如果系統提示,請按一下「Install Google Cloud Build」(安裝 Google Cloud Build)。
- 選取您建立分支的 GitHub 存放區做為存放區。
- 點選「下一步」。
- 在「Branch」(分支) 欄位中輸入
^main$
。 - 選取「Dockerfile」做為「Build Type」(建構類型),並提供 Dockerfile 的來源位置:
eventarc/audit-storage/Dockerfile
或
eventarc/audit_storage/Dockerfile
(Go)
- 按一下 [儲存]。
- 在「建立服務」表單中,輸入服務名稱。
例如:
helloworld-events
。 - 選取「us-central1 (Iowa)」(us-central1 (愛荷華州)) 做為服務位置的區域。
- 根據您要在 Cloud Run 服務上允許的輸入流量,選取任一「輸入」選項。
- 選取「需要驗證」
- 點選「建立」。
Go

Java

.NET

Node.js

Python

gcloud
- 複製 GitHub 存放區:
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 $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
- 將容器映像檔部署至 Cloud Run:
gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
系統會提示是否允許未經驗證的叫用,請輸入
n
。部署成功後,指令列會顯示服務網址。
您已將名為 helloworld-events
的事件接收器服務部署至 Cloud Run,現在可以設定觸發條件。
建立 Eventarc 觸發條件
Eventarc 觸發條件會將 Cloud Storage bucket 中的事件傳送至 helloworld-events
Cloud Run 服務。
控制台
- 前往 Google Cloud 控制台的「Triggers」(觸發條件) 頁面。
- 按一下「建立觸發條件」 。
- 輸入觸發條件名稱。
這是觸發條件的 ID,開頭必須是英文字母。最多可包含 63 個小寫英文字母、數字或連字號。
- 選取「觸發條件類型」:
- 第一方:篩選從 Google Cloud供應商傳送的事件 (直接傳送或透過 Cloud 稽核記錄項目),或是使用 Pub/Sub 訊息的供應商。
- 第三方:篩選第三方供應商傳送的事件。
- 在「Event provider」(事件提供者) 清單中,選取「Cloud Storage」做為事件來源。
- 在「Event type」(事件類型) 清單中,選取「storage.objects.create」。
- 在「Region」(區域) 清單中,選取「us-central1」做為接收事件的區域。
- 選取您建立的「服務帳戶」。例如:
SERVICE_ACCOUNT_ID@PROJECT_ID
.iam.gserviceaccount.com。 - 在「Event destination」(事件目的地) 清單中,選取「Cloud Run」。
- 在「Select a Cloud Run service」(選取 Cloud Run 服務) 清單中,選取「helloworld-events」。
- 點選「建立」。 請注意,您也可以使用 Cloud Run 控制台頁面建立 Eventarc 觸發條件。
gcloud
- 建立用來篩選 Cloud Storage 事件的觸發條件,並使用您建立的服務帳戶:
將gcloud eventarc triggers create events-tutorial-trigger \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --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
替換為專案 ID。 Google Cloud其中:
type
:指定在符合觸發條件的篩選條件時,建立稽核記錄。serviceName
:寫入稽核記錄的服務,也就是 Cloud Storage。methodName
:受稽核的作業,即storage.objects.create
。
events-tutorial-trigger
的觸發條件。 - 如要確認
events-tutorial-trigger
是否已建立妥當,請執行:gcloud eventarc triggers list --location=$REGION
觸發條件
events-tutorial-trigger
會列出目標 helloworld-events
。產生及查看活動
- 如要產生事件,請按照下列步驟操作:
控制台
- 建立檔案名稱為
random.txt
且包含「Hello World」文字的文字檔案。 - 前往 Google Cloud 控制台的「Bucket」頁面。
- 選取您建立的儲存空間 bucket。
- 在「Objects」(物件) 分頁中,按一下「Upload files」(上傳檔案),然後上傳
random.txt
檔案。
gcloud
將文字檔上傳至 Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
- 建立檔案名稱為
- 如要查看記錄項目:
- 前往 Google Cloud 控制台的「Services」頁面。
- 在服務清單中,按一下您建立的服務名稱,前往「服務詳細資料」頁面。
- 按一下「記錄」分頁標籤,取得此服務所有修訂版本的要求和容器記錄。您可以依記錄的嚴重性等級進行篩選。
- 尋找類似下列內容的記錄項目:
其中Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
是 Cloud Storage 值區的名稱。 -
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 在服務未用時不會產生費用,但您可能仍須支付將容器映像檔儲存於 Artifact Registry、將檔案儲存於 Cloud Storage 值區,以及Eventarc 資源的費用。您可以:
或者,您也可以刪除 Google Cloud 專案,以免產生費用。 刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID