使用 Cloud 稽核記錄觸發工作流程 (gcloud CLI)

本快速入門導覽課程說明如何使用 Eventarc 觸發程序執行工作流程,接收來自 BigQuery 的 Cloud 稽核記錄事件。BigQuery 託管公開資料集,可供您存取並整合到應用程式中。觸發條件會監聽查詢公開資料集的 BigQuery 工作,並執行工作流程。然後將事件以執行階段引數的形式傳遞至目的地工作流程。

您可以使用 Google Cloud CLI 完成這項快速入門導覽。

  1. 使用 Workflows 建立及部署工作流程,從事件中擷取及傳回資料。
  2. 建立 Eventarc 觸發條件,將 BigQuery 工作連結至 Workflows 事件接收器。
  3. 使用 bq 指令列工具執行 BigQuery 工作,產生事件。這個事件會以執行階段引數的形式傳遞至目的地工作流程。
  4. 在工作流程執行輸出內容中查看事件資料。

事前準備

貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。

  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. 更新 gcloud 元件:
    gcloud components update
  13. 登入帳戶:
    gcloud auth login
  14. 啟用 Compute Engine、Eventarc、Pub/Sub 和 Workflows API。

    gcloud services enable \
    compute.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    workflows.googleapis.com \
    workflowexecutions.googleapis.com
  15. 設定本快速入門導覽課程中使用的設定變數:
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
  16. 如果您是專案建立者,系統會授予基本「擁有者」角色 (roles/owner)。根據預設,這個身分與存取權管理 (IAM) 角色包含完全存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。

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

    所需權限

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

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

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

  17. 記下 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)'

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

  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. 將專案的工作流程叫用者角色 (roles/workflows.invoker) 授予 Compute Engine 預設服務帳戶,讓該帳戶有權觸發工作流程執行作業。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/workflows.invoker
  20. 將專案的「記錄檔寫入者」角色 (roles/logging.logWriter) 授予 Compute Engine 預設服務帳戶,以便工作流程將記錄傳送至 Cloud Logging。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/logging.logWriter
  21. 如果您是在 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

建立及部署工作流程

建立及部署工作流程,在 BigQuery 工作完成時,透過 HTTP 要求觸發工作流程。

  1. 開啟終端機或 Cloud Shell
  2. 在主目錄中,建立名為 myFirstWorkflow.yamlmyFirstWorkflow.json 的新檔案。
  3. 複製下列內容並貼到新檔案中,然後儲存檔案:

    YAML

    main:
      params: [event]
      steps:
          - log_event:
              call: sys.log
              args:
                  text: ${event}
                  severity: INFO
          - extract_data:
              assign:
              - data: ${event.data.protoPayload}
          - return_data:
                  return:
                      data: ${data}

    JSON

    {
      "main": {
        "params": [
          "event"
        ],
        "steps": [
          {
            "log_event": {
              "call": "sys.log",
              "args": {
                "text": "${event}",
                "severity": "INFO"
              }
            }
          },
          {
            "extract_data": {
              "assign": [
                {
                  "data": "${event.data.protoPayload}"
                }
              ]
            }
          },
          {
            "return_data": {
              "return": {
                "data": "${data}"
              }
            }
          }
        ]
      }
    }
  4. 部署工作流程:
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml

    如果您複製了範例工作流程的 JSON 版本,請將 .yaml 替換為 .json

建立 Eventarc 觸發條件

如要建立 Eventarc 觸發條件,將 BigQuery 的事件轉送至 Workflows 目的地,請執行 gcloud eventarc triggers create 指令。

  1. 建立用來篩選 BigQuery 事件的觸發條件:

    gcloud eventarc triggers create events-cal-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=bigquery.googleapis.com" \
        --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"

    這項操作會建立名為 events-cal-trigger 的觸發條件。

    請注意,在 Google Cloud 專案中首次建立 Eventarc 觸發條件時,Eventarc 服務代理程式的佈建作業可能會延遲。通常只要再次嘗試建立觸發條件,就能解決這個問題。詳情請參閱「權限遭拒錯誤」。

  2. 如要確認 events-cal-trigger 是否已建立妥當,請執行:

    gcloud eventarc triggers describe events-cal-trigger --location=${TRIGGER_LOCATION}

    輸出內容會列出觸發條件的建立時間和位置,應與下列內容類似:

    createTime: '2021-10-14T15:15:43.872360951Z'
    [...]
    name: projects/PROJECT_ID/locations/us-central1/triggers/events-cal-trigger
    

產生及查看活動

使用 bq 指令列工具執行 BigQuery 工作,產生事件並觸發工作流程。

  1. 如要觸發工作流程,請執行 BigQuery 工作,存取公開資料集並從中擷取資訊:

    bq query --nouse_legacy_sql \
    'SELECT
    COUNT(*)
    FROM
    `bigquery-public-data`.samples.shakespeare'

    產生的事件會以執行階段引數的形式傳遞至工作流程,而工作流程會傳回酬載資料做為執行結果。

  2. 如要確認工作流程是否已觸發,請列出最近兩次執行作業:

    gcloud workflows executions list ${MY_WORKFLOW} --limit=2

    BigQuery 工作會觸發兩項工作流程執行作業。(一個事件會發出工作變更信號,另一個事件則會插入工作本身)。輸出內容會列出每個執行的 NAME 和相當於 SUCCEEDEDSTATE,應與下列內容類似:

    NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
    STATE: SUCCEEDED
    START_TIME: 2024-02-06T14:16:14.390549813Z
    END_TIME: 2024-02-06T14:16:14.870102511Z
    NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/35d7c730-7ba5-4055-afee-c04ed706b179
    STATE: SUCCEEDED
    START_TIME: 2024-02-06T14:16:14.389882601Z
    END_TIME: 2024-02-06T14:16:14.829942525Z

    請注意,在輸出內容中,a073ad6a-c76b-4437-8d39-2ab3ade289d2 欄位的 NAME 是工作流程執行作業的 ID。複製執行 ID,以便在下一個步驟中使用。

  3. 如要查看執行狀態,請執行下列指令:

    gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}

    WORKFLOW_EXECUTION_ID 替換成與 BigQuery 工作完成時間相符的工作流程執行作業 ID。

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

    argument: [...]
    duration: 0.277917625s
    endTime: '2024-02-06T14:16:14.870102511Z'
    name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
    result: '{"data": [...]}'
    startTime: '2024-02-06T14:16:14.390549813Z'
    state: SUCCEEDED
  4. 確認 BigQuery 工作完成的 startTime 和工作流程執行的 START_TIME 相互對應。

您已成功產生 BigQuery 事件,該事件使用 Eventarc 觸發了 Workflows 事件接收器。

清除所用資源

  1. 刪除您建立的工作流程:
    gcloud workflows delete ${MY_WORKFLOW}
    系統詢問是否要繼續時,請輸入 y
  2. 刪除您建立的觸發條件:
    gcloud eventarc triggers delete events-cal-trigger
  3. 或者,您也可以刪除 Google Cloud 專案,以免產生費用。刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。

    刪除 Google Cloud 專案:

    gcloud projects delete PROJECT_ID

後續步驟