Aller au contenu
Sécurité medium

Auto-unseal et Recovery Keys : comprendre le scellement Vault

20 min de lecture

Vault protège vos secrets avec un mécanisme de scellement : même si un attaquant accède au stockage, les données restent chiffrées. Cette page vous aide à choisir et configurer la méthode de déscellement adaptée à votre contexte.

  • Pourquoi Vault utilise un mécanisme de scellement
  • La différence fondamentale entre Shamir et auto-unseal
  • Recovery keys vs unseal keys : quand les utiliser
  • Les risques de chaque approche et comment les mitiger
  • Ce qui relève de Community Edition vs Enterprise

Vault stocke des secrets sensibles (tokens, mots de passe, clés privées). Même chiffrées, ces données seraient vulnérables si quelqu’un pouvait :

  • Voler le disque ou une sauvegarde
  • Accéder au stockage Raft/Consul
  • Compromettre le serveur Vault

Le scellement garantit que les données restent inutilisables sans une clé qui n’est jamais stockée sur le serveur.

Hiérarchie des clés Vault

La Root Key est au cœur du système. Elle n’est jamais stockée en clair. Vault doit la “reconstruire” à chaque démarrage.

Le scellement protège l’accès aux clés nécessaires pour déchiffrer les données au démarrage. Mais il ne remplace pas :

ProtectionAssurée par
Contrôle d’accès aux secretsPolicies / ACL
Traçabilité des opérationsAudit logging
Sécurité du système hôteHardening OS
Protection réseauFirewall, TLS, mTLS
Intégrité du stockageChiffrement disque, backups

Une fois Vault déscellé et en service, les données sont accessibles aux utilisateurs authentifiés selon leurs policies. Le seal protège le démarrage, pas le runtime.

Principe : la root key est divisée en N parts. Il faut K parts pour la reconstituer (seuil = threshold).

Exemple classique : 5 parts, seuil de 3

Root Key = Part1 + Part2 + Part3 + Part4 + Part5
Pour désceller :
- Admin A fournit Part1 ✓
- Admin B fournit Part3 ✓
- Admin C fournit Part5 ✓ → Vault déscellé

Avantages :

  • Contrôle total : pas de dépendance externe
  • Sécurité : aucun individu ne peut désceller seul
  • Résilience : perte de N-K parts tolérée

Inconvénients :

  • Manuel : intervention humaine à chaque redémarrage
  • Coordination : réunir K personnes peut prendre du temps
  • Pas automatisable : problématique pour les clusters auto-gérés

Shamir en cluster : chaque nœud doit être déscellé

Section intitulée « Shamir en cluster : chaque nœud doit être déscellé »

Avec un cluster Vault (plusieurs nœuds), le mécanisme de scellement est indépendant par nœud. Vault ne distribue pas l’état “partiellement unsealed” entre nœuds.

Concrètement :

  • Si vous avez 3 nœuds et utilisez Shamir, vous devez fournir les unseal keys sur chaque nœud après un redémarrage complet
  • Le leader et les standbys doivent tous être déscellés individuellement
  • Cela multiplie la charge opérationnelle par le nombre de nœuds

C’est l’une des raisons principales pour lesquelles auto-unseal est préféré en production sur les clusters.

Principe : déléguer la protection de la root key à un service externe (KMS, HSM, Transit).

Comment ça marche :

Flux auto-unseal Vault

Avantages :

  • Automatique : pas d’intervention humaine au redémarrage
  • Clusters auto-gérés : compatible Kubernetes, ASG
  • Audit : les accès KMS sont loggés
  • Rotation : possible sans downtime

Inconvénients :

  • Dépendance externe : si le KMS est down, Vault ne peut pas démarrer
  • Coût potentiel : utilisation KMS facturée
  • Complexité : infrastructure supplémentaire à gérer

Beaucoup confondent unseal keys (Shamir) et recovery keys (auto-unseal). Ce sont des concepts différents avec des usages distincts.

AspectUnseal Keys (Shamir)Recovery Keys (Auto-unseal)
Fonction principaleDésceller VaultOpérations d’urgence
Utilisées au redémarrage✅ Oui❌ Non (c’est le KMS)
Peuvent générer un root token✅ Oui✅ Oui
Peuvent resceller Vault✅ Oui❌ Non
Permettent le rekey✅ Oui (d’elles-mêmes)✅ Oui (des recovery keys)
Critiques pour le fonctionnement✅ Vitales⚠️ Importantes mais secondaires

Avec auto-unseal, Vault démarre automatiquement. Mais certaines opérations critiques nécessitent quand même une autorisation humaine :

OpérationRecovery Keys nécessaires
Générer un nouveau root token
Effectuer un rekey (changer recovery keys)
Migration de seal (KMS → autre KMS)
Lecture des recovery keys initiales❌ (une seule fois à l’init)

C’est une décision de sécurité intentionnelle. Les recovery keys ne peuvent pas déchiffrer la root key. Si un attaquant obtient les recovery keys, il ne peut pas :

  1. Démarrer un Vault volé (besoin du KMS)
  2. Accéder aux secrets sans le KMS
  3. Contourner le KMS

Il peut seulement générer un root token sur un Vault déjà déscellé et accessible.

ProviderService KMSConfiguration Vault
AWSAWS KMSseal "awskms"
GCPCloud KMSseal "gcpckms"
AzureAzure Key Vaultseal "azurekeyvault"
AlibabaAlibaba Cloud KMSseal "alicloudkms"
OCIOracle Cloud KMSseal "ocikms"

Avantages :

  • Intégration native avec le cloud
  • Haute disponibilité gérée
  • Audit trails inclus
  • Disponible en Community Edition

Inconvénients :

  • Dépendance au provider cloud
  • Latence réseau
  • Coûts d’utilisation

Un cluster Vault peut désceller un autre cluster Vault.

Déscellement Transit entre clusters Vault

Avantages :

  • Pas de dépendance cloud
  • Contrôle total
  • Gratuit (Community Edition)

Inconvénients :

  • Complexité : il faut un cluster Vault toujours disponible
  • Dépendance circulaire possible
  • Le cluster unsealer doit être scellé manuellement (Shamir)

L’auto-unseal via HSM (PKCS#11) est une fonctionnalité Vault Enterprise.

TypeExemplesNotes
HSM cloudAWS CloudHSM, GCP Cloud HSMCoût élevé
HSM on-premiseThales Luna, nCipherMatériel dédié

Avantages :

  • Sécurité maximale (clé ne quitte jamais le HSM)
  • Compliance FIPS 140-2 Level 3+

Inconvénients :

  • Enterprise uniquement
  • Coût très élevé
  • Complexité opérationnelle

Vault Enterprise 1.16+ introduit Seal HA : la possibilité de configurer plusieurs mécanismes d’auto-unseal pour la résilience.

  • Au moins deux seals auto-unseal configurés
  • Shamir n’est pas supporté dans ce mode
  • Si un KMS est indisponible, l’autre prend le relais

Seal HA réduit le risque de dépendance à un seul service, mais c’est une fonctionnalité Enterprise uniquement.

Pour la plupart des déploiements de production, HashiCorp pousse vers auto-unseal car il réduit fortement la complexité opérationnelle par rapport à Shamir.

CritèreShamirAuto-unseal
Redémarrage automatique
Scaling horizontalDifficile
Kubernetes-ready
Disaster RecoveryLent (coordination)✅ Rapide
Dépendance externe
SécuritéÉlevéeÉlevée (différente)

Shamir reste approprié dans certains cas :

SituationPourquoi Shamir
Lab / DéveloppementPas besoin d’auto-restart
Politique “zero cloud”Pas de KMS disponible
Compliance extrêmeAucune dépendance externe tolérée
Environnement air-gappedPas de connectivité KMS possible
Budget très restreintPas de coût KMS
Cluster unsealer TransitLe “unsealer” doit être Shamir

Scénario : Votre clé KMS est supprimée, votre compte cloud suspendu, ou le KMS est down pendant longtemps.

Impact : Vault ne peut pas démarrer. Vos secrets sont inaccessibles, même depuis les backups.

Mitigations :

  1. Backups réguliers du stockage Raft (les données restent récupérables si vous retrouvez l’accès KMS)

  2. Procédure de migration documentée vers un autre seal/KMS

  3. Gouvernance forte sur la clé KMS : protection contre suppression accidentelle, politique de retention, accès restreint

  4. Seal HA (Enterprise) : plusieurs seals configurés pour la résilience

Scénario : Un attaquant obtient accès au KMS.

Impact : Il peut déchiffrer la root key stockée. S’il a aussi accès au stockage Vault, il peut potentiellement déchiffrer les secrets.

Mitigations :

  • Accès KMS restreint : IAM strict, least privilege
  • Audit logging : surveiller tous les accès à la clé KMS
  • Rotation KMS régulière : limiter la fenêtre d’exploitation
  • Seal Wrap (Enterprise) : chiffrement additionnel par HSM au runtime

Scénario : Les recovery keys sont perdues ou inaccessibles.

Impact : Impossible de générer un nouveau root token si nécessaire. Le Vault fonctionne mais certaines opérations d’urgence sont bloquées.

Mitigations :

  • Stockage sécurisé : coffre-fort physique, password manager enterprise
  • Plusieurs copies : réparties entre N personnes (threshold K pour rekey)
  • Test régulier : vérifier que les recovery keys sont accessibles
  • Documentation : procédure claire de qui détient quoi
seal "awskms" {
region = "eu-west-1"
kms_key_id = "alias/vault-unseal-key"
# Préférer IAM role attaché à l'instance
# plutôt que access_key/secret_key en dur
}

IAM Policy minimum :

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:eu-west-1:123456789:key/your-key-id"
}
]
}

Recommandation : utilisez un IAM role attaché à l’instance EC2 ou un service account Kubernetes avec IRSA plutôt que des credentials statiques.

Il est possible de migrer d’un type de seal à un autre.

  1. Ajouter le nouveau seal dans vault.hcl (en plus de Shamir implicite) :

    seal "awskms" {
    region = "eu-west-1"
    kms_key_id = "alias/vault-unseal-key"
    }
  2. Redémarrer Vault : le serveur détecte une migration en attente

  3. Exécuter la migration avec le flag -migrate :

    Fenêtre de terminal
    vault operator unseal -migrate
  4. Fournir les unseal keys Shamir existantes (threshold requis)

  5. Vault génère des recovery keys pour le nouveau seal

  6. Sécuriser les recovery keys et supprimer l’ancienne logique Shamir

  1. Ajouter le nouveau seal dans vault.hcl en plus de l’ancien :

    seal "awskms" { ... } # ancien — garder temporairement
    seal "gcpckms" { ... } # nouveau
  2. Redémarrer Vault : migration détectée

  3. Exécuter la migration :

    Fenêtre de terminal
    vault operator unseal -migrate
  4. Fournir les recovery keys existantes (threshold requis)

  5. Une fois la migration réussie, supprimer l’ancien seal de la config

  6. Redémarrer pour valider la configuration finale

  • Nombre de parts adapté (5 recommandé pour la plupart des cas)
  • Threshold adapté (3 pour 5 parts)
  • Chiffrement PGP des unseal keys à l’initialisation
  • Chaque part stockée séparément (personnes/lieux différents)
  • Procédure de déscellement documentée
  • Drills périodiques pour vérifier la capacité à reconstituer le quorum
  • Personnes détentrices identifiées et joignables
  • Gestion du cycle de vie des détenteurs (départ, rotation)
  • Clé KMS dédiée (pas partagée avec d’autres services)
  • Accès KMS au minimum (least privilege)
  • Pas de credentials en clair dans vault.hcl (identité cloud ou env://)
  • Audit logging activé sur le KMS
  • Protection contre suppression accidentelle de la clé KMS
  • Recovery keys générées avec chiffrement PGP
  • Recovery keys sécurisées et testées
  • Procédure de migration documentée
  • Plan B si KMS indisponible (même temporairement)
  • SLA du KMS vérifié et acceptable
  1. Shamir = contrôle total, auto-unseal = automatisation — les deux ont une sécurité élevée, mais des trade-offs différents
  2. Recovery keys ≠ unseal keys : elles ne déscellent pas Vault et ne permettent pas de récupérer un cluster si le mécanisme de seal est perdu
  3. Pour la plupart des déploiements, auto-unseal offre une meilleure expérience opérationnelle que Shamir
  4. Dépendance KMS : risque critique à évaluer et mitiger — perte du KMS = perte du cluster, même avec backups
  5. Transit : bonne alternative sans dépendance cloud (mais avec un cluster unsealer à maintenir)
  6. HSM et Seal HA : fonctionnalités Enterprise pour les besoins avancés
  7. Ne stockez jamais les credentials seal en clair : utilisez les identités cloud natives ou les références indirectes

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn