Dans cet article, je vous présenterai un outil TRES pratique pour éditer des secrets obfusqués par ansible-vault.
Nous avons deux possibilités avec Ansible pour gérer des secrets:
- Obfusquer l’intégralité du fichier (clés et valeurs)
- Obfusquer uniquement la valeur, et laisser la clé lisible
Obfusquer le fichier entier
Dans ce cas, c’est très simple. On prend un fichier, on saisit le contenu, et une fois le paramétrage fait pour le mot de passe de chiffrement on utilise la commande:
echo "foo: bar" > mon_fichier_secret.yml
ansible-vault encrypt mon_fichier_secret.yml
C’est facile, mais dès lors, on ne peut plus voir les clés YAML, car le contenu ressemble à ceci:
cat mon_fichier_secret.yml
$ANSIBLE_VAULT;1.1;AES256
61663861633532356133666366666462623834616166303730376233646666353338353236313737
3164613037633861646162636330316462306537336334650a376364653463306534333335656534
36643334643436613666326230366464653864643861336262326434643534323063393462323831
6431373231383262380a653261366164333134626530633562613932623966636563306663633839
3730
Du coup, on ne peut pas transmettre un fichier tel quel pour une personne qui devrait connaître les clés du fichier mais pas les valeurs afin de créer leur propre fichier.
Pour cela on va choisir d’obfusquer uniquement les valeurs
Obfusquer les valeurs uniquement
Dans ce cas, on utilisera une autre commande:
ansible-vault encrypt_string --name foo bar > mon_fichier_secret.yml
Vous aurez donc ceci dans le fichier:
cat mon_fichier_secret.yml
foo: !vault |
$ANSIBLE_VAULT;1.1;AES256
37316333303436306463633439393336353834346131343037323064356163383839356564393133
3839623665663732313564653265346136323135323931620a656439303663353963666661653033
35353661623437383136626463626130653833646138633532303331323061623431353462383665
6136643731336631630a663064616539356630376362353830653336616435396530663137373761
3633
Mais en revanche, il sera impossible d’ouvrir ce fichier à nouveau pour l’éditer avec ansible-vault
ansible-vault edit mon_fichier_secret.yml
[WARNING]:
There was a vault format error: Vault format unhexlify error: Non-hexadecimal digit found
ERROR! Vault format unhexlify error: Non-hexadecimal digit found for /home/korogoth/mon_fichier_secret.yml
Vous aurez besoin pour cela d’utiliser un outil fabuleux, nommé vaulti. Cet outil permet d’ouvrir en mode édition des fichiers qui ont des parties vaultées et des parties lisibles.
vaulti mon_fichier_secret.yml
---
foo: !ENCRYPT bar
...
Vous pourrez rajouter des lignes à ce fichier, et préfixer les parties à obfusquer par !ENCRYPT pour indiquer à vaulti qu’il faut utiliser à cet endroit précis la commande ansible-vault encrypt_string.
Pratique hein ?