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

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

Чеклист
- 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