【问题标题】:How to Attach Custom GCP Role to a GCP Service Account Using Terraform如何使用 Terraform 将自定义 GCP 角色附加到 GCP 服务帐户
【发布时间】:2019-08-19 09:36:01
【问题描述】:

我已经使用 Terraform 在 GCP 中创建了一个服务帐户和一个自定义角色。如何将此自定义角色附加到服务帐户?我可以使用 GCP Console 来做到这一点,但这不是这里的需要,因为我必须使用 Terraform 来做到这一点。请在下面找到我用来创建服务帐户和自定义规则的代码 sn-ps。

resource "google_service_account" "mservice_infra_service_account" {
  account_id   = "mserviceinfra-service-account"
  display_name = "Infrastructure Service Account"
}

resource "google_project_iam_custom_role" "mservice_infra_admin" {
  role_id     = "mservice_infra_admin"
  title       = "mservice_infra_admin"
  description = "Infrastructure Administrator Custom Role"
  permissions = ["compute.disks.create", "compute.firewalls.create", "compute.firewalls.delete", "compute.firewalls.get", "compute.instanceGroupManagers.get", "compute.instances.create", "compute.instances.delete", "compute.instances.get", "compute.instances.setMetadata", "compute.instances.setServiceAccount", "compute.instances.setTags", "compute.machineTypes.get", "compute.networks.create", "compute.networks.delete", "compute.networks.get", "compute.networks.updatePolicy", "compute.subnetworks.create", "compute.subnetworks.delete", "compute.subnetworks.get", "compute.subnetworks.setPrivateIpGoogleAccess", "compute.subnetworks.update", "compute.subnetworks.use", "compute.subnetworks.useExternalIp", "compute.zones.get", "container.clusters.create", "container.clusters.delete", "container.clusters.get", "container.clusters.update", "container.operations.get"]
}

如果有人能找到基于 Terraform 的解决方案来解决此问题,我们将不胜感激。谢谢

【问题讨论】:

    标签: google-cloud-platform terraform infrastructure-as-code


    【解决方案1】:

    使用资源google_project_iam_binding

    所以完整的代码如下:

    data "google_project" "project" {}
    
    resource "google_service_account" "mservice_infra_service_account" {
      account_id   = "mserviceinfra-service-account"
      display_name = "Infrastructure Service Account"
    }
    
    resource "google_project_iam_custom_role" "mservice_infra_admin" {
      role_id     = "mservice_infra_admin"
      title       = "mservice_infra_admin"
      description = "Infrastructure Administrator Custom Role"
      permissions = ["compute.disks.create", "compute.firewalls.create", "compute.firewalls.delete", "compute.firewalls.get", "compute.instanceGroupManagers.get", "compute.instances.create", "compute.instances.delete", "compute.instances.get", "compute.instances.setMetadata", "compute.instances.setServiceAccount", "compute.instances.setTags", "compute.machineTypes.get", "compute.networks.create", "compute.networks.delete", "compute.networks.get", "compute.networks.updatePolicy", "compute.subnetworks.create", "compute.subnetworks.delete", "compute.subnetworks.get", "compute.subnetworks.setPrivateIpGoogleAccess", "compute.subnetworks.update", "compute.subnetworks.use", "compute.subnetworks.useExternalIp", "compute.zones.get", "container.clusters.create", "container.clusters.delete", "container.clusters.get", "container.clusters.update", "container.operations.get"]
    }
    
    resource "google_project_iam_binding" "mservice_infra_binding" {
      role = "projects/${data.google_project.project.project_id}/roles/${google_project_iam_custom_role.mservice_infra_admin.role_id}"
    
      members = [
        "serviceAccount:${google_service_account.mservice_infra_service_account.email}",
      ]
    }
    

    【讨论】:

    • 非常感谢您的解决方案。欣赏它。
    • 这对我也有帮助,如果您最终向帐户添加更多绑定并且不希望它们被覆盖,您可能希望使用google_project_iam_member。角色属性可以简化为role = google_project_iam_custom_role.mservice_infra_admin.id。
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 2021-05-18
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2022-11-27
    相关资源
    最近更新 更多