Seal и unseal: запечатывание Vault
Почему свежезапущенный Vault бесполезен, пока его не «распечатали», и что физически при этом происходит.
Seal/unseal — механизм, при котором Vault стартует в запечатанном состоянии (не может расшифровать данные) и переходит в рабочее только после восстановления мастер-ключа.
Представьте сейф с двойным замком. Внутренний замок (ключ шифрования) открывает данные, но сам он заперт во внешнем замке (мастер-ключ). Когда Vault останавливается, мастер-ключ забывается из памяти — сейф запечатан. Чтобы снова открыть, мастер-ключ нужно ввести заново.
Иерархия ключей
[ unseal-ключи / KMS ]
| восстанавливают
v
[ Мастер-ключ (master key) ]
| расшифровывает
v
[ Ключ шифрования (encryption key) ]
| шифрует/расшифровывает
v
[ Данные в storage backend ]
Мастер-ключ никогда не пишется на диск. Он существует только в оперативной памяти запущенного и распечатанного Vault. Поэтому любая остановка процесса автоматически запечатывает Vault — это свойство безопасности, а не баг.
Что значит запечатанный Vault
В sealed-состоянии Vault принимает соединения, но почти все операции запрещены: он не знает ключ шифрования и физически не может прочитать ни один секрет. Доступны только статус и команды распечатывания.
vault status
Вывод:
Key Value --- ----- Seal Type shamir Initialized true Sealed true Total Shares 5 Threshold 3 Unseal Progress 0/3
Поле Sealed: true означает, что ключ ещё не собран. Unseal Progress 0/3 подсказывает: нужно ввести 3 части ключа.
Как работает распечатывание
Распечатывание — это пошаговый ввод unseal-ключей. Каждый ввод — отдельная команда, и каждый держатель ключа вводит свою часть. Когда набирается порог, Vault восстанавливает мастер-ключ в памяти и открывает барьер.
vault operator unseal # вводит 1-ю часть
vault operator unseal # вводит 2-ю часть
vault operator unseal # вводит 3-ю часть -> Vault распечатан
После третьей части vault status покажет Sealed: false, и Vault начнёт обслуживать запросы.
Зачем вообще запечатывать
Sealed-состояние — это защита на случай кражи. Если злоумышленник украл сервер или сделал снапшот диска, он получит запечатанный Vault, бесполезный без unseal-ключей, которые хранятся отдельно и у разных людей. Это же позволяет аварийно «закрыть» Vault командой vault operator seal при подозрении на инцидент.
Частые ошибки
- Хранить unseal-ключи рядом с Vault — теряется весь смысл запечатывания.
- Удивляться, что после рестарта Vault не работает — это норма, его надо распечатать (или настроить авто-unseal).
- Путать unseal с логином — распечатывание открывает сервер целиком, а логин даёт токен конкретному клиенту.
Итог
- Vault стартует запечатанным и не может читать секреты, пока не восстановлен мастер-ключ.
- Мастер-ключ живёт только в памяти и забывается при остановке — это защита от кражи диска.
- Распечатывание — пошаговый ввод unseal-ключей до достижения порога.