如何使用 terraform 配置 GCS 存储桶权限?

Posted

技术标签:

【中文标题】如何使用 terraform 配置 GCS 存储桶权限?【英文标题】:How to config GCS bucket permission with terraform? 【发布时间】:2022-01-11 18:09:37 【问题描述】:

我想为存储桶 bucket_A 上的服务帐号 sa-email.com 设置权限。

如何使用 terraform 进行如下配置?

    sa-email.com 可以在 bucket_A 中创建文件 sa-email.com 无法删除 bucket_A 中的文件

更新: 现在在我的项目中,sa-email 是 Storage Object Admin。

resource "google_project_iam_member" "aaaa" 
    member  = "sa-email.com"
    project = "pid"
    role    = "roles/storage.objectAdmin"

我的项目中有大约 20 个存储桶。 我只想将权限更改为一个存储桶。 我必须使用 google_storage_bucket_iam_member 来设置 20 个存储桶吗? 有没有办法只做一点更新?

更新2: 我的解决方案 带有“条件”的 google_project_iam_member

resource "google_project_iam_member" "aaaa" 
    member  = "sa-email.com"
    project = "pid"
    role    = "roles/storage.objectAdmin"
    condition 
        title      = " bucket can  delete "
        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      = " bucket can not delete "
        expression = "resource.name.startsWith(\"projects/_/buckets/bucket_can_not_delete\")"
    

【问题讨论】:

【参考方案1】:

如果您需要一些帮助而不是寻找一个完整的解决方案,您通常必须添加一个错误。

你只需要一个storage.objects.create权限,你不需要指定它不能删除它,如果它没有它。 这意味着 Storage Object Creator 角色可以满足您的需求 here,正如 Google 文档中所述:

允许用户创建对象。不授予查看、删除或替换对象的权限。 您需要使用以下资源:

resource "google_storage_bucket_iam_member" "bucket_A" 
  bucket = "bucket_A"
  role   = "roles/storage.objectCreator"
  member = var.service_accounts
  depends_on = [google_storage_bucket.bucket_A]

var.service_account 是您的 sa-email.com,因为它可能取决于环境,否则您可以将其添加为字符串。

【讨论】:

感谢您的回复。您能检查我的更新吗? @亚历克斯

以上是关于如何使用 terraform 配置 GCS 存储桶权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?

Gsutil - 如何使用 Gsutil 检查 GCS 存储桶(子目录)中是不是存在文件

如何设置 GCS 存储桶的限制

如何使用 multer 和 NodeJS 将图像上传到 GCS 存储桶?

配置GCS存储桶以允许公共写入但不允许覆盖

创建谷歌云存储桶并使用相同的 terraform 脚本将 terraform 状态保存到其中?