Skip to content

ADR-005: Pluggable KMS

Status: Accepted · Date: 2026-07-03

Чувствительные поля БД шифруются envelope-паттерном; DEK-и оборачиваются корневым ключом. Вопрос — где живёт корень. Предыдущий дизайн требовал HashiCorp Vault Transit безальтернативно.

Корень — интерфейс KMSProvider (Wrap/Unwrap) с двумя реализациями: локальный 32-байтный ключ в файле (по умолчанию) и Vault Transit (опция). Схема данных (data_keys.kms_key_version) одинакова для обоих. См. Шифрование.

Отклонённые альтернативы

Section titled “Отклонённые альтернативы”

Обязательный Vault: криптографически сильнее (ключ не покидает Vault, автотротация, аудит обращений), но нереалистичен для целевого пользователя — второй stateful-сервис с процедурой unseal ради одного ключа поднимает порог входа self-hosted-инсталляции непропорционально угрозе.

Только локальный ключ: закрывает путь инсталляциям, где Vault уже есть и его гарантии нужны.

  • (+) Порог входа — один файл ключа; предупреждение о бэкапе — в документации установки.
  • (+) Апгрейд до Vault — смена провайдера + rewrap DEK-ов, без перешифровки данных.
  • (−) Дефолтная инсталляция защищена ровно настолько, насколько защищён файл ключа; это честно задокументировано.