Aller au contenu principal

ansible-vault-id

Vault-Id Multipassword

[vaul-id-multi-password]

Objectif: Identifier les password!! multi secrets

[command]

  1. dans un dossier group_vars créer un fichier data.yml;
  2. 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)
  3. 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 }}"