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 是您创建目标的项目。

    您还可以将 roles/iam.serviceAccountUser 授予 以及每项服务的项目中及具有该权限的 但该账号所在的项目不同于 Cloud Deploy 正在运行。

  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 运行这些 使用自动化服务账号(可能是默认的 执行服务账号,非默认服务账号,用作执行任务 服务账号或其他服务账号

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

后续步骤