-2

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

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

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

更新:
现在在我的项目中,sa-email 是存储对象管理员。

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

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

Update2:
我的解决方案
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\")"
    }
}
4

1 回答 1

1

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

你只需要一个storage.objects.create权限,你不需要指定它不能删除它,如果它没有它。这意味着 Storage Object Creator 角色可以满足您的需要如 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,因为它可能取决于环境,否则您可以将其添加为字符串。

于 2021-12-06T14:39:04.797 回答