Модуль Google IAM Terraform
Это набор подмодулей, которые упрощают неразрушающее управление несколькими ролями IAM для ресурсов на Google Cloud Platform:
- Реестр артефактов IAM
- Конфигурация аудита
- BigQuery IAM
- Платежные аккаунты IAM
- Служба облачного запуска IAM
- Пользовательская роль IAM
- DNS-зона IAM
- Папки IAM
- Крипто-ключи KMS IAM
- KMS_Брелки IAM
- Организации ИАМ
- Проекты ИАМ
- Подписки на Pubsub IAM
- Темы Pubsub IAM
- Секретный менеджер IAM
- Сервисные аккаунты IAM
- Ведра хранения IAM
- Подсети IAM
- Ключи тегов IAM
- Значения тегов IAM
- Диспетчер безопасного источника
Совместимость
Этот модуль предназначен для использования с Terraform 1.3+ и протестирован с использованием Terraform 1.3+. Если вы обнаружите несовместимость при использовании Terraform >=1.3, откройте проблему.
Обновление
Для помощи в обновлении доступны следующие руководства:
- 4.0 -> 5.0
- 3.0 -> 4.0
- 2.0 -> 3.0
Использование
Полные примеры находятся в папке примеров, но базовое использование для управления ролями в двух проектах следующее:
module "projects_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/projects_iam "
version = " ~> 8.0 "
projects = [ " project-123456 " , " project-9876543 " ]
bindings = {
" roles/storage.admin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.networkAdmin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.imageUser " = [
" user:[email protected] " ,
]
}
}
Модуль также предлагает авторитетный режим, который удалит все роли, не назначенные через Terraform. Это пример использования авторитетного режима для управления доступом к сегменту хранилища:
module "storage_buckets_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/storage_buckets_iam "
version = " ~> 8.0 "
storage_buckets = [ " my-storage-bucket " ]
mode = " authoritative "
bindings = {
" roles/storage.legacyBucketReader " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
" roles/storage.legacyBucketWriter " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
}
}
Аддитивные и авторитетные режимы
Переменная mode
управляет поведением подмодуля, по умолчанию для нее установлено значение «аддитивный», возможные варианты:
- добавка: добавляет участников в роль, старые участники не удаляются из этой роли.
- авторитетный: установите участников роли (включая удаление всех, кто не указан в списке), роли, не указанные в списке, не затрагиваются.
В авторитетном режиме подмодуль получает полный контроль над привязками IAM, перечисленными в модуле. Это означает, что любые члены, добавленные к ролям за пределами модуля, будут удалены при следующем запуске Terraform. Однако роли, не перечисленные в модуле, не будут затронуты.
В аддитивном режиме подмодуль оставляет существующие привязки без изменений. Вместо этого все члены, перечисленные в модуле, будут добавлены в существующий набор привязок IAM. Однако члены, перечисленные в модуле, полностью контролируются модулем. Это означает, что если вы добавите привязку через модуль, а затем удалите ее, модуль правильно обработает удаление привязки роли.
Предостережения
Ссылки на значения/атрибуты из других ресурсов
Каждый подмодуль выполняет операции над некоторыми переменными, прежде чем вносить какие-либо изменения в привязки IAM в GCP. Из-за ограничений for_each
(подробнее), который широко используется в подмодулях, существуют определенные ограничения на то, какие динамические значения можно предоставлять в подмодуль:
- Динамические объекты (например,
projects
) разрешены только для одного объекта. - Если вы передаете 2 или более объектов (например,
projects
), конфигурация ДОЛЖНА быть статической, что означает, что она не может использовать какие-либо поля других ресурсов для получения имени объекта (это включает в себя получение случайно сгенерированных хэшей через random_id
ресурс). - Сами имена ролей никогда не могут быть динамическими.
- Члены могут быть динамическими только в
authoritative
режиме.
IAM-привязки
Вы можете выбрать следующие типы ресурсов для применения привязок IAM:
- Проекты (переменная
projects
) - Организации (переменная
organizations
) - Папки (переменная
folders
) - Учетные записи служб (переменная
service_accounts
) - Подсети (переменная
subnets
) - Сегменты хранения (переменная
storage_buckets
) - Темы Pubsub (переменная
pubsub_topics
) - Подписки Pubsub (переменная
pubsub_subscriptions
) - Kms Key Rings (переменная
kms_key_rings
) - Kms Crypto Keys (переменная
kms_crypto_keys
) - Секреты менеджера секретов (переменная
secrets
) - Зоны DNS (переменная
managed_zones
) - Диспетчер безопасного источника (
entity_ids
и переменная location
)
Установите указанную переменную при вызове модуля, чтобы выбрать ресурсы, на которые будет воздействовать. Не забудьте установить переменную mode
и предоставить достаточные разрешения для управления выбранным ресурсом. Обратите внимание, что переменная bindings
принимает пустую карту {}
передаваемую в качестве аргумента в случае, если у ресурсов нет привязок IAM, которые можно было бы применить.
Требования
Плагины терраформа
- Терраформирование >= 0.13.0
- terraform-провайдер-Google 2.5
- terraform-provider-google-beta 2.5
Разрешения
Чтобы выполнить подмодуль, у вас должна быть учетная запись службы с соответствующей ролью для управления IAM для соответствующего ресурса. Соответствующая роль различается в зависимости от целевого ресурса следующим образом:
- Организация:
- Администратор организации: доступ для администрирования всех ресурсов, принадлежащих организации, не включает привилегии для выставления счетов или администрирования ролей организации.
- Пользовательский: добавьте разрешения resourcesmanager.organizations.getIamPolicy и resourcesmanager.organizations.setIamPolicy.
- Проект:
- Владелец: Полный доступ и все разрешения для всех ресурсов проекта.
- Projects IAM Admin: позволяет пользователям администрировать политики IAM в проектах.
- Пользовательский: добавьте разрешения resourcesmanager.projects.getIamPolicy и resourcesmanager.projects.setIamPolicy.
- Папка:
- Администратор папки: все доступные разрешения для папки.
- Администратор IAM папки: позволяет пользователям администрировать политики IAM для папок.
- Пользовательский: добавьте разрешения resourcesmanager.folders.getIamPolicy и resourcesmanager.folders.setIamPolicy (необходимо добавить в организации).
- Учетная запись службы:
- Администратор учетной записи службы: создание учетных записей служб и управление ими.
- Пользовательский: добавьте разрешения resourcesmanager.organizations.getIamPolicy и resourcesmanager.organizations.setIamPolicy.
- Подсеть:
- Администратор вычислений проекта: полный контроль над ресурсами Compute Engine.
- Администратор вычислительной сети проекта: полный контроль над сетевыми ресурсами Compute Engine.
- Пользовательский проект: добавьте разрешения Compute.subnetworks.getIamPolicy и Compute.subnetworks.setIamPolicy.
- Ведро для хранения:
- Администратор хранилища: полный контроль над ресурсами GCS.
- Владелец сегмента устаревшего хранилища: доступ для чтения и записи к существующим сегментам с возможностью просмотра, создания и удаления объектов.
- Пользовательский: добавьте разрешения Storage.buckets.getIamPolicy и Storage.buckets.setIamPolicy.
- Тема в паблике:
- Администратор Pub/Sub: создание сервисных учетных записей и управление ими.
- Пользовательский: добавьте разрешения pubsub.topics.getIamPolicy и pubsub.topics.setIamPolicy.
- Подписка на пабсаб:
- Роль администратора Pub/Sub: создание учетных записей служб и управление ими.
- Пользовательская роль: добавьте разрешения pubsub.subscriptions.getIamPolicy и pubsub.subscriptions.setIamPolicy.
- Кмс брелок для ключей:
- Владелец: Полный доступ ко всем ресурсам.
- Администратор Cloud KMS: обеспечивает управление крипторесурсами.
- Пользовательский: добавьте разрешения cloudkms.keyRings.getIamPolicy и cloudkms.keyRings.getIamPolicy.
- Крипто-ключ кмс:
- Владелец: Полный доступ ко всем ресурсам.
- Администратор Cloud KMS: обеспечивает управление крипторесурсами.
- Пользовательский: добавьте разрешения cloudkms.cryptoKeys.getIamPolicy и cloudkms.cryptoKeys.setIamPolicy.
- Секретный менеджер:
- Администратор Secret Manager: полный доступ к администрированию Secret Manager.
- Пользовательский: добавьте разрешения secretmanager.secrets.getIamPolicy и secretmanager.secrets.setIamPolicy.
- DNS-зона:
- Администратор DNS: полный доступ к администрированию зоны DNS.
- Пользовательский: добавьте разрешения dns.managedZones.setIamPolicy, dns.managedZones.list и dns.managedZones.getIamPolicy.
Установить
Терраформировать
Убедитесь, что у вас правильная версия Terraform >= 1.3.
Плагины терраформа
Убедитесь, что у вас есть скомпилированные плагины в $HOME/.terraform.d/plugins/.
- terraform-provider-google >= 5.37
- terraform-provider-google-beta >= 5.37
См. каждую страницу плагина для получения дополнительной информации о том, как их скомпилировать и использовать.