Установка 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
сервисному аккаунту, созданному ранее: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
Важно
При установке продукта HashiCorp Vault с поддержкой Key Management Service с помощью Cloud Marketplace будет задействован механизм доставки секретов Agent injector
- Перейдите на страницу каталога
и выберите сервис 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.8.0. -
Установите kubectl
и настройте его на работу с созданным кластером. -
Для установки Helm-чарта
с HashiCorp Vault выполните команду:cat <путь_к_файлу_с_авторизованным_ключом> | helm registry login cr.yandex \ --username 'json_key' \ --password-stdin && \ helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/vault/chart/vault \ --version 0.28.1+yckms \ --untar && \ helm install \ --namespace <пространство_имен> \ --create-namespace \ --set-file yandexKmsAuthJson=<путь_к_файлу_с_авторизованным_ключом> \ --set yandexKmsKeyId=<идентификатор_ключа_KMS> \ hashicorp ./vault/
Примечание
Если вы используете версию Helm ниже 3.8.0, добавьте в начало команды строку
export HELM_EXPERIMENTAL_OCI=1 && \
, чтобы включить поддержку Open Container Initiative (OCI) в клиенте Helm.Параметры команды:
<путь_к_файлу_с_авторизованным_ключом>
— путь к файлуauthorized-key.json
, сохраненному ранее.<пространство_имен>
— новое пространство имен, которое будет создано для работы HashiCorp Vault.<идентификатор_ключа_KMS>
— полученный ранее идентификатор ключа Key Management Service.
В результате выполнения команды в кластер будет установлен продукт HashiCorp Vault с поддержкой KMS с механизмом доставки секретов Agent injector
. Чтобы задействовать альтернативный механизм Vault CSI provider , дополните команду следующими параметрами:--set "injector.enabled=false" \ --set "csi.enabled=true"
Подробнее об отличиях этих механизмов см. в документации Hashicorp
.
Инициализация хранилища
После установки HashiCorp Vault необходимо инициализировать один из его серверов. Процесс инициализации генерирует учетные данные, необходимые для распечатывания (unseal)
Примечание
При инициализации выполнять операцию unseal
не нужно — образ приложения интегрирован с Key Management Service.
Подробнее см. на странице Auto Unseal и в документации HashiCorp Vault
Чтобы инициализировать хранилище:
-
Убедитесь, что приложение перешло в состояние
Running
и имеет0/1
готовых подов:kubectl get pods \ --namespace=<пространство_имен> \ --selector='app.kubernetes.io/name=vault'
Результат:
NAME READY STATUS RESTARTS AGE <имя_пода_vault> 0/1 Running 0 58s
-
Выполните инициализацию хранилища:
kubectl exec \ --namespace=<пространство_имен> \ --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 \ --namespace=<пространство_имен> \ --selector='app.kubernetes.io/name=vault'
Результат:
NAME READY STATUS RESTARTS AGE vault-yckms-k8s-0 1/1 Running 0 5m