“Alexander 4d1dce2ca7 Change repo location. | 1 年之前 | |
---|---|---|
.. | ||
examples | 1 年之前 | |
keycloak-config | 1 年之前 | |
keycloak-deploy | 1 年之前 | |
README.md | 1 年之前 | |
solution.png | 1 年之前 |
Для предоставления доступа корпоративным пользователям к облачным ресурсам в Yandex Cloud используются:
Организация
является контейнером для пользователей. В организацию пользователи добавляются и удаляются.
idP
выполняет функцию аутентификации и обычно интегрируется с хранилищем учетных данных пользователей, например, MS Active Directory, база данных и т.п.
Федерация удостоверений
выступает посредником между сервисом организации и IdP
. С помощью федерации учетные записи пользователей из IdP
синхронизируются в организацию Yandex Cloud.
После успешной синхронизации учетных записей пользователей в организацию, им можно назначать роли (выдавать права) на различные облачные объекты. В Yandex Cloud поддерживаются федерации удостоверений на базе стандарта SAML v2.0.
В данном решении аутентификация
пользователя реализована так:
https://console.yandex.ru/federations/bpf3375ucdgp5dxq823tt
.IdP
, который развёртывается в виде виртуальной машины (ВМ) с решением Keycloak.IdP
пользователь видит форму для аутентификации - ввода имени и пароля.idP
проверяет учетные данные пользователя и в случае их успешной проверки возвращает пользователя в консоль Yandex Cloud уже аутентифицированным.Авторизация
(проверка полномочий) пользователя на облачные ресурсы будет выполняться на стороне Yandex Cloud.Обобщенная архитектура решения показана на рисунке ниже.
В данном решение IdP
развёртывается в виде виртуальной машины с Keycloak.
Данное решение реализовано в виде двух Terraform модулей:
Разбиение решения на два модуля вызвано тем, что Keycloak Terraform провайдер требует уже работающего (alive) Keycloak.
Модуль keycloak-deploy
создаёт следующие объекты в Yandex Cloud:
С полным списком входных параметров модуля можно ознакомиться по ссылке.
После завершения своей работы модуль возвращает значение FQDN
для ВМ с развёрнутым решением Keycloak, например, kc1.mydom.net
Модуль keycloak-config
выполняет следующие действия:
С полным списком входных параметров модуля можно ознакомиться по ссылке.
После завершения своей работы модуль возвращает значение URL
федерации удостоверений, например, https://console.yandex.ru/federations/bpf3375ucdgp5dxq823tt
Модуль keycloak-config
использует часть входных и выходных данных модуля keycloak-deploy
.
Развёртывание решения требует последовательного запуска сначала модуля keycloak-deploy
, а затем модуля keycloak-config
.
Для исключения ошибок при ручном переносе данных из одного модуля в другой рекомендуется использовать скрипт sync.sh, который синхронизирует нужные данные из модуля keycloak-deploy
в модуль keycloak-config
.
Решение должно развёртываться в уже подготовленной инфраструктуре Yandex Cloud.
Значения параметров инфраструктуры должны передаваться в TF модули
решения в виде входных переменных.
Перед развёртывание решения в Yandex Cloud уже должны существовать следующие объекты:
kc_folder_name
)делегирован
со стороны регистратора домена (dns_zone_name
)kc_network_name
)kc_subnet_name
)В списке выше в круглых скобках указаны имена входных переменных для развёртывания из keycloak-deploy.
Развёртывание решения предполагается под управлением ОС Linux
или MacOS
.
Развёртывание решения под управлением ОС Windows
не тестировалось.
Загрузить решение из репозитория на github.com:
curl -s https://raw.githubusercontent.com/yandex-cloud/yc-solution-library-for-security/master/auth_and_access/keycloak/examples/install.sh | bash
Перейти в папку с примером развёртывания модуля keycloak-deploy:
cd keycloak/keycloak-deploy
pwd
Важно!
Убедиться что все внешние зависимости созданы.
Проверить значения переменных в файле main.tf и скорректировать их при необходимости.
Выполнить инициализацию Terraform:
source ../env-yc.sh
terraform init
Выполнить развёртывание keycloak-deploy
:
terraform apply
Обработка запроса на выдачу сертификата в сервисе Let's Encrypt может выполняться до 30 минут
!
Опционально. Проверить состояние выданного сертификата Let's Encrypt:
yc cm certificate list
Перейти в папку с примером развёртывания модуля keycloak-config:
cd ../keycloak-config
pwd
Выполнить синхронизацию параметров между TF модулями:
bash sync.sh
Проверить значения переменных в файле main.tf и скорректировать их при необходимости.
Выполнить инициализацию Terraform:
terraform init
Выполнить развёртывание keycloak-config
:
terraform apply
Опционально. Проверить наличие тестовой учётной записи Keycloak в организации Yandex Cloud с помощью yc CLI
:
ORG_ID=$(cat terraform.tfstate | jq -r '.resources[] | select(.type == ('\"yandex_organizationmanager_saml_federation\"')) | .instances[0].attributes.organization_id')
yc organization-manager user list --organization-id=$ORG_ID
В результате развёртывания решения в Yandex Cloud будут созданы следующие объекты:
сертификат
Let's Encrypt для ВМ с Keycloak в сервисе Certificate Managerвиртуальная машина
с IdP Keycloak интегрированная с федерацией на стороне Yandex Cloudзапись в Yandex Cloud DNS
с публичным IP-адресом ВМ Keycloakучётная запись
пользователя в IdP Keycloak и её синхронизация в организации Yandex CloudПосле развёртывания решения останется выдать необходимые роли на нужные облачные ресурсы для созданной в организации учётной записи пользователя.