如何为GCP Cloud Storage存储桶内的不同文件夹配置独立访问权限
Google Cloud Storage分目录设置不同访问权限的实现方案
结论
该需求完全可以实现,Google Cloud Storage(下称GCS)支持通过带条件的IAM策略,按对象前缀(即你所说的文件夹)配置不同的访问权限。
前置要求
首先你需要确认存储桶未开启统一桶级访问权限,该功能会强制所有对象复用桶的权限配置,不允许单独为前缀/对象设置权限,如有开启需要先关闭该配置。
具体实现步骤
- 第一步:确保桶本身没有给
allUsers或allAuthenticatedUsers授予任何对象访问类的权限(如roles/storage.objectViewer),避免高权限覆盖前缀级的权限规则 - 第二步:给文件夹B配置公开访问权限,通过带条件的IAM策略给所有用户授予B路径下的对象读权限,你可以直接在云控制台的存储桶权限页面添加IAM绑定,也可以用gcloud命令执行:
gcloud storage buckets add-iam-policy-binding 替换为你的桶名 \ --member=allUsers \ --role=roles/storage.objectViewer \ --condition="expression=resource.name.startsWith('projects/_/buckets/替换为你的桶名/objects/B/'),title=公开访问B目录" - 第三步:文件夹A无需额外配置,GCS默认所有对象为私有,只要你没有给A路径配置额外的公开访问权限,A路径下的所有对象默认只有桶所有者、授权账号能访问。
验证方法
你可以分别访问两个路径下的公开链接验证效果:
- B路径下的文件:
https://storage.googleapis.com/你的桶名/B/测试文件可直接匿名访问 - A路径下的文件:
https://storage.googleapis.com/你的桶名/A/测试文件匿名访问会返回403错误
注意事项
- GCS本身是扁平化对象存储,没有真实的文件夹结构,此处的文件夹本质是对象名称的前缀,所有名称以
B/开头的对象都会匹配上述公开访问规则 - 如果你的场景只需要给少量B目录下的文件设置公开权限,也可以直接给单个对象设置公开ACL,无需配置IAM策略
- 如果你有更复杂的路径权限需求,直接修改IAM策略的匹配条件即可
内容的提问来源于stack exchange,提问作者Eranga Perera
相关产品推荐
相关产品推荐

