epparfenov 768292e056 Lockbox scenarious v2 | 1 år sedan | |
---|---|---|
.. | ||
00-provider.tf | 1 år sedan | |
01-vpc.tf | 1 år sedan | |
02-service-account.tf | 1 år sedan | |
03-kms-and-ssh-keys.tf | 1 år sedan | |
04-lockbox-secret.tf | 1 år sedan | |
05-postgres.tf | 1 år sedan | |
06-kc-vm.tf | 1 år sedan | |
README.md | 1 år sedan | |
kc-install.yml | 1 år sedan | |
openssl.cnf | 1 år sedan | |
terraform.tfvars.example | 1 år sedan | |
variables.tf | 1 år sedan |
Сценарий для развертывания IdP KeyCloak с хранением и получением пар логин/пароль в Yandex Cloud Lockbox.
При запуске KeyCloak на ВМ как сервис, в конфигурацию /lib/systemd/system/keycloak.service необходимо прописывать логин и пароль в базе данных и логин с паролем администратора в явном виде. При обычном развертывании таких сценариев, приходится передавать секреты в user-data так же в явном виде.
Назначенный на виртуальную машину сервисный аккаунт может аутентифицироваться и авторизоваться в IAM изнутри гостевой ОС по упрощенной схеме. Т.е. достаточно просто получить IAM-токен через yc cli или REST API, не передавая никакой информации о субъекте. Это дает возможность при минимально необходимых правах безопасно передать в гостевую ОС пару ключ/значение (секретная часть) из Lockbox с помощью сервисного аккаунта.
После применения сценария развертывания скрипт удаляет все промежуточные файлы с секретами и удаляет сервисный аккаунт.
Предполагаем, что у вас уже есть доступ в Yandex Cloud, вы знаете идентификатор своего облака (cloud-id
) и идентификатор каталога (folder-id
) в вашем облаке где будут создаваться облачные ресурсы.
Для развёртывания рабочего окружения установим инструмент Yandex Cloud CLI (yc)
на свой компьютер (подробная инструкция).
Для загрузки рецепта Terraform установите git по инструкции.
Установите инструмент Terraform
на свой компьютер (если он уже не установлен) по (инструкции).
### Установка Terraform для Windows:
Распакуйте архив и скопируйте файл terraform.exe в каталог C:\Windows\System32
Для корректной установки всех необходимых ресурсов Terraform создайте в домашнем каталоге (/home/<username>
- для MacOS и Linux, C:\Users\Administrator\AppData\Roaming
- для Windows) файл .terraformrc
(для Windows terraform.rc
) с содержимым:
provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
Учетная запись
и выйдем из всех текущих аккаунтов облака. В результате на экране должна показаться страница с кнопкой Войти в аккаунт на Яндексе
. Закроем эту страницу.AQAAAAAABQ0pAATrwPdubkJPerC4mJyaRELWbUY
$env:YC_TOKEN="<ваш OAuth Token>"
export YC_TOKEN=<ваш OAuth Token>
Создадим профиль в yc для работы с облаком
yc config profile create lockbox
yc config set cloud-id <cloud-id>
yc config set folder-id <folder-id>
yc config set token $YC_TOKEN
yc config profile create lockbox
yc config set cloud-id <cloud-id>
yc config set folder-id <folder-id>
yc config set token $env:YC_TOKEN
где вместо <cloud-id>
нужно указать идентификатор своего облака, а вместо <folder-id>
нужно указать идентификатор каталога в облаке. Идентификаторы можно получить из консоли облака через веб интерфейс.
yc
для работы с облаком
bash
yc config profile create lockbox
yc config set cloud-id <cloud-id>
yc config set folder-id <folder-id>
yc config set federation-id <federation-id>
где вместо <cloud-id> нужно указать идентификатор своего облака, например, b1g8d7gjpvedf23hg3sv
, вместо <folder-id> нужно указать идентификатор каталога в облаке, например, b1guv7crr32qfgiimxwp
, а вместо <federation-id> нужно указать идентификатор федерации, например, yc.your-org-name.federation
. Идентификаторы можно получить из консоли облака через веб интерфейс в разделе сервиса Organizations.git clone https://github.com/Sayanaro/YandexCloud-Security-Course-KeyCloackVersion.git
cd YandexCloud-Security-Course-KeyCloackVersion
Имена виртуальных машин, домена, и пользователей задаются переменными в файле terraform.tfvars
. Остальные переменные заданы в файле variables.tf
в параметрах по умолчанию.
Для начала зададим переменные окружения:
PowerShell
yc config profile activate security
$env:YC_TOKEN = "ваш OAuth токен"
$env:YC_CLOUD_ID=$(yc config get cloud-id)
$env:YC_FOLDER_ID=$(yc config get folder-id)
bash
yc config profile activate security
export YC_TOKEN="ваш OAuth токен"
export YC_CLOUD_ID=$(yc config get cloud-id)
export YC_FOLDER_ID=$(yc config get folder-id)
PowerShell
yc config profile activate security
$env:YC_TOKEN = $(yc iam create token)
$env:YC_CLOUD_ID=$(yc config get cloud-id)
$env:YC_FOLDER_ID=$(yc config get folder-id)
bash
yc config profile activate security
export YC_TOKEN=$(yc iam create token)
export YC_CLOUD_ID=$(yc config get cloud-id)
export YC_FOLDER_ID=$(yc config get folder-id)
Инициализируйте Terraform:
terraform init
terraform apply
Сценарий попросит ввести 2 пароля: администратора и администратора базы данных PostgreSQL. Паролb должны быть не менее 8 символов, содержать строчные и заглавные буквы, минимум одну цифру 0-9 и минимум один спецсимвол (@#$%&*/:;"'\,.?+=-_).
Спустя 4 минуты после завершения сценария сервер будет настроен и готов к работе.
```bash
ssh ubuntu@ -i pt_key.pem