支援跨專案服務帳戶

建立 Eventarc 觸發條件時,系統會將觸發條件與身分與存取權管理 (IAM) 服務帳戶建立關聯。觸發程序會使用服務帳戶做為預設身分。

根據預設,您無法在某個專案中建立 IAM 服務帳戶,並附加至其他專案中的資源。Google Cloud 不過,您可能已在個別專案中集中管理機構的服務帳戶,這樣會比較容易管理服務帳戶。本文說明將一個專案中的服務帳戶附加至另一個專案的 Eventarc 觸發條件時,需要執行的步驟。

如果沒有執行這些步驟的權限,請管理員代為完成。

啟用跨專案服務帳戶

在服務帳戶專案中完成下列步驟。

  1. 前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。

    前往「機構政策」頁面

  2. 如果系統強制執行「停用跨專案服務帳戶」政策,您必須停用這項政策

    詳情請參閱「啟用服務帳戶,以便跨專案附加」。

  3. 建立服務帳戶,並記下其名稱。

授予服務帳戶驗證權限

主體可以透過幾種不同的方式,使用服務帳戶進行驗證。每種驗證類型都要求主體對服務帳戶具有特定的 IAM 權限。詳情請參閱「服務帳戶驗證的角色」。

  1. 服務帳戶憑證建立者 (roles/iam.serviceAccountTokenCreator) IAM 角色授予包含觸發程序的 Google Cloud 專案 Eventarc 服務代理程式。服務代理可藉此管理服務帳戶的跨專案存取權。服務代理程式是特定專案中特定服務的身分。 Google Cloud 詳情請參閱服務代理程式

    控制台

    1. 前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。

      前往「Service accounts」(服務帳戶)

    2. 選取擁有要附加至 Eventarc 觸發條件的服務帳戶的專案。

    3. 按一下先前建立的服務帳戶電子郵件地址。

    4. 按一下「具有存取權的主體」分頁標籤。

    5. 按一下「授予存取權」

    6. 在「New principals」(新增主體) 欄位中,輸入 Eventarc 服務代理程式的電子郵件地址:

      service-EVENTARC_PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com

      EVENTARC_PROJECT_NUMBER 替換為包含觸發條件的專案的Google Cloud 專案編號。

    7. 按一下 [Add another role] (新增其他角色)

    8. 在「Select a role」(選取角色) 清單中,篩選「Service Account Token Creator」(服務帳戶憑證建立者),然後選取該角色。

    9. 按一下 [儲存]

    gcloud

    執行 gcloud iam service-accounts add-iam-policy-binding 指令:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member='serviceAccount:service-EVENTARC_PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com' \
        --role='roles/iam.serviceAccountTokenCreator'

    更改下列內容:

    • SERVICE_ACCOUNT_NAME:服務帳戶名稱
    • SERVICE_ACCOUNT_PROJECT_ID:擁有服務帳戶的專案的專案 ID Google Cloud
    • EVENTARC_PROJECT_NUMBER:專案的專案編號,其中包含觸發條件 Google Cloud
  2. 服務帳戶使用者 (roles/iam.serviceAccountUser) IAM 角色授予所有建立觸發程序的主體,例如包含觸發程序的 Google Cloud 專案的 Eventarc 服務代理程式。這個預先定義的角色包含 iam.serviceAccounts.actAs 權限,這是將服務帳戶附加至資源時的必要權限。

    控制台

    在專案中授予角色,允許主體模擬多個服務帳戶:

    1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

      前往「身分與存取權管理」頁面

    2. 選取擁有服務帳戶的專案。

    3. 按一下「授予存取權」

    4. 在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址。

    5. 在「Select a role」(選取角色) 清單中,篩選「Service Account User」(服務帳戶使用者),然後選取該角色。

    6. 按一下 [儲存]

    或者,在服務帳戶上授予角色,只允許主體模擬特定服務帳戶:

    1. 前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。

      前往「Service accounts」(服務帳戶)

    2. 選取擁有服務帳戶的專案。

    3. 按一下先前建立的服務帳戶電子郵件地址。

    4. 按一下「Permissions」(權限) 分頁標籤。

    5. 在「可存取這個服務帳戶的主體」部分中,按一下 「授予存取權」

    6. 在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址。

    7. 按一下 [Add another role] (新增其他角色)

    8. 在「Select a role」(選取角色) 清單中,篩選「Service Account User」(服務帳戶使用者),然後選取該角色。

    9. 按一下 [儲存]

    gcloud

    執行 gcloud projects add-iam-policy-binding 指令,並在專案中授予角色,允許主體模擬多個服務帳戶:

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    或者,執行 gcloud iam service-accounts add-iam-policy-binding 指令,並將服務帳戶的角色授予主體,允許主體僅模擬特定服務帳戶:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    更改下列內容:

    • SERVICE_ACCOUNT_PROJECT_ID:擁有服務帳戶的專案的專案 ID Google Cloud
    • PRINCIPAL:觸發條件建立者的 ID,格式為 user|group|serviceAccount:emaildomain:domain。例如:
      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com 公尺
    • SERVICE_ACCOUNT_RESOURCE_NAME:服務帳戶的完整資源名稱。例如:

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      其中:

      • SERVICE_ACCOUNT_PROJECT_ID 是Google Cloud 擁有服務帳戶的專案 ID
      • SERVICE_ACCOUNT_NAME 是您的服務帳戶名稱

授予權限以支援事件轉送

建立 Eventarc 觸發條件前,您必須授予其他 IAM 權限,才能使用 Eventarc 轉送事件。

  1. 根據 Eventarc 觸發程序執行工作時必須存取的資源,以及事件供應商和目的地,授予適當權限。詳情請參閱「所有角色和權限」。

  2. 使用跨專案服務帳戶建立觸發條件

後續步驟