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

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

您可以使用 Google Cloud CLI 完成本快速入門導覽課程。

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

事前準備

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

  1. 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.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. 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.

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Install the Google Cloud CLI.

  8. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. 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.

  11. Make sure that billing is enabled for your Google Cloud project.

  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 專案後,系統就會停止對專案使用的所有資源收取費用。

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

後續步驟