Cloud Deploy 服務帳戶

本文說明用於執行 Cloud Deploy 的服務帳戶,以及用於呼叫 Cloud Deploy 來執行各項作業的服務帳戶。

Cloud Deploy 會使用下列服務帳戶:

  • Cloud Deploy 服務代理人

    Cloud Deploy 會使用這個服務帳戶與專案互動。您無法使用其他服務帳戶取代這個服務代理人,但可以編輯其權限,例如在使用專案以外的資源 (例如服務帳戶或私人 Cloud Build 工作者資源池) 時。

  • Cloud Deploy 執行作業服務帳戶

    Cloud Deploy 會使用此服務帳戶在 Cloud Build 中執行算繪和部署作業。這個帳戶需要足夠的權限,才能讀取及寫入 Cloud Storage 值區,以及存取部署目標。

    執行作業的預設服務帳戶為 預設的 Compute Engine 服務帳戶。您可以在目標設定中指定其他服務帳戶。

  • Cloud Deploy 自動化服務帳戶

    這是 Cloud Deploy 用來執行自動化作業的服務帳戶。這可以是預設執行服務帳戶或其他服務帳戶。如要進一步瞭解這個服務帳戶,請參閱自動化服務帳戶

如要瞭解如何編輯服務帳戶權限,以及如何建立其他服務帳戶,請參閱「建立及管理服務帳戶」一文。

Cloud Deploy 服務代理人

Cloud Deploy 服務代理人是 Cloud Deploy 用來與 Cloud Deploy 所依賴的其他服務互動的服務帳戶。 Google Cloud這些服務包括 Cloud Build、Pub/Sub 和 Cloud 稽核記錄。

這個服務帳戶的名稱採用下列模式:

service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com

如果這個帳戶已從專案中移除,您可以重新加入:

  1. 在 Google Cloud 控制台中開啟「IAM」頁面:

    開啟 IAM 頁面

  2. 選取「包含 Google 提供的角色授予項目」,即可顯示服務代理人。

    如果服務專員顯示在畫面上,請略過後續步驟。

  3. 如果畫面上未顯示服務專員,請按一下「授予存取權」

  4. 在「新增主體」欄位中,輸入服務代理人地址,格式如下:

    1. service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
  5. 按一下「Select a role」下拉式清單,然後選取「Cloud Deploy Service Agent」

  6. 按一下 [儲存]

Cloud Deploy 執行作業服務帳戶

根據預設,Cloud Deploy 會使用預設 Compute Engine 服務帳戶運作。

這個服務帳戶的名稱採用下列模式:

[project-number]-compute@developer.gserviceaccount.com

由於許多產品都會使用這個服務帳戶,因此可能會擁有廣泛的權限。最佳做法是變更執行環境,讓 Cloud Deploy 以其他服務帳戶的身分執行。您可以使用目標定義中的 executionConfigs.privatePool.serviceAccount 屬性或 executionConfigs.defaultPool.serviceAccount 屬性,變更每個目標的執行服務帳戶。

您為這些屬性設定的任何服務帳戶,都必須在 Cloud Deploy 專案中具備 Cloud Deploy Runner 角色。如果預設執行服務帳戶沒有這個角色,請執行下列指令:

 gcloud projects add-iam-policy-binding PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/clouddeploy.jobRunner"

服務帳戶也需要執行階段專屬權限,才能部署至所選執行階段。針對 Google Kubernetes Engine,您可以選擇「Container Developer」和「Service Account User」 角色。針對 Cloud Run,您可以選擇「Cloud Run 開發人員」和「服務帳戶使用者」角色。自訂目標使用的其他執行階段可能需要各自的權限。

要建立哪些服務帳戶

如果您選擇不使用預設執行服務帳戶進行轉譯和部署作業,就必須建立一或多個替代服務帳戶。這些是 Cloud Deploy 以服務帳戶身分執行的帳戶,並在目標設定中設定

建立多個服務帳戶的原因之一,是為了讓特定服務帳戶或帳戶可部署至受限目標 (例如正式版目標)。

一種可能的方法是針對每個提交管道使用個別的服務帳戶。每個這類服務帳戶都會包含角色,這些角色具備轉譯和部署所需的充足權限。

如果是部署至 Google Kubernetes Engine,您可以將服務帳戶限制在一個命名空間

使用其他專案的服務帳戶

針對執行環境,您可以指定服務帳戶位於您建立目標的專案以外的專案:

  1. 在擁有服務帳戶的專案中,啟用跨專案 SA 機構政策

  2. 授予 Cloud Deploy 服務代理人 (service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com) 服務帳戶的 iam.serviceAccounts.actAs 權限。

    在本例中,project-number 是您建立目標的專案。

    您也可以在 Cloud Deploy 執行的專案中,為每個服務帳戶的專案和帳戶授予 roles/iam.serviceAccountUser 角色 (包含該權限)。

  3. 為 Cloud Build 服務代理程式 (service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com) 授予 roles/iam.serviceAccountTokenCreator 角色。

    在這種情況下,project-number 是您建立目標的專案,而這個角色是在服務帳戶的專案中授予。

    如果服務帳戶位於 Cloud Deploy 執行的專案以外的專案中,您必須為在目標執行環境中設定的每個服務帳戶授予此角色。

  4. 請將 gcloud deploy releases creategcloud deploy rollouts create 的呼叫方 iam.serviceAccounts.actAs 權限,或 roles/iam.serviceAccountUser 角色授予服務帳戶。

所需權限

  • 用於算繪設定的服務帳戶必須具備足夠的權限,才能存取 Cloud Deploy 資源儲存的 Cloud Storage 值區 (提交管道、版本、部署)。

    角色 roles/clouddeploy.jobRunner 包含轉譯服務帳戶 (privatePooldefaultPool) 所需的所有權限。

  • 用於部署的服務帳戶必須具備足夠的權限,才能部署至目標叢集,具備存取 Cloud Storage 值區的權限。

  • 呼叫 Cloud Deploy 以建立版本的服務帳戶必須具有 clouddeploy.releaser 角色。您也必須具備 iam.serviceAccount.actAs 權限,才能使用轉譯資訊清單的服務帳戶 (例如透過 roles/iam.serviceAccountUser 角色)。

  • 呼叫 Cloud Deploy 來推廣版本或建立 rollout 的服務帳戶,必須具備 iam.serviceAccount.actAs 權限,才能使用部署至目標的服務帳戶 (例如透過 roles/iam.serviceAccountUser 角色)。

  • 自動化設定的服務帳戶必須具備執行自動化作業的權限。瞭解詳情

自動化服務帳戶

您可以自動執行某些版本中的動作。Cloud Deploy 會使用自動化服務帳戶執行這些自動化動作,該帳戶可以是預設執行服務帳戶、用於執行服務帳戶的非預設服務帳戶,或其他服務帳戶。

進一步瞭解自動化服務帳戶。

後續步驟