ansible
Cryptage secret
Recherche…
Remarques
Ansible propose Vault (à ne pas confondre avec HashiCorp Vault !) Pour gérer le cryptage des données sensibles. Vault vise principalement à chiffrer toutes les données structurées telles que les variables, les tâches et les gestionnaires.
Cryptage de données structurées sensibles
Tout d'abord, créez un fichier de clés, par exemple vault_pass_file
, qui contient idéalement une longue séquence de caractères aléatoires. Dans les systèmes Linux, vous pouvez utiliser pwgen
pour créer un fichier de mot de passe aléatoire:
pwgen 256 1 > vault_pass_file
Ensuite, utilisez ce fichier pour chiffrer les données sensibles, par exemple, groups_vars/group.yml
:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-vault encrypt group_vars/group.yml
A partir de maintenant, pour lancer un playbook, vous avez besoin du vault_pass_file
:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-playbook -i inventories/nodes my-playbook.yml
Notez que vous pouvez également utiliser l' --vault-password-file vault_pass_file
au lieu de définir la variable d'environnement ANSIBLE_VAULT_PASSWORD_FILE
.
Pour éditer ou déchiffrer le secret sur le disque, vous pouvez utiliser respectivement ansible-vault edit
et ansible-vault decrypt
respectivement.
Utilisation de canaux de recherche pour déchiffrer des données chiffrées non structurées
Avec Vault, vous pouvez également crypter des données non structurées, telles que des fichiers de clés privées, tout en étant en mesure de les décrypter dans votre jeu avec le module de lookup
.
---
- name: Copy private key to destination
copy:
dest=/home/user/.ssh/id_rsa
mode=0600
content=lookup('pipe', 'ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-vault view keys/private_key.enc')
Utilisation de local_action pour déchiffrer les modèles chiffrés dans un coffre
Vous pouvez exécuter un jeu qui repose sur des modèles chiffrés à l'aide d'un local_action
en utilisant le module local_action
.
---
- name: Decrypt template
local_action: "shell {{ view_encrypted_file_cmd }} {{ role_path }}/templates/template.enc > {{ role_path }}/templates/template"
changed_when: False
- name: Deploy template
template:
src=templates/template
dest=/home/user/file
- name: Remove decrypted template
local_action: "file path={{ role_path }}/templates/template state=absent"
changed_when: False
S'il vous plaît noter le changed_when: False
. Ceci est important dans le cas où vous exécutez des tests d'idempotence avec vos rôles de réponse - sinon, chaque fois que vous exécutez le livre de jeu, un changement est signalé. Dans group_vars/all.yml
vous pouvez définir une commande globale decrypt pour la réutiliser, par exemple, view_encrypted_file_cmd
.
group_vars / all.yml
---
view_encrypted_file_cmd: "ansible-vault --vault-password-file {{ lookup('env', 'ANSIBLE_VAULT_PASSWORD_FILE') }} view"
Maintenant, lorsque vous exécutez une lecture, vous devez définir la variable d'environnement ANSIBLE_VAULT_PASSWORD_FILE
pour qu'elle pointe vers votre fichier de mot de passe de coffre-fort (idéalement avec un chemin absolu).