intermediate

Secrets handling

Держите secrets вне code, logs, client bundles, stack traces, test fixtures и long-lived process state.

Секреты (API keys, пароли БД, signing keys) не должны быть в git, клиентских бандлах и случайных логах. Загружайте в runtime из secret manager или env orchestrator — ротируйте без смены кода, где платформа позволяет.

Правила:

  • Нет секретов в git, слоях Dockerfile, frontend env с `NEXT_PUBLIC_`
  • Редактирование в logger и error middleware
  • DB-пользователи с least privilege
  • Короткоживущие токены вместо долгих master keys
					// Плохо
const apiKey = 'sk-live-...';

// Лучше
const apiKey = requiredEnv('PAYMENT_API_KEY');
				

Память: строки в V8 — не печатайте секреты; обнуление буферов — частичная мера. В тестах — фейковые credentials.

На интервью: Vault, SSM, K8s secrets; ротация; план при утечке.

Типовые ошибки: реальные значения в `.env.example`; секреты в query string в логах прокси; один superuser БД на все сервисы.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Secret manager или sealed env.
  • gitleaks в CI.
  • Разделение build-time и runtime config.
  • Runbook ротации ключей.