Faut-il générer un mot de passe temporaire, stocker un token dans un coffre-fort, ou supprimer complètement le besoin d’un secret ? La réponse dépend du système cible, de votre infrastructure et de votre niveau de maturité. Ce guide compare trois modèles — secret statique, secret dynamique et identité fédérée — pour vous aider à choisir le bon selon votre contexte. Vous verrez que le vrai progrès n’est pas toujours de rendre les secrets dynamiques, mais parfois de réduire la dépendance aux secrets quand c’est possible.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Les trois modèles de gestion des credentials : statique, dynamique, identité fédérée
- Les avantages, limites et contraintes d’intégration de chaque approche
- Les cas d’usage concrets pour chaque modèle
- Les pièges courants lors de la migration
- Comment choisir et migrer progressivement
Prérequis
Section intitulée « Prérequis »Trois modèles, pas deux
Section intitulée « Trois modèles, pas deux »Le réflexe courant est d’opposer “secret statique” et “secret dynamique”. En pratique, il faut distinguer trois modèles de gestion des credentials.
Secret statique
Section intitulée « Secret statique »Un secret créé à l’avance, stocké quelque part, et réutilisé pendant une période prolongée.
# Exemple : mot de passe défini manuellementDB_PASSWORD="SuperSecretPassword123!"Caractéristiques :
- Existe avant d’être utilisé
- Stocké dans un fichier, une variable ou un coffre-fort
- Durée de vie longue (semaines, mois, années)
- Rotation manuelle ou planifiée
- Souvent partagé entre plusieurs composants
Secret dynamique
Section intitulée « Secret dynamique »Un secret généré à la demande, avec une durée de vie limitée, et révoqué automatiquement à expiration.
# Exemple : Vault génère un utilisateur PostgreSQL temporairevault read database/creds/my-role# Key Value# lease_id database/creds/my-role/abc123# lease_duration 1h# username v-root-my-role-xyz789# password A1b2C3d4E5f6G7h8Caractéristiques :
- N’existe pas avant d’être demandé
- Généré au moment de l’utilisation
- Durée de vie courte (minutes, heures)
- Révoqué automatiquement à expiration
- Unique par demandeur
Identité fédérée (workload identity)
Section intitulée « Identité fédérée (workload identity) »Pas de secret partagé du tout. Le workload prouve son identité via un jeton signé, validé par le système cible sans échange de mot de passe.
# Exemple : un pipeline GitHub Actions accède à AWS sans secret# Le runner obtient un jeton OIDC signé par GitHub# AWS valide le jeton et accorde un accès temporaire via STSCaractéristiques :
- Aucun secret à stocker, distribuer ou renouveler
- Repose sur une chaîne de confiance (IdP → système cible)
- Le workload prouve “qui il est” plutôt que “ce qu’il sait”
- Dépend de la compatibilité du système cible
Tableau comparatif
Section intitulée « Tableau comparatif »| Aspect | Statique | Dynamique | Identité fédérée |
|---|---|---|---|
| Création | Manuelle, à l’avance | Automatique, à la demande | Aucune (jeton signé) |
| Durée de vie | Longue (mois/années) | Courte (minutes/heures) | Très courte (minutes) |
| Stockage | Persistant | Temporaire, souvent mis en cache | Aucun (jeton en mémoire) |
| Rotation | Manuelle, planifiée | Continue, automatique | N/A (pas de rotation) |
| Révocation | Manuelle ou planifiée | Expiration auto, parfois révocation explicite utile | Expiration du jeton |
| Attribution | Difficile (souvent partagé) | Facile (unique par workload) | Facile (identité du workload) |
| Complexité | Simple à mettre en place | Infrastructure centrale requise | Intégration IdP requise |
| Compatibilité | Universelle | Dépend du système cible | Dépend du support OIDC/mTLS |
Trois sous-familles de credentials temporaires
Section intitulée « Trois sous-familles de credentials temporaires »Le terme “secret dynamique” recouvre en réalité des mécanismes distincts. Les confondre mène à des choix d’architecture incorrects.
| Sous-famille | Mécanisme | Exemple |
|---|---|---|
| Secret généré | Le gestionnaire crée un compte temporaire sur le système cible | Utilisateur PostgreSQL via Vault Database |
| Token éphémère dérivé d’une identité | Le workload s’authentifie et obtient un jeton signé à durée courte | STS AssumeRole, OIDC, JWT |
| Certificat court | Une CA signe un certificat à durée de vie limitée | Certificat SSH signé par Vault, certificat X.509 court via PKI |
La distinction est importante : un secret généré implique que le gestionnaire a des privileges élevés sur le système cible (droits de création d’utilisateurs). Un token éphémère repose sur une relation de confiance préétablie. Un certificat court repose sur une PKI.
Comment fonctionne un secret dynamique
Section intitulée « Comment fonctionne un secret dynamique »-
L’application demande un secret
L’application s’authentifie auprès du gestionnaire de secrets (ex: Vault) et demande un accès à une ressource (ex: base de données).
-
Le gestionnaire génère le secret
Vault se connecte à la base de données avec des credentials admin et crée un nouvel utilisateur avec un mot de passe aléatoire.
-
Le secret est retourné avec un TTL
L’application reçoit les credentials et une durée de vie (ex: 1 heure). Un identifiant de lease permet de renouveler ou révoquer le secret.
-
L’application utilise le secret
L’application se connecte à la base avec ces credentials temporaires.
-
Le secret expire et est révoqué
Après 1 heure (ou quand l’application libère le lease), Vault supprime automatiquement l’utilisateur de la base de données.
Avantages des secrets dynamiques
Section intitulée « Avantages des secrets dynamiques »Fenêtre d’exploitation réduite
Section intitulée « Fenêtre d’exploitation réduite »Un secret dynamique n’existe que pendant son utilisation. Si un attaquant le capture, il n’a que quelques minutes ou heures pour l’exploiter — contre des mois ou des années pour un secret statique.
Révocation automatique
Section intitulée « Révocation automatique »Pas besoin de tracker où le secret est utilisé. À expiration, le compte est supprimé sur le système cible. Cependant, une connexion déjà établie peut survivre à l’expiration du credential : certains systèmes (bases de données, brokers) maintiennent les sessions TCP ouvertes même après la suppression de l’utilisateur. Vérifiez le comportement de votre système cible.
Attribution précise
Section intitulée « Attribution précise »Chaque demande génère un secret unique. Si une activité suspecte est détectée, vous savez exactement quel workload a utilisé ce secret.
# Logs de la base de données2026-03-16 10:00:00 - User v-app1-xyz789 connected2026-03-16 10:00:05 - User v-app2-abc123 connected2026-03-16 10:00:10 - User v-app1-xyz789: suspicious query detected# ↑ On sait immédiatement que c'est app1Rotation continue
Section intitulée « Rotation continue »Chaque émission produit un credential récent, ce qui réduit fortement l’ancienneté moyenne des accès actifs. Pas de “rotation annuelle oubliée”.
Moindre privilège naturel
Section intitulée « Moindre privilège naturel »Vous pouvez créer des rôles avec des permissions minimales. Chaque workload reçoit exactement les droits dont il a besoin, pour la durée dont il a besoin.
Limites des secrets dynamiques
Section intitulée « Limites des secrets dynamiques »Infrastructure centrale critique
Section intitulée « Infrastructure centrale critique »Les secrets dynamiques nécessitent un gestionnaire de secrets capable de s’authentifier auprès du système cible, créer/supprimer des credentials à la demande, et gérer les expirations.
Le gestionnaire de secrets devient un composant critique du plan de contrôle. Sa disponibilité, sa résilience et son observabilité doivent être traitées comme celles d’un service central d’infrastructure.
Exemples : HashiCorp Vault, AWS Secrets Manager (certaines fonctions), HCP Vault Secrets.
Compatibilité limitée
Section intitulée « Compatibilité limitée »Tous les systèmes ne permettent pas la création dynamique de credentials.
| Système | Support dynamique |
|---|---|
| PostgreSQL | ✅ Vault database secrets engine |
| MySQL | ✅ Vault database secrets engine |
| AWS IAM | ✅ Vault AWS secrets engine ou STS |
| API tierce avec clé fixe | ❌ Pas de support |
| Application legacy | ❌ Souvent impossible |
Contraintes d’intégration applicative
Section intitulée « Contraintes d’intégration applicative »La compatibilité du système cible ne suffit pas. L’application cliente doit aussi être capable de gérer le cycle de vie du secret dynamique.
| Contrainte | Problème si non gérée |
|---|---|
| Renouvellement en mémoire | L’app tente d’utiliser un credential expiré |
| Réouverture de connexion | Le pool de connexions garde l’ancien utilisateur |
| Gestion des leases | Pas de renouvellement anticipé avant expiration |
| TTL vs durée du workload | Un job batch dure plus longtemps que le lease |
| Indisponibilité du gestionnaire | L’app ne peut pas démarrer ou renouveler |
| SDK / middleware | Certaines librairies ne supportent pas le refresh de credentials |
Dépendance au plan de contrôle
Section intitulée « Dépendance au plan de contrôle »La latence d’obtention du premier secret retarde le démarrage de l’application. Mais le vrai sujet est plus large :
- Disponibilité : si Vault ou STS est injoignable, l’application ne démarre pas
- Renouvellement en cours de vie : il faut surveiller les leases et anticiper le renouvellement avant expiration
- Effet sur les pools de connexions : un renouvellement de credential peut nécessiter la fermeture et la réouverture de toutes les connexions
- Cache et anticipation : un renouvellement anticipé (par exemple à 75 % du TTL) évite les interruptions
Quand un secret statique reste la bonne décision
Section intitulée « Quand un secret statique reste la bonne décision »Un secret statique n’est pas un anti-pattern par défaut. Il reste le bon choix dans plusieurs situations concrètes.
| Situation | Pourquoi le statique est adapté |
|---|---|
| API tierce avec clé fixe | Le fournisseur ne supporte pas la rotation automatique ni la fédération |
| Clé maître de chiffrement | La clé SOPS, âge ou KMS est un secret fondamental qui ne peut pas être dynamique |
| Bootstrap initial | Le premier secret pour accéder au coffre-fort lui-même (token d’enrôlement, unseal key) |
| Environnement air-gap | Aucun accès réseau vers un gestionnaire de secrets |
| Intégration legacy | Application qui ne supporte pas le rafraîchissement de credentials |
| Reprise dégradée | Credentials de secours en cas de panne du gestionnaire de secrets |
Même dans une architecture moderne, il existe presque toujours un secret initial ou une chaîne de confiance initiale : identité machine, rôle cloud, token d’enrôlement, recovery path. L’objectif n’est pas d’atteindre le “zéro secret absolu”, mais de réduire au maximum la surface des secrets statiques et de les gérer rigoureusement (coffre-fort, rotation planifiée, audit).
Secrets dynamiques ou identité fédérée ?
Section intitulée « Secrets dynamiques ou identité fédérée ? »Quand le système cible le supporte, l’identité fédérée est souvent préférable aux secrets dynamiques : elle élimine le besoin de créer, distribuer et révoquer un credential.
| Besoin | Approche recommandée |
|---|---|
| Base de données classique | Secret dynamique (Vault Database) |
| Pipeline CI/CD vers cloud | OIDC / identité fédérée |
| Service Kubernetes vers AWS | IRSA / workload identity |
| API tierce avec clé fixe | Secret statique sous coffre-fort |
| SSH admin courte durée | Certificat signé (Vault SSH CA) |
| Service mesh interne (mTLS) | SPIFFE/SPIRE |
| Application vers autre application interne | mTLS avec certificats courts |
Pour le cloud, les credentials dynamiques sont utiles, mais lorsqu’une fédération d’identité native existe (OIDC GitHub → AWS, IRSA, GCP Workload Identity), elle est souvent préférable à la création de credentials — même temporaires.
Pour approfondir l’identité fédérée : voir le guide Identité machine et workload identity.
Tableau de décision
Section intitulée « Tableau de décision »| Critère | → Statique | → Dynamique | → Identité fédérée |
|---|---|---|---|
| Le système accepte OIDC ou une identité cloud ? | Non | Parfois | Oui |
| L’app a besoin d’un vrai credential (user/password) ? | Oui | Oui | Non |
| Le système cible crée des comptes temporaires ? | Non | Oui | N/A |
| L’attribution précise est importante ? | Non | Oui | Oui |
| L’environnement est éphémère (K8s, serverless) ? | Non | Oui | Oui |
| Vous avez Vault ou équivalent ? | Non | Oui | Parfois |
| C’est une intégration tierce avec clé fixe ? | Oui | Non | Non |
| L’app supporte le refresh de credentials ? | N/A | Requis | N/A |
Exemples concrets avec Vault
Section intitulée « Exemples concrets avec Vault »Credentials PostgreSQL dynamiques (secret généré)
Section intitulée « Credentials PostgreSQL dynamiques (secret généré) »C’est le cas d’usage le plus mature pour les secrets dynamiques : Vault crée un utilisateur temporaire directement sur la base de données.
Configuration du secrets engine :
# Activer le secrets engine databasevault secrets enable database
# Configurer la connexion PostgreSQLvault write database/config/my-postgresql \ plugin_name=postgresql-database-plugin \ allowed_roles="my-role" \ connection_url="postgresql://{{username}}:{{password}}@postgres:5432/mydb?sslmode=disable" \ username="vault_admin" \ password="vault_admin_password"
# Créer un rôle avec les permissions minimalesvault write database/roles/my-role \ db_name=my-postgresql \ creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \ GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \ default_ttl="1h" \ max_ttl="24h"Utilisation par l’application :
# Demander des credentialsvault read database/creds/my-role
# RésultatKey Value--- -----lease_id database/creds/my-role/abc123...lease_duration 1hlease_renewable truepassword A1b2C3d4E5f6G7h8username v-root-my-role-xyz789Credentials AWS (token éphémère via STS)
Section intitulée « Credentials AWS (token éphémère via STS) »Pour AWS, le modèle le plus actuel utilise STS AssumeRole plutôt que la création d’utilisateurs IAM temporaires. STS émet un jeton éphémère sans créer de compte IAM.
# Activer le secrets engine AWSvault secrets enable aws
# Configurer les credentials rootvault write aws/config/root \ access_key=AKIAIOSFODNN7EXAMPLE \ secret_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \ region=eu-west-1
# Créer un rôle avec assumed_role (recommandé)vault write aws/roles/my-role \ credential_type=assumed_role \ role_arns="arn:aws:iam::123456789012:role/my-app-role"Utilisation :
vault read aws/creds/my-role
# Résultat : credentials STS temporairesKey Value--- -----lease_id aws/creds/my-role/xyz789...lease_duration 1haccess_key ASIAXXXXXXXXXXXXXXXXsecret_key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsecurity_token FwoGZXIvYXdzE...Migration progressive
Section intitulée « Migration progressive »Pas besoin de tout changer d’un coup. Migrez progressivement, en commençant par les cas les plus mûrs.
-
Inventaire et classification
Listez tous vos secrets statiques. Classez-les par criticité et compatibilité avec les secrets dynamiques ou l’identité fédérée.
-
Mettre en place l’observabilité
Avant de migrer, vérifiez que vous pouvez observer : quel workload demande quoi, quels leases expirent, quels échecs d’authentification surviennent, quelle latence est introduite. Sans observabilité, une migration peut dégrader la production silencieusement.
-
Quick wins : bases de données
Commencez par les credentials de base de données. C’est le cas d’usage le plus mature avec Vault, et celui qui apporte le plus de valeur (attribution, révocation automatique).
-
CI/CD : adopter OIDC
Remplacez les tokens CI/CD stockés par de la fédération OIDC. GitHub Actions et GitLab CI supportent nativement cette approche.
-
Cloud credentials
Remplacez les access keys longue durée par des credentials STS ou de la workload identity (IRSA, GCP WI, Azure MI).
-
Évaluation continue
Pour chaque nouveau secret, posez-vous la question : “Peut-il être dynamique ? Peut-il être remplacé par de l’identité fédérée ?”
Pièges courants
Section intitulée « Pièges courants »| Piège | Conséquence | Solution |
|---|---|---|
| Migrer tous les secrets “par principe” | Complexité inutile, incidents de prod | Migrer par ordre de maturité et de risque |
| TTL trop courts sans gestion de renouvellement | Connexions coupées en production | Renouveler à 75 % du TTL, tester le comportement |
| Vault avec trop de privilèges | Compromission de Vault = compromission de tout | Cloisonner les policies, limiter les rôles admin |
| Écrire un credential dynamique dans un fichier | Le secret n’est plus éphémère | Injecter en mémoire, monter en volume tmpfs |
| Injecter un secret en variable d’environnement | Visible dans /proc/<pid>/environ et les logs | Préférer les fichiers montés ou l’injection sidecar |
| Confondre secret dynamique et jeton fédéré | Mauvais choix d’architecture | Distinguer les trois sous-familles |
| Multiplier les rôles sans gouvernance | Prolifération incontrôlable | Nommer, documenter et auditer régulièrement |
Quand ne pas migrer tout de suite
Section intitulée « Quand ne pas migrer tout de suite »La migration vers les secrets dynamiques n’est pas toujours la prochaine étape.
| Situation | Pourquoi attendre |
|---|---|
| Système legacy fragile | Le risque de casser la production dépasse le gain de sécurité |
| Pas d’observabilité en place | Vous ne verrez pas les problèmes introduits par la migration |
| Gestionnaire sans haute disponibilité | Vault en single-node est un SPOF pour tous les workloads |
| Application incompatible avec le refresh | L’app crash à l’expiration du credential |
| Équipe non formée | Les opérateurs doivent comprendre les leases, TTL et renouvellements |
Dans ces cas, la priorité est de sécuriser les secrets statiques existants : coffre-fort, rotation régulière, journalisation des accès, alerting. Puis de préparer l’infrastructure pour la migration future.
À retenir
Section intitulée « À retenir »- Tous les secrets n’ont pas vocation à devenir dynamiques — le bon choix dépend du système cible et de la maturité de l’infrastructure
- Quand une identité fédérée existe, elle est souvent préférable — elle élimine complètement le besoin d’un credential partagé
- Les secrets dynamiques réduisent fortement la fenêtre d’exploitation et améliorent l’attribution des accès
- Ils demandent une infrastructure centrale fiable — le gestionnaire de secrets devient un composant critique du plan de contrôle
- La compatibilité applicative est souvent le vrai facteur limitant — pas le système cible, mais la capacité de l’application à gérer le refresh
- L’expiration ne garantit pas l’arrêt immédiat — les sessions déjà ouvertes peuvent survivre au credential qui les a établies
- La migration doit commencer par les cas les plus mûrs : bases de données, CI/CD, cloud credentials
- Un secret statique bien géré reste préférable à un secret dynamique déployé dans une infrastructure qui n’est pas prête