Aller au contenu
Infrastructure as Code medium

chef-vault : chiffrer un secret pour les seuls nœuds autorisés

9 min de lecture

Logo Chef

Les data bags chiffrés ont un défaut structurel : une seule clé déchiffre tout. Le serveur web qui la possède peut lire les secrets de la base de données. chef-vault supprime cette faiblesse : il chiffre chaque secret pour les clés publiques des nœuds autorisés, individuellement. Aucune clé partagée à distribuer, et une révocation immédiate. Public visé : avancés disposant d'un serveur CINC.

  • Comprendre ce que chef-vault change par rapport à la clé partagée.
  • Chiffrer un secret pour un ensemble de nœuds.
  • Consommer le secret dans une recette.
  • Révoquer l'accès d'un nœud.

Avec un data bag chiffré classique, vous déployez le même fichier secret sur tous les nœuds. Conséquence directe : tout nœud qui l'a peut tout déchiffrer, y compris ce qui ne le concerne pas. Ajouter une machine, c'est élargir la surface. Retirer une machine, c'est devoir changer la clé partout.

chef-vault renverse la logique. Chaque nœud possède déjà une paire de clés, créée lors de son enrôlement : c'est son identité auprès du serveur. chef-vault s'en sert. Il chiffre le secret une fois avec une clé de session, puis chiffre cette clé de session séparément pour la clé publique de chaque autorisé.

Résultat : rien à distribuer. Le nœud déchiffre avec la clé qu'il possède déjà, et lui seul.

La commande knife vault create chiffre le secret et désigne les autorisés. Les nœuds sont sélectionnés par une recherche, pas par une liste figée :

Fenêtre de terminal
knife vault create coffres bdd \
'{"user":"appuser","password":"S3cr3t-Vault-2026"}' \
--search 'recipes:webstack*' \
--admins stephane \
--mode client

Le --search est le cœur du mécanisme : « tous les nœuds portant la recette webstack » sont autorisés. Les --admins sont les humains qui pourront relire et modifier le secret.

C'est en ouvrant le capot qu'on comprend. chef-vault crée deux éléments.

Le premier, bdd, contient le contenu chiffré en aes-256-gcm. Sans clé, il est illisible :

Fenêtre de terminal
knife data bag show coffres bdd
id: bdd
password:
cipher: aes-256-gcm
encrypted_data: 8JqCSvFO9YVFW2rMF8fFU9DZGFAxXUL+CLViGjrn5PKfxecH

Le second, bdd_keys, est la pièce maîtresse. Il liste qui est autorisé, et contient pour chacun la clé de session rechiffrée avec sa clé publique :

Fenêtre de terminal
knife data bag show coffres bdd_keys
admins: stephane
clients: web-srv1
search_query: recipes:webstack*
stephane: idt5bTvYU2gw2BjPEfhWK4l4BcVW4QqKbeK1610Gkcaf2gD+lx18ZG2B...
web-srv1: NjNIcck4mAiddoU8gL2n28jlAXka3PAi3wiParp4raWcp9RmYEP57p+Z...

Deux entrées, deux chiffrements distincts du même secret de session. C'est exactement ce que la clé partagée ne savait pas faire.

Côté recette, rien de compliqué : on charge l'élément de coffre. Le nœud utilise sa clé client pour le déchiffrer, sans qu'aucun fichier secret ne lui ait été transmis.

cookbooks/vaultdemo/recipes/default.rb
creds = ChefVault::Item.load('coffres', 'bdd')
file '/etc/appdb/vault.yml' do
owner 'root'
group 'root'
mode '0600'
sensitive true
content <<~CONF
username: #{creds['user']}
password: #{creds['password']}
CONF
end

À la convergence, le fichier apparaît, en 0600, avec le secret déchiffré :

Fenêtre de terminal
sudo cinc-client
sudo cat /etc/appdb/vault.yml
Recipe: vaultdemo::default
* file[/etc/appdb/vault.yml] action create
- create new file /etc/appdb/vault.yml
username: appuser
password: S3cr3t-Vault-2026

L'attribut sensitive true reste indispensable : sans lui, Chef afficherait le contenu du fichier dans la sortie de convergence, donc dans les logs.

C'est ici que chef-vault se distingue de façon décisive. Retirons le nœud des autorisés :

Fenêtre de terminal
knife vault remove coffres bdd --clients web-srv1 --mode client

L'item de clés ne contient plus aucun client :

admins: stephane
clients:

À la convergence suivante, le nœud ne peut plus déchiffrer, et il le dit clairement :

FATAL: ChefVault::Exceptions::SecretDecryption:
coffres/bdd is not encrypted with your public key.
Contact an administrator of the vault item to encrypt for you!

Aucune intervention sur la machine n'a été nécessaire. Avec une clé partagée, révoquer un nœud aurait supposé de changer la clé, puis de la redistribuer à tous les autres. Ici, on retire une entrée, et c'est fini.

Après rafraîchissement, le nœud figure de nouveau parmi les autorisés et la convergence repasse au vert.

Les erreurs de chef-vault tournent presque toutes autour d'une même question : ce nœud est-il autorisé ? Voici comment les lire.

SymptômeCause probableSolution
SecretDecryption: not encrypted with your public keyLe nœud n'est pas (ou plus) autoriséknife vault update ... --search ... pour rechiffrer
Un nœud fraîchement enrôlé ne déchiffre pasLe coffre n'a pas été rafraîchi depuis son arrivéeMême correction : knife vault update
knife vault indisponiblechef-vault absent de l'outillageIl est fourni avec CINC Workstation
Le secret apparaît dans les logssensitive true oubliéL'ajouter, puis changer le secret exposé
Impossible d'utiliser chef-vaultVous êtes en local modeLe mécanisme exige les clés publiques d'un serveur
  1. Le data bag chiffré repose sur une clé partagée : tout nœud qui l'a peut tout déchiffrer.
  2. chef-vault chiffre la clé de session pour la clé publique de chaque autorisé : rien à distribuer.
  3. Les autorisés se désignent par une recherche (--search), pas par une liste figée.
  4. Deux éléments sont créés : le contenu chiffré, et l'item _keys qui dit qui peut lire.
  5. La révocation est immédiate et sans toucher à la machine : le nœud échoue avec SecretDecryption.
  6. Un nœud arrivé après la création du coffre n'est pas autorisé automatiquement : rafraîchir avec knife vault update.
  7. chef-vault exige un serveur : c'est un argument concret pour en monter un.

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn