Resources attached to the Road To DevOps tutorial https://blog.noobtoroot.xyz/road-to-devops/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

8.0 KiB

TP Ansible Vault

Sécuriser les informations sensibles.

  • Créer un dossier nommé all dans group_vars.
.
└── inventories
    └── formation
        ├── group_vars
      └── all        <---- ici
        └── hosts
  • Créer avec la commande ansible-vault create :

    • un fichier nommé vault
    • dans group_vars/all.
  • 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ètre vault_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 dans group_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 :