Использование Vault#

Подключение Vault (внутренний и внешний)#

В проекте поддерживаются два сценария:

  • Внутренний Vault: контейнер orchestrator-vault в текущем docker-compose.
  • Внешний Vault: отдельный Vault-сервер/кластер вне compose.

Ниже порядок одинаковый: сначала env, потом запуск, затем миграция/проверка.

Общие требования к .env#

Минимум должны быть заданы:

VAULT_ADDR=http://<vault-host>:8200
VAULT_TOKEN=<token-с-правами-на-kv>
ORCHESTRATOR_ENCRYPTION_KEY=<ваш-ключ-шифрования>

Требования:

  • VAULT_ADDR - должен быть доступен из контейнера orchestrator.
  • VAULT_TOKEN - токен с правами create/read/update/delete/list для kv/*.
  • ORCHESTRATOR_ENCRYPTION_KEY - обязателен для rollback/шифрования.
  • В Vault должен быть mount kv/ как KV v2.

Вариант 1: внутренний Vault (через docker compose profile)#

1. Настройте .env#

VAULT_ADDR=http://orchestrator-vault:8200
VAULT_TOKEN=root-token
ORCHESTRATOR_ENCRYPTION_KEY=change_me

2. Запустите сервисы с профилем vault#

# MariaDB + Vault
docker compose --profile mariadb --profile vault up -d

# или PostgreSQL + Vault
docker compose --profile pg --profile vault up -d

3. Инициализируйте и распечатайте (unseal) Vault#

docker compose exec orchestrator-vault sh

# внутри контейнера
vault operator init
vault operator unseal
exit

Если kv/ не появился, включите вручную как KV v2:

docker compose exec orchestrator-vault sh

# внутри контейнера
export VAULT_TOKEN='ваш-root-token'
vault secrets list -detailed
vault secrets enable -path=kv -version=2 kv
vault secrets list -detailed
exit

4. Перезапустите backend#

docker compose restart orchestrator

Вариант 2: внешний Vault (отдельный сервер/кластер)#

1. Настройте .env#

VAULT_ADDR=https://vault.company.local:8200
VAULT_TOKEN=s.xxxxxxxx
ORCHESTRATOR_ENCRYPTION_KEY=change_me

2. Подготовьте внешний Vault (один раз)#

Vault должен быть initialized и unsealed.

Проверка/включение kv/ как KV v2:

export VAULT_ADDR='https://vault.company.local:8200'
export VAULT_TOKEN='s.xxxxxxxx'

vault secrets list -detailed
vault secrets enable -path=kv -version=2 kv
vault secrets list -detailed

3. Запустите/перезапустите Orchestrator#

# выберите нужную конфигурацию
make copy_local_compose

# запуск
make up

# если orchestrator уже запущен и изменили только .env
docker compose restart orchestrator

Миграция и проверка (для обоих вариантов)#

1. Проверьте логи Orchestrator#

docker compose logs -f orchestrator

Не должно быть ошибок:

  • Vault is not available
  • VAULT_TOKEN environment variable is required

2. Миграция секретов в Vault#

docker compose exec orchestrator php backend/bin/vault-migrate.php

Ожидаемо:

  • в БД пароли заменяются на VAULT_MIGRATED;
  • секреты пишутся в Vault по пути kv/orchestrator/....

3. Rollback из Vault в БД (опционально)#

# Вариант 1: напрямую
docker compose exec orchestrator php backend/bin/vault-rollback.php

# Вариант 2: через Makefile
make vault-rollback

Rollback возвращает значения из Vault в БД и шифрует их через ORCHESTRATOR_ENCRYPTION_KEY.

Частые проблемы#

Проблема Причина Что сделать
Vault is not available контейнер orchestrator не может достучаться до VAULT_ADDR проверьте DNS/маршрутизацию/порт 8200 из сети Docker
VAULT_TOKEN environment variable is required не задан VAULT_TOKEN в .env заполните VAULT_TOKEN и перезапустите orchestrator
Ошибки 403 от Vault токен без нужных policy выдайте policy с правами на kv/*
Ошибки при чтении/записи секретов kv/ включен как v1 переключите mount kv/ на KV v2