如何通过组织策略在项目级别禁止公共GCP存储桶创建及设置豁免?
如何在项目级别禁止创建公共可访问的GCP存储桶
我来一步步拆解这个需求,从项目级限制到组织策略配置再到豁免规则,全给你讲明白:
一、通过组织策略实现项目级公共存储桶限制
要彻底禁止项目里创建公共可访问的存储桶,GCP的组织策略是最可靠的方式——不用写自定义脚本或者监控,直接通过内置约束强制管控。
核心约束说明
我们要用到的约束是 constraints/storage.restrictPublicBuckets:
- 当这个约束**强制启用(Enforce)**时,任何试图创建公共桶、或者将现有桶修改为公共访问的操作都会被拒绝,覆盖控制台、API、CLI等所有操作渠道。
- 它和
constraints/storage.publicAccessPrevention的区别:后者是自动屏蔽已配置的公共权限(即使你设置了公共,也不生效),而前者是直接阻止创建/设置公共桶的动作,更符合“禁止创建”的需求。
控制台配置步骤
- 打开GCP控制台的组织策略页面,切换到你要管控的目标项目。
- 在搜索框输入
storage.restrictPublicBuckets,找到对应的约束。 - 点击“编辑”,选择强制启用(Enforce),保存设置即可。
命令行(gcloud)配置
如果你习惯用CLI,执行这条命令就能快速启用约束:
gcloud resource-manager org-policies set-enforce constraints/storage.restrictPublicBuckets true --project=YOUR_PROJECT_ID
记得把YOUR_PROJECT_ID替换成你的实际项目ID。
二、为组织策略配置豁免规则
有时候难免有例外情况——比如某个服务账号需要创建公共桶用于静态资源托管,这时候就需要给特定主体配置豁免:
控制台配置豁免
- 回到
storage.restrictPublicBuckets约束的编辑页面,找到**豁免(Exemptions)**区域。 - 点击“添加豁免”,选择要豁免的主体类型:可以是用户账号、服务账号、Google群组等。
- 输入主体的完整标识符(比如服务账号:
your-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com),保存即可。
命令行配置豁免
用这条命令添加单个豁免主体:
gcloud resource-manager org-policies set-exemptions constraints/storage.restrictPublicBuckets --project=YOUR_PROJECT_ID --exemptions="members:user:john@example.com"
如果要添加多个豁免,用逗号分隔:
gcloud resource-manager org-policies set-exemptions constraints/storage.restrictPublicBuckets --project=YOUR_PROJECT_ID --exemptions="members:user:john@example.com,members:serviceAccount:static-site-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com"
注意事项
- 配置豁免需要拥有
roles/orgpolicy.policyAdmin角色,或者专门的豁免管理权限。 - 豁免只针对指定主体生效,其他用户/账号依然受约束限制,不会全局放开。
三、验证配置效果
配置完成后,你可以快速验证:
- 用普通账号尝试创建一个公共桶,会收到类似这样的错误提示:
The bucket cannot be made public. Access controls on buckets are restricted by organization policy. - 用豁免的账号创建公共桶,应该能正常完成操作。
内容的提问来源于stack exchange,提问作者Dixon Joseph Dalmeida
相关产品推荐
相关产品推荐

