Secrets Management
Les secrets ne traînent pas en clair — jamais. Ils sont injectés à l'exécution, rotation programmée, accès journalisé.
Problème
Un secret en clair (mot de passe DB, clé API, certificat partenaire AS2) fuit beaucoup plus souvent qu'on ne pense : commit accidentel dans Git, journal CI/CD non chiffré, copie dans un wiki, screenshot d'un terminal, backup d'un .env. Une fois fuiteé, sa rotation est manuelle, lente, et oubliée. La compromission massive de TJX (2007), Uber (2016), CodeCov (2021) a été permise par des secrets non gérés.
Forces
- Les secrets sont nombreux et hétérogènes (DB, API, clés signature, mots de passe partenaires AS2).
- La rotation manuelle ne passe pas l'échelle — il faut de l'automatisme.
- Le coût d'un coffre-fort spécialisé est élevé, mais le coût d'une fuite l'est davantage.
- L'accès doit être audité : qui a lu quel secret, quand, depuis où.
- Le coffre lui-même devient une cible critique — il faut HA, monitoring, restauration testée.
Solution
Centraliser les secrets dans un coffre dédié (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager, Azure Key Vault) qui : (1) chiffre au repos avec une master key dérivée d'un HSM ; (2) accorde l'accès via une identité (rôle IAM, JWT, Kubernetes ServiceAccount) — pas de cred long-lived ; (3) génère des credentials dynamiques (Vault dynamic secrets) à durée limitée ; (4) automatise la rotation ; (5) journalise chaque lecture/écriture. Les applications ne stockent jamais le secret ; elles le récupèrent à l'init ou via sidecar (Vault Agent, CSI Secrets Store).
Cycle de vie
┌──────────────┐ rotate ┌──────────────┐
│ Generation │ ─────────────►│ Distribution │
└──────┬───────┘ └──────┬────────┘
│ store │ fetch
▼ ▼
┌──────────────┐ rotate ┌──────────────┐
│ Storage │ ◄─── audit ──┤ Application │
│ (Vault) │ │ (in-memory) │
└──────┬───────┘ └──────┬────────┘
│ │ logout/expire
│ revoke ▼
▼ ┌──────────────┐
┌──────────────┐ │ Revocation │
│ Audit log │ ◄────────────┤ (manual or │
└──────────────┘ │ automatic) │
└──────────────┘ Implémentation EDI
Un hub EDI gère des dizaines de secrets : (a) certificats S/MIME / AS2 par partenaire — rotation tous les 12 mois (PEPPOL impose 2 ans max) ; (b) clés API ERP (SAP, Oracle, Workday) ; (c) creds SFTP partenaires sortants ; (d) tokens OAuth2 / OIDC pour les API REST CTC (Italie SDI, France Chorus Pro). Implémentation : Vault avec un mount KV-v2 par partenaire, accès via Kubernetes Vault Agent injector. Rotation auto via Vault rotate_period. La rotation des certificats AS2 est notoirement complexe (coordination avec le partenaire) — on doit traiter une fenêtre de chevauchement où les deux certs sont valides.
Anti-patterns
- Secret en clair dans Git (même en repo privé) — fuiteure quasi certaine à terme.
- Secret en variable d'environnement de pod sans coffre — visible via
ps aux,/proc/.../environ. - Rotation manuelle « quand on aura le temps » — on n'a jamais le temps.
- Vault sans HA — coffre down = applications down.
- Pas d'audit log — impossible de répondre à un incident.
- Politique d'accès Vault avec wildcard
*— défait le principe de moindre privilège.
Patterns liés
- Least Privilege — Secrets Management en est l'instrument côté credentials.
- Zero Trust Architecture — exigeant pour la gestion des secrets.
- Mutual TLS — clients du Secret Manager pour les certificats.
- Defense in Depth — couche identité.
Sources
- HashiCorp Vault — Documentation concepts. developer.hashicorp.com/vault/docs/concepts
- AWS — Secrets Manager Best Practices. docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html
- OWASP Cheat Sheet — Secrets Management. cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html