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 ротации ключей.