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 Audit Logs。

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

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

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

Cloud Deploy 执行服务帐号

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

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

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

此默认服务账号具有广泛的权限。最佳做法是更改执行环境,以便 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"

要创建哪些服务账号

如果您选择不使用默认的执行服务账号进行渲染和部署,则需要创建一个或多个备用服务账号。这些是 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](/iam/docs/understanding-roles#service-accounts-roles) 角色。

所需权限

  • 用于渲染配置的服务帐号必须具有足够的权限,能够访问存储 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 使用自动化服务帐号来运行这些自动化操作,自动化服务帐号可以是默认执行服务帐号、用作执行服务帐号的非默认服务帐号或其他服务帐号。

自动化服务帐号部分介绍了此服务账号。

后续步骤