Создание пользовательской роли ICP GCP с помощью Terraform
Я пытаюсь создать собственную роль IAM в GCP с помощью Terraform для моих экземпляров. 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 не очень понятны, но из того, что я прочитал, это должно сработать. Есть идеи, что я здесь делаю не так?
2 ответа
Хорошо. Я понял. Вы не можете включить предопределенную роль 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, такими как "role /storage.objectCreator", который представляет собой набор разрешений GCP и использует эти отдельные разрешения самостоятельно. При создании настраиваемой роли IAM в Terraform вы должны указать индивидуальные разрешения уровня обслуживания, которые вы хотите применить, например, "storage.objects.create".
Прежде всего, вы даете роли в разделе разрешений, что неверно. Вы можете использовать некоторые модули, которые позволяют вам создавать собственные роли, используя набор заранее определенных ролей и разрешений. Вы можете использовать или сослаться на мой код здесь - Код Terraform для создания пользовательских ролей
Примечание. Все разрешения не работают с настраиваемой ролью. Например, если вы пытаетесь предоставить
roles/iam.securityAdmin
role, тогда вам придется исключить некоторые разрешения, поскольку они не разрешены в пользовательских ролях. Вам нужно будет вручную составить список разрешений на исключение, поскольку нет никакого пути.
Вот как вам нужно будет перечислить все роли, которые необходимо исключить. Просто передайте это в такой модуль -
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= Здесь вам нужно будет предоставить список исключенных разрешений