如何通过Terraform配置GCS存储桶权限,限制服务账号仅创建不可删除?
GCP存储桶权限限制Terraform实现方案
你不需要为20个存储桶逐一配置google_storage_bucket_iam_member资源,你提出的项目级IAM加条件限制的方案是改动最小的可行方案。
实现逻辑
- 原有
roles/storage.objectAdmin角色本身包含对象删除权限,给该权限添加排除条件后,仅对除目标限制桶之外的其他19个存储桶生效 - 新增的
roles/storage.objectCreator角色仅包含对象创建权限,无删除权限,通过条件限制仅对目标桶生效,刚好满足「可创建文件、不可删除文件」的权限要求
可用配置示例
使用时将代码中的bucket_can_not_delete替换为你实际需要限制的存储桶名称bucket_A即可:
resource "google_project_iam_member" "aaaa" { member = "sa-email.com" project = "pid" role = "roles/storage.objectAdmin" condition { title = "允许除指定桶外的对象管理权限" expression = "!resource.name.startsWith(\"projects/_/buckets/bucket_can_not_delete\")" } } resource "google_project_iam_member" "bbbb" { member = "sa-email.com" project = "pid" role = "roles/storage.objectCreator" condition { title = "指定桶仅允许创建对象权限" expression = "resource.name.startsWith(\"projects/_/buckets/bucket_can_not_delete\")" } }
方案优势
- 改动量极小:仅需调整原有1个项目级IAM资源、新增1个项目级IAM资源,无需修改其他19个存储桶的任何配置
- 维护成本低:后续如果需要新增更多限制删除的存储桶,仅需修改两个IAM资源的condition表达式即可,不需要新增大量桶级IAM资源
内容的提问来源于stack exchange,提问作者ender1986
相关产品推荐
相关产品推荐

