Prod-режим: init и unseal на практике

Поднимаем Vault «по-взрослому»: с конфигом, ручной инициализацией и распечатыванием.

Prod-режим — запуск Vault с явным конфигом storage и listener, требующий ручной инициализации и распечатывания перед работой.

В отличие от dev, здесь Vault стартует пустым и запечатанным. Это правильное состояние: вы сами контролируете, где хранятся данные и кто держит ключи.

Шаг 1. Конфиг и запуск

Создаём vault.hcl с хранилищем Raft и listener'ом:

storage "raft" {
  path    = "/opt/vault/data"
  node_id = "vault-1"
}

listener "tcp" {
  address       = "0.0.0.0:8200"
  tls_cert_file = "/etc/vault/tls/cert.pem"
  tls_key_file  = "/etc/vault/tls/key.pem"
}

api_addr     = "https://vault-1.internal:8200"
cluster_addr = "https://vault-1.internal:8201"
ui           = true
vault server -config=/etc/vault/vault.hcl

Шаг 2. Инициализация

Свежий Vault не инициализирован. Команда operator init создаёт мастер-ключ, разбивает его по схеме Шамира и выдаёт root-токен:

export VAULT_ADDR='https://vault-1.internal:8200'

vault operator init -key-shares=5 -key-threshold=3

Сохраните вывод — пять unseal-ключей и root-токен показываются единственный раз.

Шаг 3. Распечатывание

Сразу после init Vault запечатан. Вводим три части ключа:

vault operator unseal   # часть 1
vault operator unseal   # часть 2
vault operator unseal   # часть 3

vault status            # Sealed: false

Шаг 4. Первый вход

vault login   # вставляем initial root token

Теперь Vault готов. Но прежде чем работать, опытный администратор создаёт обычные admin-учётки и отзывает initial root token — о чём в разделе про токены.

Как работает под капотом

Init — необратимая операция: Vault помечает себя как инициализированный в storage и больше не примет init. Если запустить второй узел кластера Raft, его не инициализируют заново — он присоединяется к существующему и наследует уже созданный мастер-ключ. Распечатывать при этом нужно каждый узел (или настроить авто-unseal).

Частые ошибки

  • Потерять вывод init — без unseal-ключей запечатанный Vault не открыть, данные потеряны.
  • Оставить initial root token активным надолго — это всемогущий доступ.
  • Забыть, что каждый рестарт требует unseal — без авто-unseal сервис не поднимется сам.
  • Запустить без TLS — секреты пойдут по сети открыто.

Итог

  • Prod-Vault стартует пустым и запечатанным, с явным конфигом storage и listener.
  • operator init один раз создаёт ключи и root-токен; operator unseal распечатывает.
  • Initial root token используют для начальной настройки и затем отзывают.
Проверьте себя
1. В каком состоянии стартует prod-Vault сразу после первого запуска?
AРаспечатанным и готовым
BНеинициализированным; после init — запечатанным
CВ dev-режиме
DС загруженными секретами
2. Что делает команда operator init?
AРаспечатывает Vault
BСоздаёт мастер-ключ, разбивает его на части и выдаёт root-токен
CУдаляет все секреты
DВключает dev-режим
3. Что нужно сделать с initial root token после начальной настройки?
AСохранить в .env приложения
BОтозвать, заведя обычные admin-учётки
CРаздать всей команде
DНикогда не трогать