Cloud Deploy 服務帳戶

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

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

  • Cloud Deploy 服務代理

    Cloud Deploy 會使用這個服務帳戶與專案互動。您無法以替代服務帳戶取代這個服務代理程式,但可以編輯其權限,例如使用專案外部的資源 (例如服務帳戶或私有 Cloud Build 工作站集區) 時。

  • Cloud Deploy 執行作業服務帳戶

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

    執行作業時,預設服務帳戶為預設 Compute Engine 服務帳戶。您可以在目標設定中指定替代服務帳戶。

  • Cloud Deploy 自動化服務帳戶

    Cloud Deploy 會使用這個服務帳戶執行自動化作業。可以是預設執行服務帳戶,也可以是其他服務帳戶。請參閱「自動化服務帳戶」,進一步瞭解這個服務帳戶。

如需如何編輯服務帳戶權限,以及如何建立替代服務帳戶的操作說明,請參閱「建立及管理服務帳戶」。

Cloud Deploy 服務代理

Cloud Deploy 服務代理程式是服務帳戶,Cloud Deploy 會使用這個帳戶與其他 Google Cloud服務互動,而 Cloud Deploy 依賴這些服務。這些服務包括 Cloud Build、Pub/Sub 和 Cloud 稽核記錄。

這個服務帳戶的名稱格式如下:

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

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

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

    開啟 IAM 頁面

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

    如果顯示服務代理程式,即可略過其餘步驟。

  3. 如果未顯示服務代理人,請按一下「授予存取權」

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

    1. service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
  5. 按一下「Select a role」(請選擇角色) 下拉式選單,然後選取「Cloud Deploy Service Agent」(Cloud Deploy 服務代理程式)

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

    在這種情況下,project-number 是您建立目標的專案。

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

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

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

    如果服務帳戶與 Cloud Deploy 執行所在的專案不同,您必須為目標執行環境中設定的每個服務帳戶授予這個角色。

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

所需權限

  • 用於算繪設定的服務帳戶必須具備足夠的權限,才能存取儲存 Cloud Deploy 資源 (發布管道、版本、推出作業) 的 Cloud Storage bucket。

    角色 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 會使用自動化服務帳戶執行這些自動化作業,該帳戶可以是預設執行服務帳戶、做為執行服務帳戶的非預設服務帳戶,或是其他服務帳戶。

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

後續步驟