Dans le cadre de la gestion de l’infrastructure, plusieurs services nécessitent la création d’identifiants par exemple des comptes utilisateurs, des clés etc.
Ces éléments sont souvent gérés manuellement lors des déploiements. Le problème est alors de savoir où stocker ces mots de passe sans les laisser en clair sur les serveurs ou dans les fichiers Ansible. L’objectif était donc de mettre en place une manière de générer les secrets automatiquement, les stocker de manière centralisée (dans une organisation Vaultwarden) et les utiliser lors de l’exécution des playbooks Ansible sans les conserver localement.
La solution concrètement :
Nous avons installé le client Bitwarden sur le serveur Ansible et l’avons connecté à une de nos organisations Vaultwarden grâce à un token qu’on lui fournit. De ce fait, lorsqu’un playbook a besoin d’un identifiant, par exemple un secret :
- Une tâche Ansible vérifie si l’identifiant existe déjà dans Vaultwarden, sinon elle le crée avec le secret qui est généré automatiquement
- Ensuite le secret est récupéré au moment de l’exécution de la tâche Ansible
- Puis est utilisé pour le service concerné
Cas d’utilisation
- Postgresql
Pour Postgresql, cela a été utilisé de deux manières. D’une part, des utilisateurs sont créés pour des bases de données donc pour leur connexion. Et d’autre part, des comptes utilisateurs pour la sauvegarde des bases de données ont été créés. Ces derniers sont ensuite utilisés par le playbook sauvegarde pour configurer, par exemple, le fichier de configuration borgmatic nécessaire à la sauvegarde des bases de données.
Les mots de passes sont générés automatiquement via Ansible et stockés dans Vaultwarden, garantissant qu’aucun secret n’est conservé en clair sur les serveurs.
- Comptes pour serveurs Samba (CIFS)
Pour nos partages Samba aussi, le playbook vérifie d’abord si l’utilisateur existe déjà dans Vaultwarden, sinon il est créé avec un username et un mot de passe généré automatiquement. Ensuite :
- Le username est utilisé pour configurer la directive valid users dans le fichier smb.conf
- Le mot de passe est utilisé pour l’authentification lors du montage cifs
Cette approche permet de gérer automatiquement les comptes Samba tout en sécurisant les identifiants
Un exemple de playbook

- Sauvegardes (Borg)
Concernant le déploiement des sauvegardes, le playbook gère la vérification, la création et l’utilisation du Borg repokey. Lors de la tâche de l’initialisation du repos Borg, la clé est générée et stockée dans Vaultwarden. Elle est ensuite récupérée automatiquement pour exécuter des tâches planifiées via des cron jobs. Cette clé est utilisée pour toute la gestion des sauvegardes, donc est critique et ne doit pas être conservée localement. Vaultwarden assure ainsi sa protection tout en permettant son exploitation par les playbooks Ansible.
Quelques limites (et les solutions !) :
Si cette solution facilite grandement la gestion des secrets ainsi que leur sécurisation, elle présente toutefois quelques limites :
Lors des premiers tests réalisés, nous avons en effet constaté que si le playbook contient uniquement la tâche de création de l’identifiant Vaultwarden, celui-ci peut-être recréé à chaque exécution du playbook : le client Vaultwarden n’empêche pas la création d’identifiant portant le même nom.
Il est donc nécessaire d’ajouter une étape de vérification avec Ansible, avant la création. De ce fait, la tâche sera ignorée si l’entrée existe déjà !
