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
文章信息
相关推荐
