本文档介绍用于运行 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
如果此账号已从您的项目中移除,您可以重新添加:
在 Google Cloud 控制台中打开 IAM 页面:
选择包括 Google 提供的角色授权 以显示服务代理。
如果显示了服务代理,您可以跳过其余步骤。
如果未显示服务代理,请点击授予访问权限 。
在新主账号 字段中,输入服务代理地址,格式如下:
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
点击选择角色 下拉列表,然后选择 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 Developer 和 Service Account User 角色。自定义目标使用的其他运行时可能需要自己的权限。
要创建哪些服务账号
如果您选择不使用默认的执行服务帐号进行渲染和部署,则需要创建一个或多个备用服务账号。 这些是用于运行 Cloud Deploy 的服务账号,并且 在目标配置中配置。
创建多个服务账号的一个原因是您可以使用特定服务账号来部署到受限目标,例如生产目标。
一种可能的方法是为每个交付流水线使用单独的服务账号。每个此类服务帐号都包含具有足够权限来进行渲染和部署的角色。
对于向 Google Kubernetes Engine 进行的部署,您可以 将服务帐号限制为一个命名空间。
使用其他项目中的服务账号
对于您的 执行环境,您可以 指定一个服务帐号,该服务账号与您创建目标的项目的不同:
在拥有服务帐号的项目中,启用跨项目 SA 组织政策。
向 Cloud Deploy 服务代理 (
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com) 授予服务帐号的iam.serviceAccounts.actAs权限。在这种情况下,
project-number是您在其中创建目标的项目的编号。您还可以在 Cloud Deploy 运行所在的项目中以及每个服务账号(与 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 使用自动化服务帐号运行这些自动化,该账号可以是默认执行服务帐号、用作执行服务帐号的非默认服务帐号,也可以是其他服务帐号。
详细了解自动化服务帐号。
后续步骤
- 了解 IAM。
- 了解预定义的 Cloud Deploy 角色。
- 了解如何创建和管理服务账号。