Andrey Lavretsky 7bc535c90c add scrips folder and change desc for group solution | 2 سال پیش | |
---|---|---|
.. | ||
cloud-level-state | 2 سال پیش | |
images | 2 سال پیش | |
module_keycloak | 2 سال پیش | |
README.md | 2 سال پیش | |
org_level_clouds_and_fed.tf | 2 سال پیش | |
org_level_folders.tf | 2 سال پیش | |
org_level_grant_viewer.tf | 2 سال پیش | |
org_level_groups_and_users.tf | 2 سال پیش | |
org_level_prepare_users.tf | 2 سال پیش | |
org_level_security_provis.tf | 2 سال پیش | |
provider.tf | 2 سال پیش | |
terraform_tfvars | 2 سال پیش | |
variables.tf | 2 سال پیش |
Version:1.0
Задача: Полное управление организацией через terraform. На каждый проект должно выделяться одно облако с назначенной группой ответственных администраторов за облако. Должно быть отдельное облако security со своей ответственной группой админов. В каждом облаке отдельное управление через TF. Нарезаются dev, non-prod, prod каталоги с разными правами. Управление уровнем организации должно происходить в одном tf state через git, а управление уровнем облаков в своих собственных state также через git.
Summary:
Пререквизиты:
Уровень организации 0) Скачайте репозиторий и перейдите в папку
git clone https://github.com/yandex-cloud/yc-solution-library-for-security.git
cd yc-solution-library-for-security/auth_and_access/org_iac_iam
1) Настроить yc cli 2) Создать руками первое облако cloud-org-admin 3) Укажите в yc cli ваше первое облако
yc config set cloud-id <id облака>
4) Создать в нем каталог org-admin (без default сети)
yc resource-manager folder create --name org-admin
5) Создать руками sa sa-org-admin для управления tf в этом каталоге
yc iam service-account create --name sa-org-admin --folder-name org-admin
6) Убедиться, что в сервисе Cloud DNS папки org-admin уже создана публичная DNS-зона с которой будем работать дальше. Имя этой зоны далее указывается в переменной DNS_ZONE_NAME 7) Перейдите в папку ./module_keycloak . Запускаем kc-users-gen.sh - получаем файл со списком учетных записей пользователей федерации с автогенерированными паролями. Имя файла в переменной kc_user_file. 8) Укажите переменные dns_zone_name, folder_id и kc_fqdn согласно вашим значениям в файле module_keycloak/variables.tf . Это необходимо для генерации сертификата. 9) Запускаем kc-le-cert.sh - получаем Let's Encrypt сертификаты для нужного домена в виде пары .pem файлов. Имена файлов в переменных le_cert_pub_key и le_cert_priv_key соответственно из папки module_keycloak/variables.tf 10) Вернитесь в исходную общую папку. Заполните файл terraform.tfvars !не забудьте поменять имя файла на terrafrom.tfvars 11) Выдать права sa на оргу через cli (пока не поддержана возможность выдачи через UI)
yc organization-manager organization add-access-binding \
--role organization-manager.admin \
--id bpf4c0lctf2t734l95ui \
--service-account-name sa-org-admin
yc organization-manager organization add-access-binding \
--role resource-manager.admin \
--id bpf4c0lctf2t734l95ui \
--service-account-name sa-org-admin
yc organization-manager organization add-access-binding \
--role viewer \
--id bpf4c0lctf2t734l95ui \
--service-account-name sa-org-admin
12) Создать ключ для sa-org-admin
yc iam key create --service-account-name sa-org-admin --output sa-key.json
13) Заполните terraform.tfvars своими значениями
14) Запустить terrafrom init, terrafrom plan, terraform apply
15) Ссылка в консоль UI в созданную федерацию и на idp keycloak будет в output
15) Зайдите в облако security в каталог cloud_admin и создайте Audit Trails согласно инструкции с записью в S3 бакет используя сервисный аккаунт предсозданный . Используйте это решение для создания безопасного s3 бакета
16) Не забудьте подключить s3 remote storage для terraform по инструкции. Также информация есть в вебинаре
17) Также строго рекомендуется поместить tf конфиг в защищенный git репозиторий и управлять выкаткой изменений в state с помощью PR и согласования
18) Передайте ответственному администратору за облако "web-app-project" его логин/пароль и ссылку на вход в федерацию из output вида "https://console.cloud.yandex.ru/federations/bpf3pc05joidt9it7l0m" . Ответственный администратор назначается в группе "web-admin-group-members" в файле org_level_groups_and_users.tf
Уровень облаков 1) Войдите в UI консоль под ответственным администратором за облако "web-app-project" с помощью ссылки в output, например https://console.cloud.yandex.ru/federations/bpf3pc05joidt9it7l0m 2) Настройте yc cli под федеративным пользователем, которого вам выдали согласно инстуркции 3) Создайте новый каталог "network-folder" (уберите галочку создать сеть по умолчанию)
yc resource-manager folder create --name network-folder
4) Создайте в нем сервисный аккаунт "sa-web-app-tf"
yc iam service-account create --name sa-web-app-tf --folder-name network-folder
5) Выдайте ему права "resource-manager.admin" и "viewer" именно на облако web-app-project, а не на каталог
yc resource-manager cloud add-access-binding \
--role resource-manager.admin \
--id <ваш cloud id> \
--service-account-name sa-web-app-tf
yc resource-manager cloud add-access-binding \
--role viewer \
--id <ваш cloud id> \
--service-account-name sa-web-app-tf
6) В основном каталоге данного решения и раскомментируйте строки в файле org_level_grant_viewer.tf (начиная со строки номер 3). Затем запустите еще раз terrafrom plan, terraform apply. Этим вы предоставите сервисной учетной записи sa-web-app-tf роль organization-manager.viewer (необходимо для доступа к данным по группам). 7) Скачайте репозиторий по аналогии с п. 0 организационного уровня выше. Перейдите в папку "/cloud-level-state" 8) Создайте авторизованный ключ
yc iam key create --service-account-name sa-web-app-tf --output sa-key.json
9) Вернитесь в каталог /cloud-level-state. Заполните файл terraform.tfvars своими значениями 10) Запустите terraform init, terraform plan, terrafrom apply 11) Установите managed gitlab в каталоге network-folder и поместите туда terrafrom config и credentials от sa sa-web-app-tf