В этом репозитории представлен модуль для создания облачной инфраструктуры организации "под ключ", соответствующий рекомендациям архитекторов Yandex Cloud. Модуль включает:
0-bootstrap
- создание базовой инфраструктуры для развертывания облачных окружений, разграничения доступа и реализации подхода Infrastructure-as-Code;1-security
- создание облака, где размещены ресурсы и сервисы, необходимые для реализации мер информационной безопасности;2-workload
- пример создания "полезной нагрузки" 1 с применением Terraform модулей из библиотеки модулей.
С точки зрения общего подхода, облако "security" так же является полезной нагрузкой, однако, выделено особенно, чтобы продемонстрировать рекомендованный набор сервисов и применимые настройки.
В модуле реализуется подход изоляции полномочий - отделения операций, требующих полномочий уровня организации, от операций с полномочиями в конкретном облаке.
-
Для создания/удаления облаков, привязки облаков к платежным аккаунтам, создания/удаления групп пользователей, назначения/изменения ролей уровня организации требуются полномочия уровня организации. Такие операции выполняются от имени субъекта (пользователя или сервисного акаунта) с соответствющими полномочиями путем изменения и применения конфигурации в каталоге
0-bootstrap
. -
Для наполнения и эксплуатации предварительно созданных облаков достаточно полномочий внутри облака, выданных группе администраторов конкретного облака. Такие операции выполняются от имени любого субъекта, входящего в группу администраторов, путем изменения и применения конфигурации в каталоге конкретного облака.
Ресурсы, необходимые для хранения состояния Terraform и интеграции с решениями CICD, создаются в облаке bootstrap
.
-
ID организации
-
ID платежного аккаунта
-
учетная запись, от имени которой создаются ресурсы в организации, должна иметь роли:
organization-manager.organizations.owner
- владелец организации
или
resource-manager.admin
на организацию (создавать, редактировать и удалять облака и каталоги, а также управлять доступом к ним);billing.accounts.editor
на платежный аккаунт (привязывать облака и сервисы к платежному аккаунту).
- Облако
bootstrap
(подробная инструкция)- Инициализировать Terraform в каталоге
0-bootstrap
. - Применить конфигурацию из каталога
0-bootstrap
. - Опционально: перенести состояние в бакет, а блокировки - в YDB.
- Инициализировать Terraform в каталоге
- Облако
security
(подробная инструкция)- Создание облака.
- Добавить файл с описанием облака (например,
cloud_security.tf
) в в каталог0-bootstrap
. - Учетные записи (Yandex ID) будущих администраторов облака
security
задать в переменнойsecurity_cloud_admins
. - Применить конфигурацию из каталога
0-bootstrap
.
- Добавить файл с описанием облака (например,
- Наполнение облака.
- Применить конфигурацию из каталога
1-security
. Выполнять от имени учетной записи или сервисного акаунта, входящих в группу владельцев облакаsecurity
.
- Применить конфигурацию из каталога
- Создание облака.
- Облако
workload
(подробная инструкция)- Создание облака.
- Добавить файл с описанием облака (например,
cloud_workload.tf
) в в каталог0-bootstrap
. - Учетные записи (Yandex ID) будущих администраторов облака
workload
задать в переменнойworkload_cloud_admins
. - Применить конфигурацию из каталога
0-bootstrap
.
- Добавить файл с описанием облака (например,
- Наполнение облака.
- Применить конфигурацию из каталога
2-workload
. Выполнять от имени учетной записи или сервисного акаунта, входящих в группу владельцев облака.
- Применить конфигурацию из каталога
- Создание облака.
Примечание:
В целях тестирования все операции можно выполнять от учетной записи владельца организации.
0-bootstrap/README.md
1-security/README.md
2-workload/README.md
В модуле создается 3 облака:
-
bootstrap
- минимальный набор ресурсов для обеспечения последующих шагов. Конфигурация хранится в каталоге 0-bootstrap. В этот же каталог добавляются файлы с описанием ресурсов других облаков, для создания которых требуются полномочия уровня организации. -
security
- минимальный набор ресурсов для мониторинга событий безопасности при помощи Audit Trails. Конфигурация хранится в каталоге 1-security. -
workload
- пример облака полезной нагрузки для иллюстрации общего подхода. Конфигурация хранится в каталоге 2-workload.
%%{init: {'theme': 'light'}}%%
sequenceDiagram
autonumber
box rgb(231, 245, 255) 0-bootstrap
participant infra-admin
end
box rgb(235, 251, 238) 1-security
participant sec-admin
end
box rgb(255, 249, 219) 2-workload
participant workload-admin
end
infra-admin-->>infra-admin: terraform apply
sec-admin->>infra-admin: commit 'cloud-secutiry.tf' to '0-bootstrap'
activate infra-admin
infra-admin-->>infra-admin: terraform apply
infra-admin->>sec-admin: Облако 'security' создано
deactivate infra-admin
sec-admin-->>sec-admin: terraform apply
workload-admin->>infra-admin: commit 'cloud-workload.tf' to '0-bootstrap'
activate infra-admin
infra-admin-->>infra-admin: terraform apply
infra-admin->>workload-admin: Облако 'workload' создано
deactivate infra-admin
workload-admin-->>workload-admin: terraform apply
Роли:
- Администратор инфраструктуры (infra-admin)
- Администратор безопасности (sec-admin)
- Владелец полезной нагрузки (workload-admin)
Процесс:
- Администратор инфраструктуры (infra-admin) применяет конфигурацию в каталоге
0-bootstrap
. - Администратор безопасности (sec-admin)
- описывает облако
security
и отдельные ресурсы, требующие для создания привелегий уровня организации, в одном файле (в нашем примере - cloud_security.tf). - передает файл администратору инфраструктуры непосредственно или через репозиторий системы контроля версий.
- описывает облако
- infra-admin проверяет описание облака на соответствие принятым в организации требованиям, сохраняет файл, полученный от sec-admin, в каталог 0-bootstrap и применяет обновленную конфигурацию в
0-bootstrap
. - infra-admin информирует sec-admin о создании облака
security
. - sec-admin применяет локальную конфигурацию для создания дополнительных ресурсов, не требующих привелегий уровня организаии.
- Владелец полезной нагрузки (workload-admin)
- описывает облако
workload
и отдельные ресурсы, требующие для создания привелегий уровня организации, в одном файле (в нашем примере - cloud_workload.tf). - передает файл администратору инфраструктуры непосредственно или через репозиторий системы контроля версий.
- описывает облако
- infra-admin проверяет описание облака на соответствие принятым в организации требованиям, сохраняет файл, полученный от workload-admin, в каталог 0-bootstrap и применяет обновленную конфигурацию в
0-bootstrap
. - infra-admin информирует workload-admin о создании облака
workload
. - workload-admin владелец полезной нагрузки управляет своим облаком предпочтительным для него способом (консоль, SDK, Terraform и т.п.). В нашем примере - это применение конфигурации из каталога 2-workload. Возможно делегирование ролей другим субъектам (пользователям, сервисным акаунтам).
Важно: при использовании Terraform администраторы облаков сами управляют хранением состояния своих конфигураций (terraform state).
Footnotes
-
под полезной нагрузкой (workload) здесь и далее понимается конфигурация, создаваемая для решения практических задач, например, облако для окружения "dev", "stage", "prod" для разработки, тестирования и размещения прикладного ПО. Полезных нагрузок может быть множество. С точки зрения базовой инфраструктуры, полезная нагрузка - это облако, которое необходимо создать (в общем случае - пустое). ↩