8.0 KiB
TP Ansible Vault
Sécuriser les informations sensibles.
- Créer un dossier nommé
all
dansgroup_vars
.
.
└── inventories
└── formation
├── group_vars
│ └── all <---- ici
└── hosts
-
Créer avec la commande
ansible-vault create
:- un fichier nommé
vault
- dans
group_vars/all
.
- un fichier nommé
-
Ajouter une variable dans le fichier.
.
└── inventories
└── formation
├── group_vars
│ └── all
│ └── vault <---- ici
└── hosts
vault_robert_password: Mon super password !
-
Vérifier le contenu du fichier vault
-
avec la commande
cat
, -
avec la commande
ansible-vault view
.
-
-
Il est possible de modifier le contenu du fichier chiffré avec la commande
ansible-vault edit
.
Avec cat
$ cat inventories/formation/group_vars/all/vault
$ANSIBLE_VAULT;1.1;AES256
64373435616463653634613737613565626662326539376138393733333762343364303961306536
6337336233323932346134313838666538363863376562360a326561356365626462373963636233
63613139383437303262616366623538613761336361626665653631343061326535373363643039
3633363965363237370a623063343839626634633435373834386332313933643661356266653265
35333234643234376266343935303837373561333265653338323235656638316539646137313234
3861623031393635646363343662366161343130653864336331
Avec ansible-vault
$ ansible-vault view inventories/formation/group_vars/all/vault
Vault password:
vault_robert_password: Mon super password !
-
Créer un playbook nommé
playbook-vault.yaml
. -
Ajouter une tâche de debug qui affichera la variable stockée dans le fichier
vault
. -
Lancer le playbook !
-
La structure du dossier de travail est :
.
├── inventories
│ └── formation
│ ├── group_vars
│ │ └── all
│ │ └── vault
│ └── hosts
└── playbook-vault.yaml
Créer playbook-vault.yaml
- hosts: debian9
tasks:
- name: Display secured password
debug:
msg: "Robert's password is: {{ vault_robert_password }}"
Lancer le playbook
$ ansible-playbook -i inventories/formation/hosts playbook-vault.yaml
PLAY [debian9] *****************************************************
ERROR! Attempting to decrypt but no vault secrets found
Il nous faut donc préciser le mot de passe de déchiffrement vault en utilisant au choix
l'option --ask-vault-pass
ou l'option --vault-password-file
.
Lancer le playbook avec --ask-vault-pass
$ ansible-playbook -i inventories/formation/hosts playbook-vault.yaml --ask-vault-pass
Vault password:
PLAY [debian9] *****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [ansible-3]
TASK [Display secured password] ************************************************
ok: [ansible-3] => {
"msg": "Robert's password is: Mon super password !"
}
PLAY RECAP *********************************************************************
ansible-3 : ok=2 changed=0 unreachable=0 failed=0
-
Afin d'éviter d'avoir à taper le mot de passe vault à chaque fois, mettons le dans un fichier !
-
Relancer le playbook en précisant l'option
--vault-password-file
.
Créer un fichier contenant le mot de passe vault
$ echo "12345678" > vault-password
$ chmod 600 vault-password
Attention
! Dans un environnement Git attention à ne pas versionner le fichier contenant le mot de passe, en utilisant .gitignore
par exemple.
Relancer le playbook avec l'option
--vault-password-file
$ ansible-playbook -i inventories/formation/hosts playbook-vault.yaml \
--vault-password-file vault-password
PLAY [debian9] *****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [ansible-3]
TASK [Display secured password] ************************************************
ok: [ansible-3] => {
"msg": "Robert's password is: Mon super password !"
}
PLAY RECAP *********************************************************************
ansible-3 : ok=2 changed=0 unreachable=0 failed=0
-
Pour éviter d'avoir à préciser le fichier de mot de passe vault à chaque exécution du playbook, il est possible d'en préciser le nom une fois pour toutes dans le fichier de configuration
ansible.cfg
à la racine du projet local. -
Créer le fichier
ansible.cfg
et ajouter le paramètrevault_password_file
dans la section[defaults]
. -
La structure du dossier de travail devient :
.
├── ansible.cfg <----- c'est ici que ça se passe
├── inventories
│ └── formation
│ ├── group_vars
│ │ └── all
│ │ ├── vars
│ │ └── vault
│ └── hosts
├── playbook-vault.yaml
└── vault-password
Référencer le fichier de mot de passe vault
dans ansible.cfg
[defaults]
vault_password_file = vault-password
Bonnes pratiques avec vault
-
Lorsqu'on utilise vault, les variables et leurs valeurs sont offusquées, il n'est pas forcément évident d'assurer la maintenance sur ces fichiers de variables.
-
Les bonnes pratiques Ansible préconisent de passer par une couche d'indirection, c'est à dire d'ajouter un fichier non chiffré dont les variables référenceront les variables vault.
-
Créer un nouveau fichier nommé
vars
dansgroup_vars/all
. -
Ajouter la variable et la faire pointer vers la variable vault.
-
La structure du dossier de travail devient :
.
├── ansible.cfg
├── inventories
│ └── formation
│ ├── group_vars
│ │ └── all
│ │ ├── vars <----- fichier d'indirection
│ │ └── vault
│ └── hosts
├── playbook-vault.yaml
└── vault-password
Créer inventories/formation/group_vars/all/vars
robert_password: "{{ vault_robert_password }}"
La variable robert_password
pointe sur
la variable vault_robert_password
stockée dans le fichier vault
.
-
Modifier le fichier playbook pour utiliser la variable provenant du fichier
vars
. -
Lancer le playbook.
Modifier playbook-vault.yaml
---
- hosts: debian9
tasks:
- name: Display secured password
debug:
msg: "Robert's password is: {{ robert_password }}"
Lancer le playbook
$ ansible-playbook -i inventories/formation/hosts playbook-vault.yaml \
--vault-password-file vault-password
PLAY [debian9] *****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [ansible-3]
TASK [Display secured password] ************************************************
ok: [ansible-3] => {
"msg": "Robert's password is: Mon super password !"
}
PLAY RECAP *********************************************************************
ansible-3 : ok=2 changed=0 unreachable=0 failed=0
Pour aller plus loin
Il est possible d'aller encore plus loin
avec les vault-id
: