Секреты и 12-factor: env vs vault

Секреты и 12-factor: env vs vault

Секреты в git — инцидент безопасности. 12-factor: config в environment; в prod — vault, encrypted DB или admin UI с audit log.

Секреты и 12-factor: env vs vault
Иллюстрация к материалу

Dev vs prod

  • Dev: .env.local gitignored
  • Prod: secrets in DB/admin or Vault
  • Never commit .env.prod

Rotation

JWT, API keys, DB passwords — calendar rotation. Dual-key period при смене payment providers.

Least privilege

  • CI deploy key только deploy
  • App DB user без SUPERUSER
  • Separate keys per integration
Секреты и 12-factor: env vs vault
Схема и рабочий процесс

Чеклист

  • git-secrets / gitleaks in CI
  • Inventory of all secrets
  • Incident plan for leak

Admin UI для интеграций

Публичные ключи и URL — в таблице настроек приложения или admin UI; секреты — password field с возможностью clear, без хардкода в .env на prod для Telegram/SMTP/OpenAI.

Dev bootstrap может читать .env; prod — только БД.

Incident при утечке

Playbook: rotate все затронутые ключи, revoke JWT если утёк secret, проверить git history и CI logs, уведомить PSP/провайдеров при payment keys. Документируйте timeline для compliance.

Инвентаризация секретов

Таблица: secret name, owner, rotation date, где используется (CI, backend, admin). JWT_SECRET только в env infra; Telegram bot token — site_settings; PSP keys — encrypted column или vault.

gitleaks в pre-commit и CI блокирует commit .env.prod. При утечке — rotate за 15 минут по playbook, не «на следующей неделе».

Новые интеграции добавляйте через миграцию settings + UI админки, не через публичные env-переменные фронта — так prod-конфиг меняется без redeploy frontend.

Быстрый audit секретов

  • gitleaks или git-secrets на CI
  • Список всех keys: где хранится, кто owner, когда rotation
  • Prod secrets не в Slack и не в .env в repo
  • При утечке: rotate → revoke → post-mortem