Agence web » Actualités du digital » Comment utiliser Ansible Vault pour stocker des clés secrètes

Comment utiliser Ansible Vault pour stocker des clés secrètes

Avec la plupart des automatisations, les informations d'identification sont nécessaires pour authentifier et utiliser des ressources sécurisées. Ce qui a toujours été un défi, c'est de savoir comment stocker ces informations d'identification en toute sécurité. Ansible est un système d'automatisation qui fournit l'approvisionnement logiciel, la gestion de la configuration et les déploiements d'applications.

Comme pour tout système d'automatisation, Ansible a besoin d'un moyen sécurisé de stocker des secrets. Dans le cas d'Ansible, ce système est appelé Ansible Vault. Ansible Vault fournit une solution multiplateforme pour stocker en toute sécurité les informations d'identification.

Présentation d'Ansible Vault

Ansible Vault peut être utilisé pour crypter n'importe quel fichier, ou variables elles-mêmes, à partir d'un playbook. Par défaut, AES est utilisé, qui est un cryptage basé sur un secret partagé. Les méthodes de chiffrement de fichiers et de variables ont leurs avantages et leurs inconvénients.

Cryptage de fichiers

Pour créer un nouveau fichier chiffré nommé secrets.yml, utilisez simplement ce qui suit ansible-vault commander.

ansible-vault create secrets.yml

Après avoir demandé un mot de passe, le ansible-vault La commande lancera l'éditeur de fichiers système par défaut, ce qui entraînera un fichier chiffré lors de l'enregistrement.

De même, pour crypter un fichier précédemment non crypté, utilisez ce qui suit ansible-vault commander. Notez que cela utilise le encrypt paramètre plutôt que create paramètre.

ansible-vault encrypt secrets.yml

L'inconvénient de l'utilisation du chiffrement de fichiers est la lisibilité. Si vous ouvrez le fichier, vous constaterez que sans déchiffrement, il est impossible de déchiffrer le contenu.

Cryptage variable

Dans un playbook, il est possible d'utiliser une variable chiffrée en faisant précéder les données chiffrées du !vault étiquette. Exécution du encrypt_string argument de la ansible_vault entraînera une chaîne chiffrée que vous pourrez utiliser dans vos playbooks.

ansible-vault encrypt_string 'secret_data' --name 'my_secret'

Après vous avoir demandé un mot de passe, vous obtiendrez la chaîne cryptée suivante.

my_secret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          37636561366636643464376336303466613062633537323632306566653533383833366462366662
          6565353063303065303831323539656138653863353230620a653638643639333133306331336365
          62373737623337616130386137373461306535383538373162316263386165376131623631323434
          3866363862363335620a376466656164383032633338306162326639643635663936623939666238
          3161

Le chiffrement variable est idéal pour la lisibilité, mais la possibilité d'utiliser la recomposition de ligne de commande est sacrifiée lors de l'utilisation de cette méthode.

Utilisation d'Ansible Vault en pratique

Vous vous rendez peut-être compte que l'utilisation d'Ansible Vault en production est un défi. Pour utiliser efficacement Ansible Vault, les techniques suivantes facilitent ce processus.

  • Décryptage non sollicité
  • Voûtes multiples
  • Rekeying

Décryptage non sollicité

Une option pour décrypter de manière transparente un fichier ou une variable lors de l'utilisation d'Ansible consiste à stocker le mot de passe dans un fichier de mot de passe protégé et sans version. Pour référencer ce mot de passe stocké, passez simplement l'emplacement du fichier à l'aide du vault-password-file paramètre.

ansible-playbook --vault-password-file /path/vault-password-file secrets.yml

Cela déchiffrera tous les fichiers ou variables chiffrés inclus à l'aide du mot de passe inclus.

Il est très important de ne pas valider votre fichier de mots de passe en texte brut dans votre système de contrôle de version. De même, protégez ce fichier uniquement pour l'utilisateur ou le groupe qui a besoin d'accéder au mot de passe stocké sur le système de fichiers à l'aide de listes de contrôle d'accès (ACL).

Voûtes multiples

Bien qu'il soit pratique d'avoir un coffre-fort unique avec tous les secrets chiffrés, une meilleure pratique de sécurité consiste à séparer les informations d'identification sécurisées dans des coffres-forts pertinents distincts. Un exemple de ceci serait la séparation d'un environnement de production et de développement. Heureusement, Ansible Vault nous permet de créer plusieurs coffres-forts et références qui mettent en sécurité les données chiffrées en utilisant une étiquette.

ansible-vault create --vault-id prod@prompt prod-secrets.yml

Le code ci-dessus créera un prod vault et demander votre mot de passe lors de l'exécution (comme indiqué par le @prompt chaîne). Si vous avez déjà un fichier de mots de passe que vous souhaitez utiliser, il vous suffit de passer le chemin d'accès au fichier.

ansible-vault create --vault-id prod@/path/prod-vault-password-file prod-secrets.yml

Disons que nous voulons chiffrer le même my_secret variable, mais cette fois stocker que dans notre prod voûte. Comme auparavant, en utilisant encrypt_string mais avec le vault-id permet de stocker le secret à l'emplacement spécifié.

ansible-vault encrypt_string --vault-id prod@/path/prod-vault-password-file 'secret_data' --name 'my_secret'

Vous remarquerez qu'après AES256 chaîne, un nouveau morceau de texte, prod est montré. Cela indique le coffre-fort dans lequel se trouve le texte chiffré.

my_secret: !vault |
          $ANSIBLE_VAULT;1.1;AES256;prod
          37636561366636643464376336303466613062633537323632306566653533383833366462366662
          6565353063303065303831323539656138653863353230620a653638643639333133306331336365
          62373737623337616130386137373461306535383538373162316263386165376131623631323434
          3866363862363335620a376466656164383032633338306162326639643635663936623939666238
          3161

Que faire si vous souhaitez inclure plusieurs coffres dans un seul playbook? Vous pouvez facilement passer plusieurs vault-id déclarations sur une ansible-playbook ligne de commande.

ansible-playbook --vault-id dev@/path/dev-vault-password-file --vault-id prod@/path/prod-vault-password-file site.yml

Rekeying

Enfin, il est important de parcourir régulièrement vos mots de passe. Pour les fichiers chiffrés, vous pouvez utiliser la ligne de commande ci-dessous. Passer dans le new-vault-id Le paramètre facilite le changement du mot de passe avec lequel les secrets sont chiffrés.

ansible-vault rekey --vault-id prod@/path/prod-vault-password-file-old --new-vault-id prod@/path/prod-vault-password-file-new site.yml

Comme indiqué ci-dessus, la recomposition de la ligne de commande ne fonctionne pas pour les variables chiffrées. Dans ce cas, vous devrez rechiffrer individuellement les chaînes et les remplacer dans un playbook donné.

Les meilleures pratiques

La sécurité est difficile, surtout quand il s'agit d'utiliser des secrets dans les systèmes d'automatisation. Dans cet esprit, voici quelques bonnes pratiques à utiliser lors de l'utilisation d'Ansible Vault. Bien que nous en ayons déjà couvert certains, il est prudent de réitérer ces pratiques.

  • Fichiers de mots de passe protégés et non versionnés par ACLLes fichiers de mots de passe ne doivent pas être stockés dans des systèmes de contrôle de version, tels que GIT. En outre, assurez-vous que seuls les utilisateurs appropriés peuvent accéder au fichier de mots de passe.
  • Voûtes séparéesNormalement, de nombreux environnements différents sont utilisés. Par conséquent, il est préférable de séparer les informations d'identification requises dans les coffres-forts appropriés.
  • Révision régulière des fichiers et des mots de passe variablesEn cas de réutilisation ou de fuite de mot de passe, il est préférable de ressaisir régulièrement les mots de passe utilisés pour limiter l'exposition.

Conclusion

Comme pour tout système d'automatisation, il est extrêmement important que les secrets soient correctement protégés et contrôlés. Avec Ansible Vault, ce processus est rendu facile et flexible. En utilisant les meilleures pratiques décrites ci-dessus, le stockage et l'utilisation de secrets dans Ansible sont sûrs et sécurisés.

Pour étendre encore plus Ansible Vault et faire passer ce processus au niveau supérieur, vous pouvez utiliser des scripts qui s'intègrent dans les solutions de gestion des mots de passe. Comme vous pouvez le voir, Ansible Vault est un excellent moyen d'utiliser les secrets dans les playbooks Ansible.

★★★★★