【问题标题】:GCP Custom IAM role creation with Terraform使用 Terraform 创建 GCP 自定义 IAM 角色
【发布时间】:2018-09-09 23:59:51
【问题描述】:

我正在尝试使用 Terraform 在 GCP 中为我的实例创建自定义 IAM 角色。 AFIACT,以下应该可以工作,但是我出错了,抱怨我想要包含的标准角色无效。

resource "google_project_iam_custom_role" "my-instance-role" {
  role_id     = "myInstanceRole"
  title       = "My Instance Role"
  description = "my custom iam role"
  permissions = [
    "roles/storage.objectCreator", 
    "roles/cloudkms.cryptoKeyEncrypter"
  ]
}

这是错误信息:

* google_project_iam_custom_role.my-instance-role: Error creating 
the custom project role My Instance Role: googleapi: Error 400: 
Permission roles/storage.objectCreator is not valid., badRequest

Terraform 文档不是很清楚,但根据我的阅读,这应该可以。知道我在这里做错了什么吗?

【问题讨论】:

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


    【解决方案1】:

    好的。我想到了。您不能在自定义角色中包含 predefined GCP role。您必须指定specific service permissions。我真正想做的是:

    resource "google_project_iam_custom_role" "my-instance-role" {
      role_id     = "myInstanceRole"
      title       = "My Instance Role"
      description = "my custom iam role"
      permissions = [
        "storage.objects.create", 
        "cloudkms.cryptoKeyVersions.useToEncrypt"
      ]
    }
    

    这里的关键是预定义 GCP 角色(例如“roles/storage.objectCreator”,它是 GCP 权限的集合)与单独使用这些单独权限之间的区别。在 Terraform 中创建自定义 IAM 角色时,您必须指定要应用的单个服务级别权限,例如“storage.objects.create”。

    【讨论】:

    • 答案似乎不完整,它是问题的扩展(在这种情况下编辑问题),还是描述不完整的解决方案?然后接受你自己的答案,这样我们就知道它已经解决了。
    • 对不起,这是一个完整的答案,我已经接受了。
    • 我已经编辑了我的答案,希望能提供更清晰的答案。请让我知道您认为缺少什么。
    【解决方案2】:

    首先,您在权限部分赋予角色,这是错误的。 您可以使用一些模块,这些模块允许您使用一组预定义的角色和权限来创建自定义角色。您可以在这里使用或参考我的代码 - Terraform code to create custom roles

    注意:所有权限都不适用于自定义角色,因此例如,如果您尝试赋予roles/iam.securityAdmin 角色,那么您将不得不排除某些权限,因为自定义角色中不允许这些权限。您将不得不手动列出排除权限,因为没有办法。

    这就是您必须列出所有需要排除的角色的方式。 只需像这样将它传递给模块 -

    module "custom-viewer-role-project" {
      #count = length(var.viewer_permissions)
      source = "../../modules/custom_role_iam/"
      target_level         = "project"
      target_id            = var.project_id
      role_id              = var.viewer_role_id
      base_roles           = var.viewer_base_roles
      permissions          = var.viewer_permissions
      excluded_permissions = var.viewer_excluded_permissions
      description          = var.viewer_description
      members              = ["serviceAccount:${var.viewer_members}@${var.project_id}.iam.gserviceaccount.com"]
    }
    

    变量 - viewer_base_roles = 你在这里列出你需要的所有角色

    viewer_excluded_permissions = 您必须在此处提供排除权限列表

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 2018-12-11
      • 2020-05-16
      • 2019-08-19
      • 2018-01-15
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      相关资源
      最近更新 更多