Создание пользовательской роли 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.securityAdminrole, тогда вам придется исключить некоторые разрешения, поскольку они не разрешены в пользовательских ролях. Вам нужно будет вручную составить список разрешений на исключение, поскольку нет никакого пути.

Вот как вам нужно будет перечислить все роли, которые необходимо исключить. Просто передайте это в такой модуль -

      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= Здесь вам нужно будет предоставить список исключенных разрешений

Другие вопросы по тегам