Установка 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 и нажмите кнопку Перейти к установке.
- Задайте настройки приложения:
- Пространство имен — создайте новое пространство имен (например,
hashicorp-vault-space
). Если вы оставите пространство имен по умолчанию, HashiCorp Vault может работать некорректно. - Название приложения — укажите название приложения.
- Ключ сервисной учетной записи для 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. Если вы укажете пространство имен по умолчанию, HashiCorp Vault может работать некорректно. Рекомендуем указывать значение, отличное от всех существующих пространств имен (например,hashicorp-vault-space
).<идентификатор_ключа_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