ansible-vault-id
Vault-Id Multipassword
[vaul-id-multi-password]
Objectif: Identifier les password!! multi secrets
[command]
- dans un dossier group_vars créer un fichier data.yml;
- créer un fichier secret.yml dans un repertoire donnée (attention à ne pas commiter c'est le fichier ou votre password est en clair)
- Taper cette commande:
[vault-id]: identifier les password
[step1] = on va créer un fichier dans le dossier .ssh/ de notre machine et restreint les droit à 600.
sudo nano /home/vagrant/.ssh/pwd.txt
[step2] = Dans le dossier de notre projet, dans /projet/group_vars/all/
On va céer un fichier data.yml pour stocker nos mot de passes vaulter.
et ajouter la valeur myvariable: "mon secret123"
sudo nano group_vars/all/data.yml
[step3]= vaulter le fichier avec encrypt.
ansible-vault encrypt --vault-id ~/.ssh/pwd.txt group_vars/all/data.yml
Response: "Encryption successfull"
Autres commandes: Edit view, decrypt
Vous pouvez decrypt avec la commande
ansible-vault decrypt --vault-id ~/.ssh/pwd.txt group_vars/all/data.yml
Vous pouvez editer avec la commande
ansible-vault edit --vault-id ~/.ssh/pwd.txt group_vars/all/data.yml
Vous pouvez voir le contenue avec la commande
ansible-vault view --vault-id group_vars/vault.yml group_vars/all/data.yml
Vous pouvez passer un prompt avec un password avec la commande
ansible-vault encrypt @prompt --vault-id ~/.ssh/pwd.txt group_vars/all/data.yml
Setup ansible inventory
ansible -i hosts.ini localhost --vault-id ~/.ssh/pwd.txt -m debug -a "msg='{{ myvariable }}'"
Setup ansible playbook
playbook.yml:
- name: test
hosts: all
connection: local
tasks:
- name: debug
debug:
msg: "{{app}} {{bd}}"
DOC: ansible
ansible -i hosts.ini localhost --vault-id ~/.ssh/pwd.txt -m debug -a "msg='{{ myvariable }}'"
[expecify-id]: utiliser des ID
Créer dans le dossier /home/vagrant/.ssh/ le ficheir pwd-data.txt et ajouter le mot de passe.
et aussi dans le dossier projet on va créer un fichier sans le committer le mieux est de l'ignorer. pwd-bd.txt et ajouter un mot de passe. créer un autre fichier pwd-app.txt au même endroit et ajouter un mot de passe autre.
dans le folder /home/vagrant/.ssh/, créer encore le fichier pwd-bd.txt et pwd-app.txt
dans le folder group_vars/all/ créer un fichier de stokage de clés app.yml et bd.yml
ensuite taper cette commande:
encrypt app.yml avec le mot de passe ID : app@pwd-app.txt
ansible-vault encrypt --vault-id ~/.ssh/app@pwd-app.txt group_vars/all/app.yml
encrypt bd.yml avec le mot de passe ID : bd@pwd-bd.txt
ansible-vault encrypt --vault-id ~/.ssh/bd@pwd-bd.txt group_vars/all/bd.yml
Setup playbook
ansible-playbook -i hosts.ini --vault-id ~/.ssh/app@pwd-app.txt --vault-id ~/.ssh/bd@pwd-bd.txt playbook.yml
Comment utiliser le --vault-id
[step]
L'utilisation simple --vault-id pour gérer plusieurs mots de passes. comme les password pour docker gitlab ou vos keys ssh.
[pratique] Ce que je fais ici c'est la création d'un fichier secret.yml dans le dossir group_vars et j'ajpoute un mot de passe. C'est ce fichier que l'on va vaulter grâce à un autre fichier ou nous allons stocker le mot de passe en clair qui est est créer pdw.txt et je met un password.
# Dans le fichier secret.yml
# on va mettre une variable mysecret: "mon secret"
sudo nano group_vars/secret.yml
# Dans le fichier pwd.txt on va ajouter un mot de passe ex: mekoo.
sudo nano pwd.txt
[exec-command-ansible]
# Nous pouvons lancer la commande ansible-vault pour vaulter le fichier secret.yml
ansible-vault encrypt --vault-id pwd.txt group_vars/secret.yml
Voici le output
[output] Encryption successful
# sortie du fichier secret.yml
$ANSIBLE_VAULT;1.1;AES256
31653166326661343235636363313061356664613432613032623230356234313635346532353337
3661363263303466643361646234376239623562356431310a333738353337626433326166656634
30383032396164663631653937366462386562356166623032386162376230313739393264663530
3961333633653932320a303062643966666331366236653438633864656239656234333462656233
38353032373039623936613438353765646233303264666466396661366633356365
[Edit-secret.yml]
Nous pouvons éditer le mot de passe si on va le changer.
# On utilise nano comme éditeur
env EDITOR=nano ansible-vault edit --vault-id pwd.txt group_vars/secret.yml
[@promt-secret.yml]
Nous pouvons lui passer un prompt (mot de passe à notre fichier vaulter) il va nous demander de taper un password:
Vault password (default):
# On utilise @prompt pour passer un mot de passe au fichier crypter.
env EDITOR=nano ansible-vault edit --vault-id @prompt group_vars/secret.yml
[Check-variable-mysecret]
Pour vérifier que notre varibale est bien présent et le mot de passe on tape cette commande.
ansible -i "192.168.50.111," localhost --vault-id pwd.txt -m debug -a "msg=mysecret"
vault-id en utilisant les id
Les id ici sont les prefixes de nos fichier contenant les mots de passes.
on va créer un autre fichier pwd-data.txt et ajouter un autre mot de passe cela va nous permettre de spécifier id du fichier qui contient le mot de passe.
[doc-officiel] vault-id
# ajouter in mot de passe ex: yannick
sudo nano pwd-data.txt
#On va exec la commande ansible
ansible -i "192.168.50.111," localhost --vault-id data@pwd-data.txt -m debug -a "msg=mysecret"
[playbook]
pour jouer avec le playbook
- create file: pwd-docker.txt (password key vault)
- create file : group_vars/vault-docker.yml (secret docker)
- create file pwd-gitlab.txt (password file gitlab)
- create file : group_vars/vault-gitlab.yml (secret gitlab)
ansible-vault encrypt --vault-id docker@pwd-docker.txt group_vars/vault-docker.yml
ansible-playbook --vault-id docker@pwd-docker.txt playbook-vault.yml
ansible-playbook -i hosts.ini --vault-id docker@pwd-docker.txt playbook-vault.yml
## multi key vault
ansible-playbook -i hosts.ini --vault-id docker@pwd-docker.txt --vault-id docker@pwd-gitlab.txt playbook-vault.yml
Alternative secret sécurité
Vous pouvez stocker votre mot de passe dans un fichier externe sans committer et récuperer votre variable.
vars:
mysecretdocker: "{{ lookup('file', '~/.ssh/pwd-docker.yml')}}"
mysecretgitlab: "{{ lookup('file', '~/.ssh/pwd-gitlab.yml')}}"
tasks:
- debug:
msg: "motd value is {{ mysecretdocker }} {{ mysecretgitlab }}"