epparfenov 768292e056 Lockbox scenarious v2 1 år sedan
..
00-provider.tf 768292e056 Lockbox scenarious v2 1 år sedan
01-vpc.tf 768292e056 Lockbox scenarious v2 1 år sedan
02-service-account.tf 768292e056 Lockbox scenarious v2 1 år sedan
03-kms-and-ssh-keys.tf 768292e056 Lockbox scenarious v2 1 år sedan
04-lockbox-secret.tf 768292e056 Lockbox scenarious v2 1 år sedan
05-postgres.tf 768292e056 Lockbox scenarious v2 1 år sedan
06-kc-vm.tf 768292e056 Lockbox scenarious v2 1 år sedan
README.md 768292e056 Lockbox scenarious v2 1 år sedan
kc-install.yml 768292e056 Lockbox scenarious v2 1 år sedan
openssl.cnf 72906bc002 moved all secret management solutions to encrypt_and_keys/manage_secrets and added password solution for Windows VM 1 år sedan
terraform.tfvars.example 768292e056 Lockbox scenarious v2 1 år sedan
variables.tf 768292e056 Lockbox scenarious v2 1 år sedan

README.md

Yandex Cloud Lockbox password solution.

Сценарий для развертывания IdP KeyCloak с хранением и получением пар логин/пароль в Yandex Cloud Lockbox.

Проблематика

При запуске KeyCloak на ВМ как сервис, в конфигурацию /lib/systemd/system/keycloak.service необходимо прописывать логин и пароль в базе данных и логин с паролем администратора в явном виде. При обычном развертывании таких сценариев, приходится передавать секреты в user-data так же в явном виде.

Решение

Назначенный на виртуальную машину сервисный аккаунт может аутентифицироваться и авторизоваться в IAM изнутри гостевой ОС по упрощенной схеме. Т.е. достаточно просто получить IAM-токен через yc cli или REST API, не передавая никакой информации о субъекте. Это дает возможность при минимально необходимых правах безопасно передать в гостевую ОС пару ключ/значение (секретная часть) из Lockbox с помощью сервисного аккаунта.

Безопасная конфигурация

solution_schema

  1. Сервисный аккаунт обращается к секрету Lockbox через REST
  2. Lockbox проверяет права на секрет и на ключ, расшифровывает секрет
  3. В гостевую ОС возвращается JSON с секретом

После применения сценария развертывания скрипт удаляет все промежуточные файлы с секретами и удаляет сервисный аккаунт.

Настройка окружения

Предполагаем, что у вас уже есть доступ в Yandex Cloud, вы знаете идентификатор своего облака (cloud-id) и идентификатор каталога (folder-id) в вашем облаке где будут создаваться облачные ресурсы.

Установка YC CLI

Для развёртывания рабочего окружения установим инструмент Yandex Cloud CLI (yc) на свой компьютер (подробная инструкция).

Установка git

Для загрузки рецепта Terraform установите git по инструкции.

Установка Terraform

Установите инструмент 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/*/*"]
    }
  }

Подключение к Web консоли облака

Подключение к Web консоли облака с помощью Яндекс ID (Option A)

  • Откроем в новой вкладке браузера консоль облака и, слева внизу, выберем Учетная запись и выйдем из всех текущих аккаунтов облака. В результате на экране должна показаться страница с кнопкой Войти в аккаунт на Яндексе. Закроем эту страницу.
  • Откроем в новой вкладке ссылку где будет предложено авторизоваться в Яндекс ID
  • Введём имя и пароль пользователя для учётной записи Яндекс ID, после чего произойдёт перенаправление в консоль Yandex Cloud
  • Перейдём по ссылке для получения OAuth Token. Значение token будет выглядеть примерно так AQAAAAAABQ0pAATrwPdubkJPerC4mJyaRELWbUY
  • Сохраним полученное значение Token в переменной окружения (для Windows – PowerShell, MacOS и Linux – bash)

Windows:

$env:YC_TOKEN="<ваш OAuth Token>"

MacOS и Linux:

export YC_TOKEN=<ваш OAuth Token>

Создадим профиль в yc для работы с облаком

Настройка профиля yc в MacOS и Linux:

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 в Windows:

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> нужно указать идентификатор каталога в облаке. Идентификаторы можно получить из консоли облака через веб интерфейс.

Подключение к Web консоли облака с помощью Федерации удостоверений сервиса Организации (Option B)

  • Создадим профиль в 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.

Загрузка сценария Terraform

git clone https://github.com/Sayanaro/YandexCloud-Security-Course-KeyCloackVersion.git
cd YandexCloud-Security-Course-KeyCloackVersion

Развёртывание рабочей среды с помощью Terraform

Имена виртуальных машин, домена, и пользователей задаются переменными в файле terraform.tfvars. Остальные переменные заданы в файле variables.tf в параметрах по умолчанию.

Для начала зададим переменные окружения:

Еслим вы используете учетную запись Яндекс ID:

Windows:

  • Запустите консоль PowerShell
  • Выполните: 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)

MacOS/Linux:

  • Запустите консоль bash
  • Выполните: 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)

Еслим вы используете федеративную учетную запись:

Windows:

  • Запустите консоль PowerShell
  • Выполните: 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)

MacOS/Linux:

  • Запустите консоль bash
  • Выполните: 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

keycloak:

ssh ubuntu@ -i pt_key.pem