Aller au contenu

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