Guide technique : implémentation de la gestion sécurisée des secrets dans une pipeline CI/CD avec HashiCorp Vault et Kubernetes
25/05/2025
Dans cet article, nous allons explorer en profondeur comment intégrer HashiCorp Vault dans une pipeline CI/CD pour sécuriser la gestion des secrets lors du déploiement d’applications conteneurisées sur un cluster Kubernetes. En nous appuyant sur des exemples concrets, des commandes CLI et des extraits de code, vous découvrirez comment mettre en place une solution robuste qui répond aux exigences des environnements de production, tout en bénéficiant d’un retour sur investissement optimal en assurant la sécurité de vos données sensibles.
Guide technique : implémentation de la gestion sécurisée des secrets dans une pipeline CI/CD avec HashiCorp Vault et Kubernetes
Introduction et contexte
Les pipelines CI/CD modernes nécessitent souvent l’accès à des secrets (clés API, identifiants, tokens) pour déployer des applications dans des environnements dynamiques comme Kubernetes. Une mauvaise gestion de ces secrets peut entraîner des risques de sécurité majeurs. HashiCorp Vault est une solution éprouvée pour stocker et contrôler l’accès à ces informations sensibles. Dans ce guide, nous verrons comment intégrer Vault à une pipeline CI/CD et appliquer les bonnes pratiques pour répondre aux exigences OWASP 2025 et aux recommandations de sécurité Docker v26.
Étape 1 : Déployer HashiCorp Vault sur Kubernetes
La première étape consiste à déployer Vault dans votre cluster Kubernetes afin de fournir une solution centralisée de gestion des secrets. Vous pouvez utiliser le Helm Chart officiel pour faciliter cette tâche. Voici un extrait de commande et un fichier de configuration minimal :
# Ajout du dépôt HashiCorp et installation via Helm:
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update
helm install vault hashicorp/vault --set "server.dev.enabled=true"
# Remarque: Pour un cluster en production, configurez Vault en mode HA et désactivez le mode dev.
Ce déploiement en mode développement permet de tester rapidement l’intégration. Pour la sécurité en production, assurez-vous d’utiliser des configurations SSL et des mécanismes d’authentification adaptés.
Étape 2 : Configurer l’authentification et la politique d’accès
Une fois Vault installé, l’étape suivante est de configurer l’authentification et d’établir des politiques d’accès.
# Exemple de configuration de la politique d’accès (vault-policy.hcl)
path "secret/data/*" {
capabilities = ["read"]
}
# Chargement de la politique dans Vault:
vault policy write cicd-policy vault-policy.hcl
Cette politique permet uniquement la lecture des secrets dans le chemin "secret/data/*". Elle pourra être associée au rôle qui sera utilisé dans la pipeline CI/CD afin que les jobs puissent récupérer les secrets nécessaires sans risque d'exposition excessive.
Étape 3 : Intégrer Vault à une pipeline CI/CD
Pour démontrer l’intégration, prenons l’exemple d’un pipeline GitLab CI. Le job suivant récupère un secret depuis Vault et l’utilise au sein du processus de déploiement :
# Exemple de configuration dans un fichier .gitlab-ci.yml
stages:
- deploy
deploy_app:
stage: deploy
image: appropriate/curl
variables:
VAULT_ADDR: "http://vault.votre-domaine.local:8200"
script:
- |
# Authentifier avec Vault en utilisant le token sécurisé
export VAULT_TOKEN=$(curl --request POST --data '{"role_id": "votre_role_id", "secret_id": "votre_secret_id"}' $VAULT_ADDR/v1/auth/approle/login | jq -r '.auth.client_token')
- |
# Récupérer le secret et l’exporter comme variable d’environnement
export DB_PASSWORD=$(curl --header "X-Vault-Token: $VAULT_TOKEN" $VAULT_ADDR/v1/secret/data/database | jq -r '.data.data.password')
- echo "Déploiement de l’application avec la variable DB_PASSWORD récupérée depuis Vault"
# Pour plus d’informations sur l’intégration CI/CD, consultez nos articles techniques.
Ce snippet montre comment authentifier et récupérer un secret. N’oubliez pas d’installer l’outil jq dans vos images CI, et de sécuriser les identifiants Vault en les stockant en variables protégées dans GitLab.
Bonnes pratiques et conseils
- Sécurisation du token : Veillez à ne jamais exposer votre token Vault dans les logs. Utilisez les variables masquées de votre outil CI/CD.
- Rotation des secrets : Configurez des politiques de rotation régulière pour limiter l’impact en cas de compromission.
- Surveillance et logs : Activez la journalisation des accès dans Vault afin de détecter rapidement les anomalies.
- Environnements isolés : Séparez les environnements de développement, test et production avec des politiques d’accès différenciées.
Pour découvrir d'autres solutions d’intégration et sécurisation dans vos projets DevOps, n'hésitez pas à visiter la section services de Novane.
Conclusion
Intégrer HashiCorp Vault dans une pipeline CI/CD sur Kubernetes est une approche essentielle pour sécuriser la gestion des secrets dans des environnements dynamiques. Grâce à ce guide technique, vous êtes désormais armés pour déployer une solution robuste en production, réduire les risques de sécurité et assurer un déploiement continu fiable.
Pour obtenir des conseils personnalisés sur vos projets ou pour échanger sur vos challenges techniques, pensez à nous contacter.
Découvrez également d'autres ressources sur notre blog Novane.