本文說明用於執行 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
如果這個帳戶已從專案中移除,您可以重新加入:
在 Google Cloud 控制台中開啟「IAM」頁面:
選取「包含 Google 提供的角色授予項目」,即可顯示服務代理人。
如果服務專員顯示在畫面上,請略過後續步驟。
如果畫面上未顯示服務專員,請按一下「授予存取權」。
在「新增主體」欄位中,輸入服務代理人地址,格式如下:
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
按一下「Select a role」下拉式清單,然後選取「Cloud Deploy Service Agent」。
按一下 [儲存]。
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 機構政策。
授予 Cloud Deploy 服務代理人 (
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
) 服務帳戶的iam.serviceAccounts.actAs
權限。在本例中,
project-number
是您建立目標的專案。您也可以在 Cloud Deploy 執行的專案中,為每個服務帳戶的專案和帳戶授予
roles/iam.serviceAccountUser
角色 (包含該權限)。為 Cloud Build 服務代理程式 (
service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com
) 授予roles/iam.serviceAccountTokenCreator
角色。在這種情況下,
project-number
是您建立目標的專案,而這個角色是在服務帳戶的專案中授予。如果服務帳戶位於 Cloud Deploy 執行的專案以外的專案中,您必須為在目標執行環境中設定的每個服務帳戶授予此角色。
請將
gcloud deploy releases create
和gcloud deploy rollouts create
的呼叫方iam.serviceAccounts.actAs
權限,或roles/iam.serviceAccountUser
角色授予服務帳戶。
所需權限
用於算繪設定的服務帳戶必須具備足夠的權限,才能存取 Cloud Deploy 資源儲存的 Cloud Storage 值區 (提交管道、版本、部署)。
角色
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 角色。
- 瞭解如何建立及管理服務帳戶。