HA, авто-unseal и продакшн
Что отличает «учебный» Vault от того, на который можно положить продакшн.
High Availability (HA) — режим, в котором несколько узлов Vault образуют кластер: один активный обслуживает запросы, остальные — горячий резерв; авто-unseal убирает ручное распечатывание через облачный KMS.
Vault становится критической зависимостью: если он недоступен, приложения не получают секреты и не стартуют. Поэтому прод требует HA и устранения ручных операций вроде unseal при каждом рестарте.
HA на Integrated Storage (Raft)
Кластер из нечётного числа узлов (обычно 3 или 5) реплицирует данные по протоколу Raft. Один узел — active, остальные — standby. Active обслуживает запросы, standby реплицируют состояние и готовы перехватить лидерство.
клиенты
|
[ active ] <--Raft--> [ standby ]
^ ^
+------Raft----------+
[ standby ]
active упал --> выборы лидера --> standby становится active
При падении active оставшиеся узлы выбирают нового лидера (нужно большинство — кворум), и сервис продолжает работу. Кворум 2 из 3 терпит отказ одного узла.
Авто-unseal через KMS
Ручной unseal тремя ключами при каждом рестарте несовместим с автоматическим масштабированием. Авто-unseal делегирует хранение мастер-ключа облачному KMS: при старте узел сам обращается к KMS, тот расшифровывает корневой ключ — и Vault распечатывается без людей.
seal "awskms" {
region = "eu-central-1"
kms_key_id = "arn:aws:kms:eu-central-1:111:key/abc-123"
}
storage "raft" {
path = "/opt/vault/data"
node_id = "vault-1"
}
Схема Шамира при этом превращается в recovery-ключи: они уже не нужны для повседневного распечатывания, а служат для аварийных операций (например, генерация root-токена).
Как работает под капотом
С авто-unseal иерархия ключей не исчезает — меняется только верхний уровень: вместо ввода unseal-ключей людьми корневой ключ расшифровывает внешний KMS. Это перекладывает доверие на провайдера KMS, но устраняет хрупкую ручную операцию. В Raft-кластере запись идёт только через лидера, который реплицирует журнал на фолловеров; чтение standby-узлы могут отдавать в режиме performance standby. Бэкап делается снапшотом Raft (vault operator raft snapshot save) — это полный, зашифрованный слепок состояния.
Чеклист продакшна
| Требование | Почему |
| 3+ узла Raft | отказоустойчивость и кворум |
| TLS на listener | секреты не ходят по сети открыто |
| авто-unseal (KMS) | рестарт без ручного вмешательства |
| аудит (2 устройства) | журнал без fail-closed-блокировки |
| регулярные снапшоты Raft | восстановление после катастрофы |
| отозванный initial root token | нет всемогущего долгоживущего доступа |
Частые ошибки
- Чётное число узлов (например, 2 или 4) — кворум хуже, нет выигрыша в отказоустойчивости.
- Один узел в проде — единая точка отказа, падение = простой всех приложений.
- Нет снапшотов Raft — потеря данных невосстановима.
- Полагаться на ручной unseal при автоскейлинге — узлы поднимутся запечатанными.
Итог
- HA на Raft: нечётный кластер с active/standby и автоматическими выборами лидера при сбое.
- Авто-unseal через KMS убирает ручное распечатывание; схема Шамира остаётся для recovery.
- Прод требует TLS, аудита, снапшотов и отзыва initial root token.