ADR-005: Pluggable KMS
Status: Accepted · Date: 2026-07-03
Контекст
Section titled “Контекст”Чувствительные поля БД шифруются envelope-паттерном; DEK-и оборачиваются корневым ключом. Вопрос — где живёт корень. Предыдущий дизайн требовал HashiCorp Vault Transit безальтернативно.
Решение
Section titled “Решение”Корень — интерфейс KMSProvider (Wrap/Unwrap) с двумя реализациями: локальный 32-байтный ключ в файле (по умолчанию) и Vault Transit (опция). Схема данных (data_keys.kms_key_version) одинакова для обоих. См. Шифрование.
Отклонённые альтернативы
Section titled “Отклонённые альтернативы”Обязательный Vault: криптографически сильнее (ключ не покидает Vault, автотротация, аудит обращений), но нереалистичен для целевого пользователя — второй stateful-сервис с процедурой unseal ради одного ключа поднимает порог входа self-hosted-инсталляции непропорционально угрозе.
Только локальный ключ: закрывает путь инсталляциям, где Vault уже есть и его гарантии нужны.
Последствия
Section titled “Последствия”- (+) Порог входа — один файл ключа; предупреждение о бэкапе — в документации установки.
- (+) Апгрейд до Vault — смена провайдера +
rewrapDEK-ов, без перешифровки данных. - (−) Дефолтная инсталляция защищена ровно настолько, насколько защищён файл ключа; это честно задокументировано.