Ansible vault
Rédigé par uTux 2 commentairesAnsible vault permet de stocker de manière chiffrée certaines informations, par exemple des variables utilisables dans vos playbooks.
Exemple d'information sensible lisible dans un playbook (sans vault):
---
- hosts: localhost
remote_user: root
tasks:
- name: ensure 'utux' user exists
user:
name: utux
append: yes
groups: sudo
shell: /bin/bash
password: "{{ utux_passwd }}"
generate_ssh_key: yes
state: present
vars:
utux_passwd: "{{ 'secret' | password_hash('sha256') }}"
C'est lisible mais le mot de passe ('secret') se promène en clair, ce qui n'est pas top surtout si vous stockez votre projet sur un dépôt. La solution est d'utiliser ansible vault pour stocker dans un fichier sécurisé le mot de passe.
Création d'un vault:
$ mkdir -p group_vars/all
$ ansible-vault --ask-vault-pass create group_vars/all/vault
On y met une variable contenant notre mot de passe:
vault_utux_passwd: "{{ 'secret' | password_hash('sha256') }}"
Comme on peut le voir, notre fichier est bien chiffré:
$ cat group_vars/all/vault
$ANSIBLE_VAULT;1.1;AES256
66623865616561613766343831613161343936636563373530643933323037333363363139666235
6135616635313332626637636466666236346365373037620a356436363133343161636239313133
36343539626564316431323135626533366462306631323761633330623231386434613734653934
3263383130386164620a663561363238303035336631326437643337646430653139643939363039
62663533626261373863323137316562643038613737333139303536623162633931
Et si on veut l'éditer:
$ ansible-vault --ask-vault-pass edit group_vars/all/vault
On adapte notre playbook:
---
- hosts: localhost
remote_user: root
tasks:
- name: ensure 'utux' user exists
user:
name: utux
append: yes
groups: sudo
shell: /bin/bash
password: "{{ utux_passwd }}"
generate_ssh_key: yes
state: present
vars:
utux_passwd: "{{ vault_utux_passwd }}"
On exécute notre playbook:
ansible-playbook myuser.yml --ask-vault-pass
Ça marche, mais c'est un peu lourd car il faut taper le mot de passe vault à chaque exécution du playbook. Heureusement on peut le définir dans un fichier. On prendra soin de faire un gitignore pour ce fichier, voire même le placer dans un autre dossier:
$ echo "motdepassevault" > vault_passwd
$ echo "vault_passwd" >> .gitignore
On doit ensuite spécifier à Ansible où trouver ce fichier. Vous pouvez le définir au niveau du /etc/ansible/ansible.cfg ou dans le ansible.cfg local du projet (ce que je préfère faire, ainsi il est commité dans le dépôt et tout le monde a la bonne version):
# ansible.cfg
[defaults]
vault_password_file = vault_passwd
Vous devriez maintenant pouvoir exécuter votre playbook sans le --ask-vault-pass.