Cloud Deploy 中的访问是使用身份和访问管理 (IAM) 进行控制的。IAM 使您能够创建和管理 Google Cloud 资源的权限。Cloud Deploy 提供一组特定的预定义 IAM 角色,其中每个角色包含一组权限。您可以使用这些角色来提供对特定 GCP 资源的更细粒度的访问权限,并防止对其他资源进行不必要的访问。IAM 允许您采用最小权限的安全原则,因此您仅授予对资源的必要访问权限。

您可以使用策略和条件来限制对 Cloud Deploy 资源执行以下操作:

  • 创建交付管道或目标

  • 更新或删除特定的交付管道

  • 为特定交付管道创建版本

  • 更新或删除特定目标

  • 创建或批准部署或推广版本

您可以针对特定目标或交付管道向特定用户或组授予此访问权限,您还可以设置一个条件,将这种访问限制在指定的时间范围内。

下面我们来演示对 Cloud Deploy 进行特殊策略和权限的精细控制和管理。

注:请参照前一篇 Blog“玩转 Google Cloud Deploy(一):实现持续交付服务”,准备实验环境。

指定特定用户管理 pipeline 的权限

#   delivery-pipeline.yaml

bindings:

- role:   roles/clouddeploy.developer

 members:

 - user:happyroad.fan@gmail.com

这里我们指定用户 happyroad.fan@gmail.com 为 cloudeploy.developer 角色,此角色能够管理部署配置,但没有访问操作资源(例如目标)的权限。

gcloud deploy delivery-pipelines   set-iam-policy web-app   --region=us-central1 delivery-pipeline.yaml

指定特定用户管理 target 的权限

#   user-specific-target.yaml

bindings:

- role:   roles/clouddeploy.operator

 members:

 - user:happyroad.fan@gmail.com

 condition:

   expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "staging"

   title: Deploy   to staging

这里我们指定用户 happyroad.fan@gmail.com 为 clouddeploy.operator 角色,此角色能够管理部署配置的权限。

gcloud deploy delivery-pipelines   set-iam-policy web-app   user-specific-target-staging.yaml   --region=us-central1

验证

1. 是否能发布 release 到 staging

gcloud deploy releases   promote     --delivery-pipeline   web-app     --release   web-app-001 --to-target=staging   --region=us-central1

我们在前面允许此用户管理 staging target 的发布,可以看到发布成功。

2. 是否能发布 release 到 prod

gcloud deploy releases   promote     --delivery-pipeline   web-app     --release   web-app-001 --to-target=prod   --region=us-central1

我们在前面并未允许此用户管理 prod target 的发布,可以看到发布失败,错误提示权限不足。

Creating   rollout projects/flius-vpc-1/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-prod-0004 in   target prod

ERROR: (gcloud.deploy.releases.promote) Status   code: 403. Permission 'clouddeploy.rollouts.create'   denied on 'projects/38111675682/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001'.

3. 是否能发布 release 到 test

gcloud deploy releases   promote     --delivery-pipeline   web-app     --release   web-app-001 --to-target=test   --region=us-central1

我们在前面并未允许此用户管理 test target 的发布,可以看到发布失败,错误提示权限不足。

Creating   rollout projects/flius-vpc-1/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-test-0004 in   target test

ERROR: (gcloud.deploy.releases.promote) Status   code: 403. Permission 'clouddeploy.rollouts.create'   denied on 'projects/38111675682/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001'.

删除权限

gcloud deploy delivery-pipelines   remove-iam-policy-binding   web-app --member user:happyroad.fan@gmail.com  --role roles/clouddeploy.operator --region   us-central1

查询权限

gcloud deploy delivery-pipelines   get-iam-policy web-app

再次验证

发布 release 到 staging

gcloud deploy releases   promote     --delivery-pipeline   web-app     --release   web-app-001 --to-target=staging   --region=us-central1

我们删除了此用户管理 staging target 的发布,可以看到发布失败,错误提示权限不足。

结论

我们在这个实验中,展示了如何通过对 Google Cloud Deploy 相关资源进行权限控制,对于特定的用户或者用户组进行特殊策略和权限的设置,满足了对发布管道有精细化管控用户的需求。

参考资料

https://cloud.google.com/deploy/docs/securing/iam#promote_to_target

https://cloud.google.com/deploy/docs/iam-roles-permissions

https://cloud.google.com/deploy/docs/securing/iam

https://shell.cloud.google.com/?show=ide%2Cterminal&walkthrough_id=deploy--cloud-deploy-e2e-gke

相关推荐