5

我正在尝试使用 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 文档不是很清楚,但是根据我的阅读,这应该可以。知道我在这里做错了什么吗?

4

2 回答 2

9

好的。我想到了。您不能在自定义角色中包含预定义的 GCP角色。您必须指定特定的服务权限。我真正想做的是:

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”。

于 2018-03-31T01:05:37.743 回答
0

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

注意:所有权限都不适用于自定义角色,因此例如,如果您尝试授予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-09-19T11:41:52.853 回答