Установка HashiCorp Vault с поддержкой Key Management Service
HashiCorp Vault
Образ приложения содержит предустановленную сборку HashiCorp Vault, которая при помощи Yandex Key Management Service дополнительно поддерживает Auto Unseal
Чтобы установить HashiCorp Vault:
- Подготовьте все необходимое для начала работы.
- Установите HashiCorp Vault с помощью Yandex Cloud Marketplace или Helm.
- Выполните инициализацию хранилища.
Перед началом работы
Для работы HashiCorp Vault требуется:
- Сервисный аккаунт с ролью
kms.keys.encrypterDecrypter
. - Авторизованный ключ.
- Симметричный ключ шифрования.
-
yc iam service-account create --name vault-kms
-
Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл
authorized-key.json
:yc iam key create \ --service-account-name vault-kms \ --output authorized-key.json
-
Создайте симметричный ключ Key Management Service:
yc kms symmetric-key create \ --name example-key \ --default-algorithm aes-256 \ --rotation-period 24h
Сохраните идентификатор ключа (
id
) — он понадобится при установке приложения. -
Назначьте роль
kms.keys.encrypterDecrypter
ключу Key Management Service:yc resource-manager folder add-access-binding \ --id <идентификатор_каталога> \ --service-account-name vault-kms \ --role kms.keys.encrypterDecrypter
Идентификатор каталога можно получить со списком каталогов.
-
Убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Установите kubectl
и настройте его на работу с созданным кластером.
Установка с помощью Yandex Cloud Marketplace
- Перейдите на страницу каталога
и выберите сервис Managed Service for Kubernetes. - Нажмите на имя нужного кластера Managed Service for Kubernetes и выберите вкладку
Marketplace. - В разделе Доступные для установки приложения выберите HashiCorp Vault с поддержкой Key Management Service и нажмите кнопку Использовать.
- Задайте настройки приложения:
- Пространство имен — выберите пространство имен или создайте новое.
- Название приложения — укажите название приложения.
- Ключ сервисной учетной записи для Vault — скопируйте в это поле содержимое файла
authorized-key.json
. - ID ключа KMS для Vault — укажите полученный ранее идентификатор ключа Key Management Service.
- Нажмите кнопку Установить.
- Дождитесь перехода приложения в статус
Deployed
.
Установка с помощью Helm-чарта
-
Установите менеджер пакетов Helm
версии не ниже 3.7.0. -
Для установки Helm-чарта
с HashiCorp Vault выполните команду:export HELM_EXPERIMENTAL_OCI=1 && \ cat authorized-key.json | helm registry login cr.yandex --username 'json_key' --password-stdin && \ helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/vault/chart/vault \ --version 0.27.0_yckms \ --untar && \ helm install \ --namespace <пространство_имен> \ --create-namespace \ --set-file yandexKmsAuthJson=authorized-key.json \ hashicorp ./vault/
Эта команда также создаст новое пространство имен, необходимое для работы HashiCorp Vault.
Инициализация хранилища
После установки HashiCorp Vault необходимо инициализировать один из его серверов. Процесс инициализации генерирует учетные данные, необходимые для распечатывания (unseal)
Примечание
При инициализации выполнять операцию unseal
не нужно — образ приложения интегрирован с Key Management Service.
Подробнее см. на странице Auto Unseal и в документации HashiCorp Vault
Чтобы инициализировать хранилище:
-
Убедитесь, что приложение перешло в состояние
Running
и имеет0/1
готовых подов:kubectl get pods --selector='app.kubernetes.io/name=vault'
Результат:
NAME READY STATUS RESTARTS AGE <имя_пода_vault> 0/1 Running 0 58s
-
Выполните инициализацию хранилища:
kubectl exec \ --stdin=true \ --tty=true <имя_пода_vault> \ -- vault operator init
Результат:
Recovery Key 1: ulbugw4IKttmCCPprF6JwmUCyx1YfieCQPQi******** Recovery Key 2: S0kcValC6qSfEI4WJBovSbJWZntBUwtTrtis******** Recovery Key 3: t44ZRqbzLZNzfChinZNzLCNnwvFN/R52vbD*/******* ... Recovery key initialized with 5 key shares and a key threshold of 3. Please securely distribute the key shares printed above.
-
Повторно запросите список подов приложения и убедитесь, что готов один под:
kubectl get pods --selector='app.kubernetes.io/name=vault'
Результат:
NAME READY STATUS RESTARTS AGE vault-yckms-k8s-0 1/1 Running 0 5m