使用 Cloud 稽核記錄接收事件 (gcloud CLI)

本快速入門導覽課程說明如何設定 Google Kubernetes Engine (GKE) 服務做為目的地,以接收來自 Cloud Storage 的 Eventarc 事件。

在本快速入門導覽課程中,您將:

  1. 設定服務帳戶,讓 Eventarc 可以提取事件並轉送至目標。
  2. 建立 Cloud Storage bucket 做為事件來源。
  3. 建立 GKE 叢集。
  4. 在 Eventarc 中初始化 GKE 目的地。
  5. 部署接收事件的 GKE 服務。
  6. 建立 Eventarc 觸發條件,將 Cloud Storage 中的事件傳送至 GKE 服務。
  7. 將檔案上傳至 Cloud Storage bucket 以產生事件,並在 GKE Pod 記錄檔中查看該事件。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自體驗產品的實際應用成效。新客戶還能獲得價值 $300 美元的免費抵免額,能用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      將 PROJECT_ID 替換為要建立的專案名稱。 Google Cloud

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      將 PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認 Google Cloud 專案已啟用計費功能。

  7. 安裝 Google Cloud CLI。

  8. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  9. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  10. 建立或選取 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      將 PROJECT_ID 替換為要建立的專案名稱。 Google Cloud

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      將 PROJECT_ID 替換為 Google Cloud 專案名稱。

  11. 確認 Google Cloud 專案已啟用計費功能。

  12. 更新 Google Cloud CLI 元件:
    gcloud components update
  13. 啟用 Eventarc、Resource Manager 和 Google Kubernetes Engine API:
    gcloud services enable eventarc.googleapis.com \
        cloudresourcemanager.googleapis.com \
        container.googleapis.com
  14. 設定本快速入門導覽課程中使用的設定變數:
    PROJECT_ID=$(gcloud config get-value project)
    TRIGGER_SA=eventarc-sa
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
  15. 如果您是專案建立者,系統會授予您基本「擁有者」角色 (roles/owner)。根據預設,這個 Identity and Access Management (IAM) 角色包含完整存取大多數資源所需的權限,因此您可以略過這個步驟。 Google Cloud

    如果您不是專案建立者,必須將專案的必要權限授予適當的主體。舉例來說,主體可以是 Google 帳戶 (適用於一般使用者),也可以是服務帳戶 (適用於應用程式和運算工作負載)。詳情請參閱活動目的地「角色和權限」頁面。

    所需權限

    如要取得完成本快速入門導覽課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

  16. 記下 Compute Engine 預設服務帳戶,因為您會將其附加至 Eventarc 觸發程序,代表觸發程序的身分,以利進行測試。啟用或使用採用 Compute Engine 的 Google Cloud 服務後,系統會自動建立這個服務帳戶,電子郵件格式如下:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    將 PROJECT_NUMBER 替換為您的 Google Cloud專案編號。您可以在 Google Cloud 控制台的「Welcome」(歡迎)頁面找到專案編號,也可以執行下列指令:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    在正式環境中,我們強烈建議建立新的服務帳戶,並授予一或多個 IAM 角色,其中包含最低必要權限,並遵循最低權限原則。

  17. 將專案的 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
  18. 在專案中,將 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
  19. 如果您是在 2021 年 4 月 8 日當天或之前啟用 Cloud Pub/Sub 服務代理,請將服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator) 授予服務代理,以支援已通過驗證的 Pub/Sub 推送要求。否則,系統會預設授予下列角色:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  20. 如果是 Google Cloud Storage,請為下列服務啟用記錄類型:「管理員讀取」、「資料讀取」和「資料寫入」:

    1. 讀取專案的 IAM 政策,並儲存在檔案中:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. 在 `/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 替換為您的電子郵件地址。
    3. 撰寫新的 IAM 政策:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      如果上述指令回報與其他變更發生衝突,請重複這些步驟,從讀取專案的 IAM 政策開始。

建立 Cloud Storage bucket

本快速入門導覽課程會使用 Cloud Storage 做為事件來源。建立 Cloud Storage bucket:

gcloud storage buckets create  gs://events-quickstart-$(gcloud config get-value project) --location=us-central1

建立事件來源後,您可以在 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 叢集,專案 ID 為 MY_PROJECT。 Google Cloud

啟用 GKE 目的地

針對以 GKE 服務為目標的每個觸發條件, Eventarc 會建立事件轉送器元件,從 Pub/Sub 提取事件, 然後轉送至目標。如要在 GKE 叢集中建立元件及管理資源,請授予 Eventarc 服務代理權限:

  1. 為 Eventarc 啟用 GKE 目的地:

    gcloud eventarc gke-destinations init
  2. 系統提示繫結必要角色時,請輸入 y。

    下列角色已繫結至服務帳戶:

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

建立 GKE 服務目的地

部署 GKE 服務,使用預先建構的映像檔接收及記錄事件:us-docker.pkg.dev/cloudrun/container/hello

  1. Kubernetes 會使用名為 kubeconfig 的 YAML 檔案,儲存 kubectl 的叢集驗證資訊。使用憑證和端點資訊更新 kubeconfig 檔案,將 kubectl 指向 GKE 叢集:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region us-central1
    
  2. 建立 Kubernetes Deployment:

    kubectl create deployment $SERVICE_NAME \
        --image=us-docker.pkg.dev/cloudrun/container/hello
    
  3. 將其公開為 Kubernetes 服務:

    kubectl expose deployment $SERVICE_NAME \
        --type ClusterIP --port 80 --target-port 8080
    

建立 Eventarc 觸發條件

將檔案上傳至 Cloud Storage 時,Eventarc 觸發條件會將 Cloud Storage 中的事件傳送至 hello-gke GKE 服務。

  1. 建立 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 的觸發條件。

  2. 確認觸發條件是否已成功建立:

    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 記錄中查看事件訊息。

  1. 將文字檔案上傳至 Cloud Storage:

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

    上傳作業會產生事件,而 GKE Pod 會記錄事件的訊息。

  2. 如要查看活動訊息,請按照下列步驟操作:

    1. 找出 Pod ID:

      kubectl get pods

      畫面會顯示如下的輸出內容:

      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

      複製 Pod 的 NAME,以便在下一步中使用。

    2. 檢查 Pod 的記錄:

      kubectl logs NAME

      將 NAME 替換為您複製的 Pod 名稱。

    3. 尋找類似下列內容的記錄項目:

      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. [...]}
      

清除所用資源

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費。

您可以:

  1. 刪除 Cloud Storage bucket。

  2. 刪除 Eventarc 觸發條件。

  3. 刪除 GKE 叢集。

或者,您也可以刪除專案,以免產生費用。 Google Cloud 刪除 Google Cloud 專案後,系統會停止收取該專案內所有資源的使用費用。

刪除 Google Cloud 專案:

gcloud projects delete PROJECT_ID

如果打算進行多個教學課程及快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。

後續步驟

使用 Pub/Sub 接收事件 (Google Cloud CLI)