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 项目中具有 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 DeveloperService Account User 角色。对于 Cloud Run,您可以选择 Cloud Run DeveloperService Account User 角色。自定义目标使用的其他运行时可能需要自己的权限。

要创建哪些服务账号

如果您选择不使用默认的执行服务账号进行渲染和部署,则需要创建一个或多个备用服务账号。这些是用于运行 Cloud Deploy 的服务账号,并且在目标配置中配置

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

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

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

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

对于执行环境,您可以指定一个服务账号,该账号位于与创建目标的项目不同的项目中:

  1. 在拥有服务账号的项目中,启用跨项目 SA 组织政策

  2. 向 Cloud Deploy Service Agent (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 角色。

所需权限

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

详细了解自动化服务账号。

后续步骤