Google Cloud Deploy 服务帐号

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本文档介绍用于运行 Google Cloud Deploy 和调用 Google Cloud Deploy 以运行各种操作的服务帐号。

Google Cloud Deploy 使用两个服务帐号:

  • Google Cloud Deploy 服务代理

    Google Cloud Deploy 使用此服务帐号与您的项目进行交互。您无法将此服务代理替换为备用服务帐号,但可以修改其权限,例如,当使用项目外部的资源(例如服务帐号或专用 Cloud Build 工作器池)时。

  • Google Cloud Deploy 执行服务帐号

    Google Cloud Deploy 使用此服务帐号在 Cloud Build 中执行渲染和部署操作。此帐号需要足够的权限才能对 Cloud Storage 存储桶执行读写操作以及访问部署目标。

    用于执行的默认服务帐号是默认的 Compute Engine 服务帐号。您可以在目标配置中指定备用服务帐号。

如需了解如何修改服务帐号权限以及如何创建备用服务帐号,请参阅创建和管理服务帐号

Google Cloud Deploy 服务代理

Google Cloud Deploy 服务代理是 Google Cloud Deploy 用来与 Google Cloud Deploy 依赖的其他 Google Cloud 服务交互的服务帐号。这些服务包括 Cloud Build、Pub/Sub 和 Cloud Audit Logs。

此服务帐号的名称遵循以下模式:

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

您不能将服务代理替换为备用服务帐号。但您可能需要添加权限,例如,允许访问另一个项目中配置为执行环境一部分的专用池。

Google Cloud Deploy 执行服务帐号

默认情况下,Google Cloud Deploy 使用默认 Compute Engine 服务帐号运行。该服务帐号在包含它的项目中具有足够的权限,可以渲染清单并将其部署到您的目标。

此服务帐号的名称遵循以下模式:

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

此默认服务帐号具有广泛的权限。最佳做法是更改执行环境,以便 Google Cloud Deploy 以其他服务帐号的身份运行。您可以更改使用目标定义executionConfigs.privatePool.serviceAccount 属性或 executionConfigs.defaultPool.serviceAccount 属性来更新目标的执行服务帐号。

您为这些属性设置的任何服务帐号都必须在 Cloud Deploy 项目中具有 roles/clouddeploy.jobRunner 角色。如果默认执行服务帐号没有此权限,请运行以下命令:

 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 Cloud Deploy 的服务帐号,并且在目标配置中配置

创建多个服务帐号的一个原因是您可以使用特定服务帐号来部署到受限目标,例如生产目标。

一种可能的方法是为每个交付流水线使用单独的服务帐号。每个此类服务帐号都包含具有足够权限来进行渲染和部署的角色。

对于部署到 Google Kubernetes Engine,您可以将服务帐号限制为一个命名空间

使用其他项目中的服务帐号

对于执行环境,您可以指定与创建交付流水线时所用项目不同的服务帐号。

  1. 在拥有相应服务帐号的项目上,启用跨项目 SA 组织政策

  2. 向 Google Cloud Deploy 服务代理 (service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com) 授予服务帐号的 iam.serviceAccounts.actAs 权限。

    您还可以授予 roles/iam.serviceAccountUser 角色,其中包含该权限。

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

  4. gcloud deploy releases creategcloud deploy rollouts create 的调用者授予服务帐号的 iam.serviceAccounts.actAs 权限。

所需权限

  • 用于渲染配置的服务帐号必须具有足够的权限才能访问存储 Google Cloud Deploy 资源(交付流水线、版本、发布)的 Cloud Storage 存储桶。

    roles/clouddeploy.jobRunner 角色包含渲染服务帐号(privatePooldefaultPool)所需的所有权限。

  • 用于部署的服务帐号必须具有部署到目标集群的的足够权限以及访问 Cloud Storage 存储桶的权限。

  • 调用 Google Cloud Deploy 以创建版本的服务帐号必须具有 clouddeploy.releaser 角色。它还必须具有 iam.serviceAccount.actAs 权限才能使用渲染清单的服务帐号(例如,通过 roles/iam.serviceAccountUser 角色)。

  • 调用 Google Cloud Deploy 以提升版本或创建 rollout 的服务帐号必须具有 iam.serviceAccount.actAs 权限才能使用部署到目标的服务帐号。

后续步骤