Protégez vos secrets avec Ansible Vault

Garder vos secrets loin des mauvaises mains est une priorité absolue. Mais comment sécuriser vos secrets exactement ? Les sauvegarder dans un fichier texte local ? Sans chiffrement, cette option est trop risquée. Pourquoi ne pas utiliser Ansible Vault pour chiffrer vos variables et fichiers ?

Dans ce tutoriel, vous apprendrez à sécuriser du contenu sensible, comme vos mots de passe ou clés, avec Ansible Vault.

Lisez la suite et éloignez les regards curieux de vos secrets !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d’avoir ce qui suit.

  • A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
  • Ansible installé sur votre machine.

Configuration de l’éditeur par défaut d’Ansible Vault

En tant qu’administrateur système, vous pourriez travailler sur différents playbooks Ansible contenant les noms d’utilisateur et mots de passe de différents serveurs. Vous ne pouvez pas commettre ces fichiers au système de contrôle de version au format texte brut car cela n’est pas sécurisé. Et pour cette raison, Ansible Vault est très utile.

Ansible Vault est conçu pour être intégré à votre flux de travail existant afin de stocker vos données dans un fichier chiffré. Mais avant de créer votre premier Ansible Vault, vous devrez définir votre éditeur par défaut d’Ansible Vault.

1. Ouvrez votre terminal et SSH vers votre machine.

2. Ensuite, ouvrez le fichier ~/.bashrc à l’aide d’un éditeur de texte. Le fichier ~/.bashrc est un script shell qui s’exécute chaque fois qu’une nouvelle session de terminal démarre. Ce script shell initialise une session shell interactive et définit des variables d’environnement.

3. Ajoutez la ligne suivante à la fin du fichier ~/.bashrc, enregistrez les modifications et quittez l’éditeur.

Cette ligne définit la variable EDITOR pour l’utilisateur actuellement connecté. La variable EDITOR garantit que votre éditeur de texte préféré est utilisé chaque fois que vous ouvrez une nouvelle session de terminal.

Vous pouvez définir n’importe quel autre éditeur de texte que vous préférez, mais ce tutoriel utilise l’éditeur de texte nano.

export EDITOR=nano
Setting the Default Text Editor

4. Enfin, exécutez les commandes suivantes pour appliquer les modifications (source) sans vous déconnecter et vous reconnecter, et affichez (echo) l’éditeur de texte par défaut actuel de votre système.

# Charge la variable d'environnement dans votre session de shell actuelle.
source ~/.bashrc
# Affiche l'éditeur de texte par défaut actuel de votre système.
echo $EDITOR

Vérifiez que la variable EDITOR est définie sur votre éditeur préféré, comme indiqué ci-dessous.

Applying and Verifying Changes

Création et chiffrement de votre premier coffre-fort Ansible

Vous avez défini votre éditeur de coffre par défaut, il est temps de créer votre premier coffre. Vous allez créer et crypter un fichier contenant des informations sensibles telles que des noms d’utilisateur, des mots de passe, des clés d’accès secrètes, etc.

Vous allez exécuter la commande ansible-vault, l’interface principale pour interagir avec les coffres Ansible.

1. Exécutez la commande suivante pour créer le fichier secret.yml. Ansible utilise YAML, un format plus lisible par l’homme par rapport à d’autres formats de données tels que JSON.

ansible-vault create secret.yml

Vous serez invité à entrer et confirmer un mot de passe pour le fichier. Vous utiliserez ce mot de passe pour crypter et décrypter le fichier secret.yml plus tard, alors assurez-vous de choisir un mot de passe fort que vous pouvez mémoriser.

Creating the secret.yml File with a Password

2. Après avoir défini le mot de passe du coffre, votre éditeur de texte par défaut ouvre un fichier vide. Entrez les informations sensibles que vous souhaitez stocker dans le fichier, enregistrez-le et fermez l’éditeur.

Ce tutoriel stocke les variables aws_access_key et aws_secret_key dans le fichier secret.yml. À ce stade, Ansible crypte le fichier secret.yml, et personne d’autre ne peut lire le contenu du coffre à moins de connaître le mot de passe du coffre.

Providing Sensitive Information (secrets)

3. Exécutez la commande cat pour essayer de voir le contenu du fichier secret.yml sans le mot de passe.

cat secret.yml

Vous pouvez vérifier que le contenu du fichier est crypté si vous voyez des nombres aléatoires, comme indiqué ci-dessous. L’en-tête $ANSIBLE_VAULT;1.1;AES256 en haut du fichier indique que le fichier est crypté avec Ansible Vault en utilisant le chiffrement AES256.

Le Standard de Cryptage Avancé (AES) est un algorithme à clé symétrique qui utilise la même clé pour crypter et décrypter les données.

Viewing the secret.yml file Without the Vault’s Password

Chiffrer des Fichiers Existants

Vous avez créé un fichier à partir de zéro qui est automatiquement crypté. Mais que faire pour crypter des fichiers existants ? Ansible propose également la sous-commande encrypt pour crypter un fichier spécifié. Pour voir comment crypter un fichier existant, vous allez crypter un fichier spécifique contenant des variables Ansible.

Exécutez la commande suivante pour crypter un fichier (vars.yml).

ansible-vault encrypt vars.yml

Comme lorsque vous avez créé le fichier secret.yml la première fois, on vous demandera de fournir un mot de passe pour le fichier vars.yml.

L’éditeur par défaut ne s’ouvrira pas cette fois-ci car le fichier vars.yml existe déjà. À la place, vous obtiendrez le message Chiffrement réussi indiquant qu’Ansible a crypté le fichier, comme indiqué ci-dessous.

Encrypting an Existing File (vars.yml)

Maintenant, exécutez la commande cat ci-dessous pour vérifier qu’Ansible a crypté le fichier vars.yml.

cat vars.yml
Verifying Encrypted Existing File

Décrypter les Données depuis Ansible Vault

Vous avez vu comment chiffrer des fichiers, les rendant sécurisés. Mais lorsque vous avez besoin de voir le contenu de vos fichiers, comment déchiffrez-vous vos fichiers ? Déchiffrer un fichier est utile lorsque vous souhaitez modifier un fichier chiffré ou lire son contenu sans fournir le mot de passe à chaque fois. Et la sous-commande decrypt d’Ansible vous sera utile.

1. Exécutez la commande suivante pour déchiffrer le fichier secret.yml.

La sous-commande decrypt prend le chemin d’un fichier chiffré comme son seul argument.

ansible-vault decrypt secret.yml

Fournissez le mot de passe pour le fichier, et le contenu du fichier sera déchiffré et écrit sur le disque en texte clair.

Decrypting File Data

2. Ensuite, exécutez la commande cat pour voir le contenu déchiffré du fichier secret.yml.

cat secret.yml

Vous pouvez voir ci-dessous le contenu du fichier secret.yml imprimé sur le terminal sans aucun chiffrement. À ce stade, vous pouvez ajouter, modifier ou supprimer des lignes dans le fichier à votre guise.

file to your heart’s content

3. Enfin, exécutez la commande ci-dessous pour chiffrer le fichier secret.yml et fournir un mot de passe pour garder le contenu du fichier sécurisé.

ansible-vault encrypt secret.yml
Encrypting a Decrypted File (secret.yml)

Mise à jour du mot de passe de l’Ansible Vault

Vous avez vu que vous devez entrer un mot de passe chaque fois que vous chiffrez et déchiffrez des fichiers. Mais peut-être, vous souhaitez uniquement mettre à jour le mot de passe du fichier sans déchiffrer le fichier. Si c’est le cas, vous aurez besoin d’utiliser la sous-commande rekey. Cette sous-commande vous permet de changer le mot de passe de votre fichier à volonté.

Exécutez la commande suivante pour mettre à jour le mot de passe du fichier secret.yml.

La sous-commande rekey prend le chemin d’un fichier chiffré comme seul argument.

ansible-vault rekey secret.yml

Fournissez le mot de passe actuel du fichier suivi du nouveau mot de passe, comme indiqué ci-dessous.

À ce stade, l’ancien mot de passe ne fonctionnera plus pour décrypter le fichier.

Updating Ansible Vault’s Password

Maintenant, exécutez la commande ci-dessous pour essayer de décrypter le secret.yml.

ansible-vault decrypt secret.yml

Fournissez l’ancien mot de passe lorsqu’on vous le demande, et vous verrez un message d’erreur indiquant que le Décryptage échoué, comme indiqué ci-dessous. Cette sortie confirme que le mot de passe du fichier a été mis à jour avec succès.

Verifying New Password is in Effect

Utilisation de données sécurisées dans les playbooks et les modules

Vous avez vu que l’exécution de commandes pour chiffrer et déchiffrer des fichiers fonctionne. Mais si vous prévoyez d’automatiser le processus de manière sécurisée pour votre application, vous devrez utiliser des playbooks et des modules.

1. Ouvrez le fichier de configuration Ansible (~/.ansible.cfg) dans votre éditeur, qui contient les paramètres pour Ansible.

Copiez et collez le code suivant à la fin du fichier ~/.ansible.cfg, enregistrez les modifications et fermez l’éditeur. Ce code indique à Ansible de rechercher le fichier d’inventaire (~/.ansible-hosts).

[defaults]
hostfile = ~/.ansible-hosts

2. Ensuite, ouvrez le fichier ~/.ansible-hosts, qui contient l’inventaire des hôtes que votre nœud de gestion Ansible peut gérer.

Remplissez le fichier ~/.ansible-hosts avec la ligne de code suivante, enregistrez les modifications et fermez le fichier. Ce code indique à Ansible qu’il peut gérer le localhost via le type de connexion local.

localhost ansible_connection=local

3. Exécutez la commande ci-dessous pour créer un nouveau fichier chiffré. Vous pouvez nommer le fichier comme vous le souhaitez, mais dans ce tutoriel, le fichier est nommé helloworld.yml.

ansible-vault create helloworld.yml
Creating Ansible Playbook (helloworld.yml)

Remplissez le code ci-dessous dans le fichier helloworld.yml, enregistrez les modifications et fermez l’éditeur.

Ce code est un playbook Ansible de base qui affiche le message bonjour monde sur tous les hôtes de votre inventaire. Le symbole — en haut du bloc de code indique le début d’un document YAML.

---

- hosts: all # Définit les tâches à exécuter sur tous les hôtes de l'inventaire
  tasks: # Définit les tâches à exécuter
    - shell: echo 'hello world' # Affiche un message 'bonjour monde'

4. Enfin, exécutez la commande ansible-playbook ci-dessous suivie des options –ask-vault-pass pour exécuter le playbook helloworld.yml sur tous les hôtes de votre inventaire.

ansible-playbook --ask-vault-pass helloworld.yml

Fournissez le mot de passe pour le fichier helloworld.yml lorsqu’on vous le demande. Comme vous pouvez le voir ci-dessous, l’exécution de votre playbook a été réussie.

  • ok=2 – indique que les deux de vos tâches ont été exécutées avec succès.
  • changed=1 – indique que votre tâche a effectué un changement dans l’état de votre système. Dans ce cas, il a écrit un message bonjour monde dans le shell.
  • unreachable et failed sont tous deux à 0 – indique qu’aucun hôte n’était injoignable ou n’a échoué pendant l’exécution.
Running your playbook

Utilisation d’Ansible Vault avec un fichier de mot de passe

Entrer manuellement un mot de passe lors de l’exécution de tâches ponctuelles fonctionne, mais ce n’est pas pratique pour une utilisation réelle.

A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.

1. Exécutez la commande ci-dessous pour stocker le mot de passe Ansible Vault dans un fichier appelé .vault_pass. Remplacez my_vault_password par votre mot de passe de coffre réel.

echo 'my_vault_password' > .vault_pass

2. Ensuite, exécutez chaque commande ci-dessous pour changer la propriété (chown) du fichier en root et changer les autorisations du fichier .vault_pass. Ces commandes garantissent que seul vous (l’utilisateur root) pouvez lire et écrire sur le fichier.

# Changer la propriété du fichier à l'utilisateur root
chown root:root .vault_pass
# Changer les autorisations du fichier uniquement pour root (permissions de lecture et d'écriture)
chmod 700 .vault_pass

3. Enfin, exécutez la commande ansible-playbook ci-dessous, suivie de l’option –vault-password-file pour exécuter un playbook (helloworld.yml) en utilisant un fichier de mot de passe (.vault_pass).

ansible-playbook --vault-password-file=.vault_pass helloworld.yml

Remarquez ci-dessous qu’Ansible a exécuté le playbook sans demander le mot de passe du fichier chiffré.

Running Playbook using a Password File

Conclusion

Dans ce tutoriel, vous avez appris comment utiliser Ansible Vault pour crypter et décrypter des données sensibles pour les playbooks et les tâches Ansible. Vous avez stocké le mot de passe Ansible Vault dans un emplacement sécurisé en utilisant un fichier de mot de passe. Ce comportement est pratique pour moins d’intervention de l’utilisateur lors de l’exécution d’un playbook.

Avec cette connaissance nouvellement acquise, vous pouvez désormais crypter en toute confiance les données sensibles et partager vos playbooks avec d’autres sans vous soucier de la sécurité de vos données.

Si vous utilisez LastPass pour la gestion des mots de passe, pourquoi ne pas stocker votre mot de passe Ansible Vault dans LastPass et laisser Ansible le récupérer automatiquement lorsque nécessaire?

Source:
https://adamtheautomator.com/ansible-vault/