如何恢复GCS存储桶默认的Viewers of project权限配置
问题根因
你使用的
google_storage_bucket_iam_policy属于权威IAM策略资源,它会完全覆盖存储桶的所有现有权限配置,而非追加新权限,所以控制台新建存储桶默认生成的项目级查看者权限会被你的配置直接覆盖删除,导致你失去存储桶操作权限。
Viewers of project: my-project对应的身份
这个控制台显示的身份,在GCP IAM的标准成员格式中为projectViewer:<你的实际项目ID>,如果你的项目ID是my-project,则对应成员值为projectViewer:my-project。
补充说明:同系列的项目级身份还有projectEditor:<项目ID>(项目编辑者)、projectOwner:<项目ID>(项目所有者)。
恢复默认权限的方案
方案1:改用非权威IAM资源(推荐)
如果你只是需要追加公开读权限,不需要完全覆盖所有存储桶权限,建议将google_storage_bucket_iam_policy替换为google_storage_bucket_iam_binding,该资源只会修改指定角色的成员列表,不会影响其他已有权限:
resource "google_storage_bucket_iam_binding" "public_object_viewer" { bucket = "sdfzdfsdf" role = "roles/storage.objectViewer" members = [ "allUsers", ] }
应用该配置后原有默认的项目查看者权限会完整保留。
方案2:在权威策略中补充默认绑定
如果你必须使用google_storage_bucket_iam_policy,直接把两个默认的legacy角色绑定补充到bindings数组中即可:
resource "google_storage_bucket_iam_policy" "sdfsdf" { bucket = "sdfzdfsdf" policy_data = jsonencode({ bindings = [ # 原有公开读配置 { members = [ "allUsers", ] role = "roles/storage.objectViewer" }, # 补充默认项目查看者权限 { members = [ "projectViewer:my-project" # 替换为你的实际项目ID ] role = "roles/storage.legacyBucketReader" }, { members = [ "projectViewer:my-project" # 替换为你的实际项目ID ] role = "roles/storage.legacyObjectReader" } ] }) }
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

