本文說明用於執行 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
如果這個帳戶已從專案中移除,您可以重新新增:
在 Google Cloud 控制台中開啟「IAM」頁面:
選取「包含 Google 提供的角色授予項目」,即可顯示服務代理人。
如果顯示服務代理程式,即可略過其餘步驟。
如果未顯示服務代理人,請按一下「授予存取權」。
在「New principals」(新增主體) 欄位中,輸入服務代理地址,格式如下:
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
按一下「Select a role」(請選擇角色) 下拉式選單,然後選取「Cloud Deploy Service Agent」(Cloud Deploy 服務代理程式)。
按一下 [儲存]。
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,可以將服務帳戶限制為一個命名空間。
使用其他專案的服務帳戶
針對您的執行環境,您可以指定服務帳戶,該帳戶所在的專案與您建立目標的專案不同:
在擁有服務帳戶的專案中,啟用跨專案 SA 機構政策。
將服務帳戶的
iam.serviceAccounts.actAs權限授予 Cloud Deploy 服務代理 (service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com)。在這種情況下,
project-number是您建立目標的專案。您也可以在專案中,將包含該權限的
roles/iam.serviceAccountUser角色,授予每個服務帳戶 (這些帳戶與 Cloud Deploy 執行的專案不同)。將
roles/iam.serviceAccountTokenCreator角色授予 Cloud Build 服務代理程式 (service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com)。在這種情況下,
project-number是您建立目標的專案,而這項角色是在服務帳戶的專案中授予。如果服務帳戶與 Cloud Deploy 執行所在的專案不同,您必須為目標執行環境中設定的每個服務帳戶授予這個角色。
將服務帳戶的
iam.serviceAccounts.actAs權限或roles/iam.serviceAccountUser角色授予gcloud deploy releases create和gcloud deploy rollouts create的呼叫方。
所需權限
用於算繪設定的服務帳戶必須具備足夠的權限,才能存取儲存 Cloud Deploy 資源 (發布管道、版本、推出作業) 的 Cloud Storage bucket。
角色
roles/clouddeploy.jobRunner包含算繪服務帳戶 (privatePool或defaultPool) 需要的所有權限。用於部署的服務帳戶必須具備足夠的權限,才能部署至目標叢集,並存取 Cloud Storage 值區。
呼叫 Cloud Deploy 建立版本的服務帳戶必須具備
clouddeploy.releaser角色。此外,該帳戶也必須具備iam.serviceAccount.actAs權限,才能使用算繪資訊清單的服務帳戶 (例如透過roles/iam.serviceAccountUser角色)。呼叫 Cloud Deploy 升級版本或建立
rollout的服務帳戶,必須具備iam.serviceAccount.actAs權限,才能使用部署至目標的服務帳戶 (例如透過roles/iam.serviceAccountUser角色)。
自動化服務帳戶
你可以自動執行版本中的部分動作。Cloud Deploy 會使用自動化服務帳戶執行這些自動化作業,該帳戶可以是預設執行服務帳戶、做為執行服務帳戶的非預設服務帳戶,或是其他服務帳戶。
進一步瞭解自動化服務帳戶。
後續步驟
- 瞭解身分與存取權管理。
- 瞭解預先定義的 Cloud Deploy 角色。
- 瞭解如何建立及管理服務帳戶。