ADR-0008 — Doppler source de vérité secrets + External Secrets pour K8s
Status : Accepted Date : 2026-03 (rétroactif) Deciders : équipe plateforme Nex Tickets : —
Contexte
Au démarrage, les secrets (DB passwords, API keys providers, clés Firebase) étaient distribués manuellement via .env et K8s secrets. Limitations :
- Pas de source unique :
.env.local, secret K8s, snippet partagé en chat — drift garanti. - Rotation impossible sans toucher chaque environnement à la main.
- Pas d’audit des accès secrets.
- Risque de fuite (
.envpoussé par erreur, copie en clair dans un canal Slack).
Décision
- Doppler est la source de vérité unique des secrets pour tous les environnements (dev, stg, prd).
- Projet Doppler :
paywithnex. Configs :dev,stg,prd. - Local : développeurs utilisent
doppler run --ou récupèrent un.env.localponctuel (non versionné). - CI : le pipeline GitLab pull les secrets via
dopplerCLI au moment du job. - K8s : External Secrets Operator synchronise Doppler → K8s secrets dans les namespaces
nex-stagingetnex-production(Helm releaseexternal-secrets0.14.4). - Aucun secret ne vit dans Git, dans des images Docker, ou dans des fichiers de config K8s versionnés.
Conséquences
Positives
- Source unique, audit des accès Doppler, rotation centralisée.
- Onboarding dev : un seul accès Doppler à provisionner.
- K8s manifests propres (uniquement les ExternalSecret CRDs).
- Compatible avec les exigences ISO 27001 et SOC 2 sur la gestion des secrets.
Négatives / risques
- Dépendance Doppler — panne Doppler = impossibilité de récupérer un secret. Mitigation : External Secrets cache les valeurs dans K8s, redémarrage de pods OK pendant la panne.
- Coût Doppler.
- Risque de mauvais scope (un dev ayant accès
prdpar erreur) — à mitiger par RBAC Doppler strict.
Alternatives écartées
- AWS Secrets Manager — fonctionnel mais ergonomie moins fluide pour les devs, pas d’UI partagée multi-environnement.
- HashiCorp Vault self-hosted — coût opérationnel élevé (HA, backups, rotation), pas le bon niveau de maturité plateforme.
- K8s sealed-secrets — gestion des clés de scellement complexe, pas de UI.
Suivi
- Voir /security/secrets-management.
- Voir /operations/variables-et-stack.
- Vars critiques à connaître :
NOTIFICATIONS_ENV=productionetNOTIFICATIONS_SCHEMA=notification(sinon OTP silently dropped sur staging).