使用 Cloud 稽核記錄 (gcloud CLI) 接收事件
本快速入門說明如何設定 Google Kubernetes Engine (GKE) 服務做為目的地,以便使用 Eventarc 接收來自 Cloud Storage 的事件。
在本快速入門導覽課程中,您將:
- 設定服務帳戶,讓 Eventarc 可擷取事件並轉送至目標。
- 建立 Cloud Storage bucket 做為事件來源。
- 建立 GKE 叢集。
- 在 Eventarc 中初始化 GKE 目的地。
- 部署可接收事件的 GKE 服務。
- 建立 Eventarc 觸發條件,將 Cloud Storage 中的事件傳送至 GKE 服務。
- 將檔案上傳至 Cloud Storage 值區,以產生事件,並在 GKE Pod 記錄檔中查看該事件。
事前準備
- 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.
-
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.
- 更新 Google Cloud CLI 元件:
gcloud components update
- 啟用 Eventarc、Resource Manager 和 Google Kubernetes Engine API:
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com
- 設定本快速入門導覽課程中使用的設定變數:
PROJECT_ID=$(gcloud config get-value project) TRIGGER_SA=eventarc-sa CLUSTER_NAME=events-cluster SERVICE_NAME=hello-gke
-
如果您是專案建立者,系統會授予您基本擁有者角色 (
roles/owner
)。根據預設,這個身分與存取權管理 (IAM) 角色會包含完整存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。如果您不是專案建立者,則必須將必要權限授予專案中的適當實體。舉例來說,主體可以是 Google 帳戶 (適用於使用者),也可以是服務帳戶 (適用於應用程式和運算工作負載)。詳情請參閱活動目的地的角色和權限頁面。
所需權限
如要取得完成這份快速入門課程所需的權限,請要求管理員為您授予專案的下列 IAM 角色:
-
Eventarc 管理員 (
roles/eventarc.admin
) -
Kubernetes Engine 管理員 (
roles/container.admin
) -
記錄檔檢視存取者 (
roles/logging.viewAccessor
) -
專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin
) -
服務帳戶管理員 (
roles/iam.serviceAccountAdmin
) -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) -
服務使用情形管理員 (
roles/serviceusage.serviceUsageAdmin
) -
儲存空間管理員 (
roles/storage.admin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
-
Eventarc 管理員 (
請記下 Compute Engine 預設服務帳戶,因為您會將其附加至 Eventarc 觸發事件,以便代表觸發事件的身分,用於測試用途。啟用或使用使用 Compute Engine 的 Google Cloud 服務後,系統會自動建立這個服務帳戶,且電子郵件格式如下:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
將
PROJECT_NUMBER
替換為您的 Google Cloud專案編號。您可以在 Google Cloud 控制台的「歡迎」頁面上找到專案編號,也可以執行下列指令:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
- 將專案的 Pub/Sub 訂閱者角色 (
roles/pubsub.subscriber
) 授予 Compute Engine 預設服務帳戶,以便 Eventarc 觸發事件可從 Pub/Sub 提取事件。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/pubsub.subscriber
- 將專案的 Eventarc 事件接收者角色 (
roles/eventarc.eventReceiver
) 授予 Compute Engine 預設服務帳戶,以便 Eventarc 觸發條件接收事件供應商的事件。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- 如果您是在 2021 年 4 月 8 日當天或之前啟用 Cloud Pub/Sub 服務代理,以便支援經過驗證的 Pub/Sub 推送要求,請將 服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator
) 授予服務代理。否則,系統會預設授予這個角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
- 針對 Google Cloud Storage,請為下列服務啟用記錄類型:管理員讀取、資料讀取和資料寫入:
- 讀取專案的 IAM 政策並儲存在檔案中:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- 在 `/tmp/policy.yaml` 中編輯政策,僅新增或變更資料存取稽核記錄設定。注意:您必須保留 `bindings:` 和 `etag:` 區段,不得變更。否則,您的專案可能會變得無法使用。
將auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_WRITE - logType: DATA_READ service: storage.googleapis.com bindings: - members: - user:EMAIL_ADDRESS role: roles/owner etag: BwW_bHKTV5U= version: 1
EMAIL_ADDRESS
替換成您的電子郵件地址。 - 編寫新的 IAM 政策:
如果上述指令回報與其他變更衝突,請重複執行這些步驟,從讀取專案的 IAM 政策開始。gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
- 讀取專案的 IAM 政策並儲存在檔案中:
建立 Cloud Storage 值區
本快速入門導覽課程使用 Cloud Storage 做為事件來源。建立 Cloud Storage 值區:
gsutil mb -l us-central1 gs://events-quickstart-$(gcloud config get-value project)/
建立事件來源後,您就可以在 GKE 上部署事件接收器服務。
建立 GKE 叢集
GKE 叢集是由至少一個叢集控制層機器,以及稱為「節點」的多個工作站機器所組成的。「節點」為 Compute Engine 虛擬機器 (VM) 執行個體,會執行必要的 Kubernetes 程序,才能加入叢集。您將應用程式部署至叢集,而應用程式會在節點上運作。
建立名為 events-cluster
的 Autopilot 叢集:
gcloud container clusters create-auto $CLUSTER_NAME --region us-central1
建立叢集可能需要幾分鐘的時間才能完成。建立叢集後,輸出內容應類似以下:
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT
/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING
這樣做會在專案中建立名為 events-cluster
的 GKE 叢集,該專案的 Google Cloud 專案 ID 為 MY_PROJECT
。
啟用 GKE 目的地
對於每個以 GKE 服務為目標的觸發條件,Eventarc 都會建立事件轉送器元件,從 Pub/Sub 提取事件並轉送至目標。如要建立元件並管理 GKE 叢集中的資源,請授予 Eventarc 服務代理程式權限:
為 Eventarc 啟用 GKE 目的地:
gcloud eventarc gke-destinations init
系統提示您繫結必要角色時,請輸入
y
。以下角色已繫結至服務帳戶:
compute.viewer
container.developer
iam.serviceAccountAdmin
建立 GKE 服務目的地
部署 GKE 服務,以便使用預先建構的映像檔 us-docker.pkg.dev/cloudrun/container/hello
接收及記錄事件:
Kubernetes 使用名為
kubeconfig
的 YAML 檔案來儲存kubectl
的叢集驗證資訊。更新kubeconfig
檔案,將憑證和端點資訊指向 GKE 叢集的kubectl
:gcloud container clusters get-credentials $CLUSTER_NAME \ --region us-central1
建立 Kubernetes 部署:
kubectl create deployment $SERVICE_NAME \ --image=us-docker.pkg.dev/cloudrun/container/hello
將其公開為 Kubernetes 服務:
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP --port 80 --target-port 8080
建立 Eventarc 觸發條件
當您將檔案上傳至 Cloud Storage 時,Eventarc 觸發條件會將 Cloud Storage 中的事件傳送至 hello-gke
GKE 服務。
建立 Cloud 稽核記錄觸發條件:
gcloud eventarc triggers create my-gke-trigger \ --location="us-central1" \ --destination-gke-cluster="events-cluster" \ --destination-gke-location="us-central1" \ --destination-gke-namespace="default" \ --destination-gke-service="hello-gke" \ --destination-gke-path="/" \ --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"
這項操作會建立名為
my-gke-trigger
的觸發條件。確認觸發條件是否已成功建立:
gcloud eventarc triggers list
畫面會顯示如下的輸出內容:
NAME: my-gke-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: GKE: hello-gke ACTIVE: By 20:39:43 LOCATION: us-central1
產生及查看事件
將文字檔案上傳至 Cloud Storage,產生事件並觸發 GKE 服務。接著,您就可以在 Pod 記錄中查看事件訊息。
將文字檔案上傳至 Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt
上傳作業會產生事件,而 GKE Pod 會記錄事件的訊息。
如要查看事件訊息,請按照下列步驟操作:
找出 pod ID:
kubectl get pods
畫面會顯示如下的輸出內容:
NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
複製 Pod 的
NAME
,以便在下一個步驟中使用。查看 Pod 的記錄:
kubectl logs NAME
將
NAME
替換為您複製的 Pod 名稱。尋找類似下列內容的記錄項目:
2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT {"severity":"INFO","eventType":"google.cloud.audit.log.v1.written","message":"Received event of type google.cloud.audit.log.v1.written. [...]}
清除所用資源
完成本文件所述的工作後,您可以刪除已建立的資源,避免系統繼續計費。
您可以:
您也可以刪除 Google Cloud 專案,避免產生費用。刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
如果打算進行多個教學課程及快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。