Ansible: variables chiffrées hors d’un vault-file

Ansible dispose d’un moyen pour chiffrer les mots de passe appelé le vault. Les vaults sont des fichiers, généralement disposés au sein de l’inventaire ansible qui sont entièrement chiffrés.

Dans un système entièrement industrialisé, on retrouve généralement ansible accompagné d’un SCM comme git afin de versionner le code et l’inventaire de l’infrastructure.L’utilisation d’un ou plusieurs vault files pour les mots de passe pose un souci, les variables chiffrées (nom et valeurs) sont tous au sein du vault et donc tous chiffrés. Lors d’un changement sur un mot de passe unitaire au sein d’une vault, le différentiel du SCM montrera un changement global de la vault, et non le changement unitaire du mot de passe.

Une fonction mal documentée existe heureusement dans Ansible et va vous permettre de retrouver un comportement similaire à hiera et eyaml-encrypt avec Puppet, il s’agit du tag !vault-encrypt renommé en !vault à partir d’Ansible 2.3.

Ce tag va vous permettre de ne chiffrer que le contenu d’une variable contenu au sein d’un fichier YAML complet non chiffré. Pour créer une variable chiffrée, on va comme pour les vaults utiliser le binaire ansible-vault.

Cette commande va chiffrer la chaîne monpassword avec l’utilitaire. Notez 2 choses:

  • L’option -n de la commande echo est importante auquel cas vous aurez un \n supplémentaire en fin de chaîne chiffrée
  • Si vous n’avez pas de vault-password-file spécifié dans votre configuration globale, ansible-vault vous demandera le mot de passe associé au vault chiffré, et donc la clef de chiffrement/déchiffrement.

Maintenant que nous avons notre chaîne chiffrée, il n’y a plus qu’à l’utiliser quelque part dans notre inventaire ansible.

Vous pouvez désormais chiffrer et versionner vos passwords chiffrés proprement.

Google Plus

Cet article fait partie de la catégorie Ansible et a été rédigé. Enregistrer le permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *