Gestion des secrets et chiffrement¶
Taxonomie des secrets¶
| Type | Exemples | Rotation | Stockage |
|---|---|---|---|
| Credentials applicatifs | Tokens API, mots de passe BDD | 90 jours | Vault |
| Cles de chiffrement | AES-256, clés de scellement | 1 an | KMS / HSM |
| Certificats TLS | Certificats serveur, CA intermédiaires | 90 jours (Let's Encrypt) ou 1 an | Vault PKI |
| Cles SSH | Cles déploiement, cles utilisateurs | 1 an | Vault SSH |
| Secrets CI/CD | Tokens de déploiement, credentials registre | 30 jours | Vault + injection CI |
Architecture de référence¶
graph LR
Apps["Applications<br/>(consumers)"] --> Vault["Vault<br/>(broker)"]
Vault --> KMS["KMS / HSM<br/>(root keys)"]
Vault -->|Injection| Env["Env vars /<br/>mounted vols"]
KMS -->|Audit| SIEM["SIEM<br/>(traces)"] HashiCorp Vault¶
Outil de référence pour la gestion centralisee des secrets :
# Politique Vault pour le perimetre CI/CD
path "secret/data/cicd/*" {
capabilities = ["read"]
}
path "pki/issue/cicd" {
capabilities = ["create", "update"]
}
# Interdire l'acces aux secrets de production
path "secret/data/production/*" {
capabilities = ["deny"]
}
Chiffrement par niveau¶
| Niveau | At-rest | In-transit | Bout en bout |
|---|---|---|---|
| Public | Optionnel | TLS 1.3 | Non |
| Interne | AES-256 (disk) | TLS 1.3 | Non |
| Confidentiel | AES-256 (Vault) | mTLS | Non (sauf cas spécifiques) |
| Restreint | AES-256 (HSM-backed) | mTLS | Oui |
Chiffrement at-rest¶
# Exemple : chiffrement Kubernetes Secrets avec KMS
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- kms:
apiVersion: v2
name: vault-kms
endpoint: unix:///opt/vault-kms/socket.sock
- identity: {}
Chiffrement in-transit¶
Tous les flux inter-services utilisent TLS 1.3 minimum. Pour les niveaux Confidentiel et Restreint, mTLS est obligatoire :
# Configuration mTLS avec cert-manager
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: service-mtls
namespace: production
spec:
secretName: service-mtls-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: service.production.svc.cluster.local
duration: 2160h # 90 jours
renewBefore: 360h
usages:
- server auth
- client auth
Anti-patterns¶
A ne jamais faire
- Secrets en clair dans le code source ou les variables d'environnement statiques
- Secrets partages entre environnements (dev/staging/prod)
- Rotation manuelle sans traçabilité
- Cles de chiffrement stockees a côté des données chiffrees
- Utilisation de secrets longue duree sans rotation automatique