支援跨專案服務帳戶

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

根據預設,您無法在某個Google Cloud 專案中建立 IAM 服務帳戶,並附加至其他專案中的資源。不過,您可能已在個別專案中集中管理機構的服務帳戶,這樣會比較容易管理服務帳戶。本文說明將一個專案中的服務帳戶附加至另一個專案的 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. 按一下「Permissions」(權限) 分頁標籤。

    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. 使用跨專案服務帳戶建立觸發條件

後續步驟