Облачная платформаEvolution

Настроить автоматическое распечатывание HashiCorp Vault


HashiCorp Vault поддерживает автоматическое распечатывание (auto-unseal) с помощью внешнего сервиса шифрования — механизма seal "transit". Key Management предоставляет совместимый с ним API, поэтому корневой ключ Vault можно защитить ключом Key Management. Настройка одинакова для любой инсталляции Vault: на виртуальной машине, в Docker, в Kubernetes или в Container Apps.

В режиме автоматического распечатывания корневой ключ Vault зашифровывается с помощью ключа Key Management и содержится в своем хранилище. При каждом запуске Vault отправляет зашифрованный корневой ключ в Key Management и получает его расшифрованным. Ключ Key Management не покидает сервис, а каждое обращение к нему записывается в аудит-лог.

Пример развертывания Vault с автоматическим распечатыванием приведен в практическом руководстве «Автоматическое распечатывание HashiCorp Vault в Container Apps с помощью Key Management».

Внимание

Vault не сможет запуститься, если ключ Key Management деактивирован или недоступен.

Если ключ удален, корневой ключ Vault нельзя расшифровать. Данные Vault будут потеряны без возможности восстановления.

Основные способы распечатывания Vault:

Способ распечатывания

Что происходит после перезапуска

Где находится ключ распечатывания

Ручной ввод долей ключа (Shamir)

Vault остается запечатанным, пока администраторы не введут доли ключа. Приложения, которые получают секреты из Vault, недоступны

У администраторов, вне инфраструктуры

С помощью скрипта, который вводит доли ключа автоматически

Vault автоматически распечатывается

В открытом виде рядом с Vault: в файле, переменной окружения, CI/CD или резервной копии. Пользователь с доступом к этим ресурсам получает доступ ко всем секретам

Auto-unseal с помощью Key Management

Vault автоматически распечатывается

В Key Management. Ключ не покидает сервис, Vault только отправляет запросы на шифрование и расшифровку

Перед началом работы

  1. Создайте симметричный ключ для распечатывания Vault.

  2. Создайте сервисный аккаунт, от имени которого Vault будет обращаться к Key Management.

  3. Выпустите API-ключ для сервисного аккаунта: в поле Сервисы выберите Key Management.

  4. Выдайте сервисному аккаунту роль sckm.user на ключ:

    1. В карточке ключа перейдите в раздел Права доступа.

    2. Нажмите Назначить роли.

    3. Выберите сервисный аккаунт.

    4. Нажмите Продолжить.

    5. Выберите роль sckm.user.

    6. Нажмите Назначить.

    Роль позволяет зашифровывать и расшифровывать данные ключом, но не управлять им.

  5. Скопируйте идентификатор проекта, в котором создан ключ.

Настроить конфигурацию Vault

  1. Добавьте в файл конфигурации Vault блок seal "transit":

    seal "transit" {
    address = "https://kms.api.cloud.ru"
    mount_path = "<project_id>"
    key_name = "<key_name>"
    disable_renewal = "true"
    }

    Где:

    • address — адрес API Key Management.

    • mount_path — идентификатор проекта, в котором создан ключ.

    • key_name — название ключа Key Management.

    • disable_renewal — отключение продления токена. Key Management не поддерживает продление токена, поэтому укажите true.

  2. Передайте API-ключ сервисного аккаунта процессу Vault в переменной окружения VAULT_TOKEN.

    Внимание

    Не указывайте API-ключ в файле конфигурации в параметре token — ключ распечатывания окажется в открытом виде рядом с Vault. Храните API-ключ в Secret Management.

Параметры mount_path и key_name также можно передать в переменных окружения. Значения переменных окружения имеют приоритет над файлом конфигурации.

Переменная окружения

Параметр в блоке seal "transit"

VAULT_TRANSIT_SEAL_MOUNT_PATH

mount_path

VAULT_TRANSIT_SEAL_KEY_NAME

key_name

VAULT_TRANSIT_SEAL_DISABLE_RENEWAL

disable_renewal

VAULT_TOKEN

token

Инициализировать Vault

  1. Запустите Vault с новой конфигурацией.

  2. Инициализируйте Vault:

    vault operator init -recovery-shares=5 -recovery-threshold=3

    При автоматическом распечатывании Vault выдаст ключи восстановления (recovery keys) вместо ключей распечатывания. Ключи восстановления нужны для административных операций, например для выпуска нового root-токена, но не для распечатывания.

  3. Сохраните ключи восстановления и root-токен в надежном месте.

Примечание

Если Vault уже инициализирован и распечатывается вручную долями ключа, повторная инициализация не нужна. Выполните миграцию механизма распечатывания по инструкции Seal migration.

Проверить результат

  1. Перезапустите Vault.

  2. Выполните команду:

    vault status

    Vault распечатается автоматически, если в выводе команды будут указаны значения:

    Seal Type transit
    Recovery Seal true
    Initialized true
    Sealed false
  3. В сервисе Аудит-логирование найдите обращение Vault к ключу — отфильтруйте события по сервису-источнику Key Management и типу события AccessKey.

При запуске Vault в событии будет указана операция "operation": "DECRYPT", а в качестве инициатора — сервисный аккаунт, от имени которого работает Vault.