gestion des secrets Kubernetes avec HashiCorp Vault pour votre SaaS Node.js
22/08/2025
Introduction
Dans un environnement SaaS, protéger vos clés d’API et mots de passe est crucial. Kubernetes ne gère pas nativement la rotation des secrets ni le chiffrement hors base etcd. En combinant HashiCorp Vault (v1.14) et Kubernetes, vous bénéficiez d’une solution centralisée, auditable et résiliente pour stocker et délivrer vos secrets à votre application Node.js.
Étape 1 : installer Vault sur votre cluster Kubernetes
Prérequis
- kubectl configuré sur votre cluster (EKS, GKE ou AKS)
- Helm v3.10+ installé sur votre poste
Commande d’installation rapide (mode dev)
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update
helm install vault hashicorp/vault \
--namespace vault --create-namespace \
--set "server.dev.enabled=true"
En production, désactivez server.dev.enabled
et configurez un backend de stockage (Consul, S3, GCS).
Étape 2 : configurer le secret engine Kubernetes
- Exposer l’API Kubernetes à Vault en récupérant le token reviewer :
- Activer et configurer l’authentification Kubernetes :
KUBE_NAMESPACE=$(kubectl config view --minify --output 'jsonpath={..namespace}')
SA_TOKEN=$(kubectl get secret \
$(kubectl get sa vault-auth -n vault -o jsonpath="{.secrets[0].name}") \
-n vault -o go-template="{{.data.token}}" | base64 --decode)
kubectl get configmap -n vault vault -o jsonpath="{.data['ca\.crt']}" | base64 --decode > ca.crt
vault login root_token
vault auth enable kubernetes
vault write auth/kubernetes/config \
token_reviewer_jwt="$SA_TOKEN" \
kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
kubernetes_ca_cert=@ca.crt
Étape 3 : créer une policy et un rôle pour votre microservice
Définissez une policy qui limite l’accès (principe du moindre privilège) :
cat < microservice-policy.hcl
path "secret/data/db/*" {
capabilities = ["read"]
}
EOF
vault policy write microservice microservice-policy.hcl
Créez ensuite le rôle Kubernetes lié à cette policy :
vault write auth/kubernetes/role/microservice \
bound_service_account_names=node-sa \
bound_service_account_namespaces=default \
policies=microservice \
ttl=24h
Étape 4 : injection des secrets dans votre déploiement Node.js
Ajoutez ces annotations à votre Deployment
Kubernetes pour activer Vault Agent Injector :
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-app
spec:
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "microservice"
vault.hashicorp.com/agent-inject-secret-db-creds: "secret/data/db/credentials"
spec:
serviceAccountName: node-sa
containers:
- name: app
image: your-registry/node-app:latest
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: vault-secrets
key: data.db.username
- name: DB_PASS
valueFrom:
secretKeyRef:
name: vault-secrets
key: data.db.password
Dans votre code Node.js
:
const pg = require('pg');
const client = new pg.Client({
user: process.env.DB_USER,
password: process.env.DB_PASS,
host: 'db.cluster.local'
});
Bonnes pratiques
- Activez les logs d’audit Vault pour tracer l’accès aux secrets.
- Utilisez un backend de stockage chiffré (AWS KMS, Google KMS).
- Limitez la durée de vie (
ttl
) des tokens Vault. - Surveillez les métriques Vault Exporter pour Prometheus.
Conclusion
En centralisant la gestion des secrets avec HashiCorp Vault, vous réduisez les risques de fuite, facilitez la rotation des credentials et répondez aux exigences de conformité. Cette approche s’intègre de façon transparente à votre stack SaaS et à vos environnements basés sur AWS ou tout autre cloud.
Besoin d’un accompagnement pour sécuriser votre infrastructure ? Contactez nos experts ou obtenez un devis discret pour votre projet.