如何为Google Cloud Storage对象配置基于文件夹结构的条件访问控制
Google Cloud Storage 按特定日期文件夹结构配置条件访问控制
核心问题纠正
你之前的IAM条件失效,是因为误解了GCS资源名称的格式:GCS对象的resource.name并非gs://bucket/xxx格式,而是采用projects/_/buckets/[桶名]/objects/[对象路径]的结构。比如gs://bucket/23/10/01/folder_1/some_file.txt对应的resource.name是:
projects/_/buckets/bucket/objects/23/10/01/folder_1/some_file.txt
正确配置步骤
要实现仅允许访问{year}/{month}/{day}/folder_1路径下的对象,可通过带正则匹配条件的IAM绑定完成:
- 打开GCS控制台,进入目标存储桶,切换到「权限」标签页
- 点击「添加权限」,输入需要授权的查看者身份(邮箱/服务账号等),选择角色
roles/storage.objectViewer - 点击「添加条件」,配置以下内容:
- 条件名称:自定义(比如「仅允许访问日期路径下的folder_1」)
- 条件类型:选择「资源」
- 属性:选择「资源名称」
- 运算符:选择「匹配正则表达式」
- 值:填入对应你的路径规则的正则,示例:
(如果年份是4位,将projects/_/buckets/bucket/objects/[0-9]{2}/[0-9]{2}/[0-9]{2}/folder_1/.*[0-9]{2}改为[0-9]{4}即可)
- 保存配置
权限验证
- 使用授权的查看者身份,尝试访问
gs://bucket/23/10/01/folder_1/some_file.txt,确认可正常访问 - 尝试访问
gs://bucket/23/10/01/another_folder/another_file.txt或其他非目标路径的对象,确认被拒绝访问
注意事项
- 不要给查看者直接配置存储桶级的
roles/storage.objectViewer权限(无附加条件),否则会覆盖本次的条件限制 - 正则表达式可根据实际路径规则调整,比如允许年份为任意数字长度、支持多字符分隔等,确保精确匹配目标路径
- 若需批量管理,可通过gcloud命令行配置,示例命令:
gcloud storage buckets add-iam-policy-binding gs://bucket \ --member="user:viewer@example.com" \ --role="roles/storage.objectViewer" \ --condition="expression=resource.name.matches('projects/_/buckets/bucket/objects/[0-9]{2}/[0-9]{2}/[0-9]{2}/folder_1/.*'),title=AllowFolder1Access"
内容的提问来源于stack exchange,提问作者Matias Lopez
相关产品推荐
相关产品推荐

