【问题标题】:How can I attach a policy to a resource (in this case a PubSub topic)?如何将策略附加到资源(在本例中为 PubSub 主题)?
【发布时间】:2021-06-09 13:58:22
【问题描述】:
resource "google_pubsub_topic" "topic" {
  name   = "argo-events"
}

resource "google_service_account" "argo_events_pubsub_publish" {
  account_id   = "pubsub-publish"
}

resource "google_project_iam_member" "argo_events_pubsub_publish" {
  role   = "roles/pubsub.editor"
  member = "serviceAccount:${google_service_account.argo_events_pubsub_publish.email}"
}

这将创建一个对项目的所有 PubSub 基础架构具有编辑权限的服务帐户。

如何将策略(由服务帐户 + 角色/pubsub.editor 产生)附加到最初创建的主题?

(这样服务帐户具有来自角色/pubsub.editor 的权限,但仅限于最初创建的名为“argo-events”的主题。)


这个问题是在假设 terraform 实现类似于 GCP 通用概念的策略附件的情况下编写的。

【问题讨论】:

  • 我不知道谷歌提供者,但如果你想在资源之间引用属性,你可以使用google_service_account.argo_events_pubsub_publish.account_id。所以提供你想要的值返回你只需要在相关资源中引用它
  • 是的,但我的问题更多是针对我必须使用什么 terraform 资源来完成这项工作。
  • 使用google_pubsub_topic_iam_bindinggoogle_pubsub_topic_iam_member。这个链接有一个例子。完成解决方案后,请发布答案。 registry.terraform.io/providers/hashicorp/google/latest/docs/…
  • @JohnHanley 谢谢,明天试试。甚至没有考虑检查 PubSub 特定的资源...

标签: google-cloud-platform terraform google-cloud-pubsub terraform-provider-gcp


【解决方案1】:

有几种方法可以将策略附加到主题或订阅。有趣的是,该方法不是通用的,而是特定于您要绑定到的资源(在本例中为 pubsub 主题),并且至少有三种方法可以做到这一点:

在这种情况下,解决方案可能如下所示:

data "google_iam_policy" "topic" {
  binding {
    role = "roles/pubsub.publisher"
    members = [
      "serviceAccount:${google_service_account.argo_events_pubsub_publish.email}",
    ]
  }
}

resource "google_pubsub_topic_iam_policy" "policy" {
  topic = google_pubsub_topic.topic.name
  policy_data = data.google_iam_policy.topic.policy_data
}

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2020-09-27
    相关资源
    最近更新 更多