Stronghold поддерживает автоматическое распечатывание и защиту root-ключа с помощью Yandex Cloud KMS. Для интеграции с Yandex Cloud KMS используется блок конфигурации seal "yandexcloudkms".

В текущей версии работа с seal "yandexcloudkms" поддерживается только при standalone-установке Stronghold.

Из внешних облачных KMS Stronghold поддерживает только Yandex Cloud KMS. Конфигурации awskms и gcpckms не поддерживаются.

Возможности Yandex Cloud KMS

Конфигурация seal "yandexcloudkms" позволяет:

  • использовать Yandex Cloud KMS для шифрования и расшифровки данных, связанных с root-ключом;
  • автоматически распечатывать Stronghold после перезапуска без ручного ввода unseal-ключей;
  • использовать внешний KMS вместо локально управляемого ключевого материала.

Если в конфигурации используется двойное шифрование, Yandex Cloud KMS должен быть доступен не только во время распечатывания, но и в процессе работы Stronghold.

Пример конфигурации

seal "yandexcloudkms" {
  kms_key_id = "abj1abc23def456ghi78"
  oauth_token = "y0_AQAAAA..."
}

Пример с использованием сервисного аккаунта:

seal "yandexcloudkms" {
  kms_key_id = "abj1abc23def456ghi78"
  service_account_key_file = "/etc/stronghold/yc-sa-key.json"
}

Параметры конфигурации Yandex Cloud KMS

ПараметрОбязательныйОписание
kms_key_idДаИдентификатор симметричного ключа в Yandex Cloud KMS
oauth_tokenНетOAuth-токен для аутентификации в Yandex Cloud. Нельзя указывать одновременно с service_account_key_file
service_account_key_fileНетПуть к JSON-файлу авторизованного ключа сервисного аккаунта. Нельзя указывать одновременно с oauth_token
endpointНетКастомный эндпоинт API Yandex Cloud. Если параметр не задан, используется стандартный эндпоинт Yandex Cloud SDK
disabledНетИспользуется при миграции с одного seal-механизма на другой

Если параметры oauth_token и service_account_key_file не заданы, Stronghold пытается выполнить аутентификацию с помощью сервисного аккаунта виртуальной машины через metadata service.

Порядок выбора учётных данных

Для Yandex Cloud KMS используется следующий порядок при выборе учётных данных для аутентификации:

  1. Значения из переменных окружения.
  2. Значения из конфигурационного файла Stronghold.
  3. Сервисный аккаунт виртуальной машины в Yandex Cloud.

Таким образом, у переменных окружения есть приоритет над параметрами в блоке seal "yandexcloudkms".

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

Поддерживаются следующие переменные окружения:

  • YANDEXCLOUD_KMS_KEY_ID;
  • YANDEXCLOUD_OAUTH_TOKEN;
  • YANDEXCLOUD_SERVICE_ACCOUNT_KEY_FILE;
  • YANDEXCLOUD_ENDPOINT.

Их можно использовать вместо соответствующих параметров в конфигурационном файле или вместе с ним, если это соответствует вашей операционной модели.

Требования к доступу

При инициализации Stronghold проверяет, что указанный ключ существует и что у приложения есть право выполнять операции шифрования.

Для работы конфигурации seal "yandexcloudkms" необходимо:

  • существование симметричного ключа в Yandex Cloud KMS;
  • наличие прав на шифрование и расшифровку этим ключом;
  • корректная аутентификация через OAuth-токен, ключ сервисного аккаунта или сервисный аккаунт виртуальной машины.

Рекомендации

  • Для production-сред используйте сервисный аккаунт виртуальной машины или сервисный аккаунт с минимально необходимыми правами.
  • При ротации ключей KMS заранее проверяйте процедуру rewrap и доступность старых версий ключевого материала.
  • Если вы используете двойное шифрование, учитывайте влияние доступности Yandex Cloud KMS на runtime-операции Stronghold.

Дополнительные ресурсы