使用 Terraform 创建 GCP 自定义 IAM 角色
GCP Custom IAM role creation with Terraform
我正在尝试使用 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 文档不是很清楚,但根据我的阅读,这应该可行。知道我在这里做错了什么吗?
好的。我想到了。您不能包含 predefined GCP role in a custom role. You have to specify the 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".
首先,您在权限部分赋予角色是错误的。
您可以使用一些模块,这些模块允许您使用一组预定义的角色和权限来创建自定义角色。您可以在此处使用或参考我的代码 - 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 = 此处您必须提供排除权限列表
我正在尝试使用 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 文档不是很清楚,但根据我的阅读,这应该可行。知道我在这里做错了什么吗?
好的。我想到了。您不能包含 predefined GCP role in a custom role. You have to specify the 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".
首先,您在权限部分赋予角色是错误的。 您可以使用一些模块,这些模块允许您使用一组预定义的角色和权限来创建自定义角色。您可以在此处使用或参考我的代码 - 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 = 此处您必须提供排除权限列表