Passbolt
Mise à jour :
Passbolt est un gestionnaire de mot de passe centralisé open-source qui peut se
positionner comme alternative à Vault dans un environnement Devops.
En effet, il offre même dans sa Communauty Edition une CLI
et une API JSON. À souligner, cette application est made in Europe
puisque
l’éditeur est basé au Luxembourg.
Le code est disponible sur github ↗ et a été entièrement audité par Cure53 ↗, une société de cybersécurité indépendante basée en Allemagne. Les rapports sont librement accessibles sur cette page ↗.
Présentation de Passbolt Communoty Edition
On retrouve également dans cette version CE :
- la gestion des utilisateurs et groupes,
- le partage des mots de passe,
- un bon générateur de mots de passe offrant un niveau de complexité suffisant,
- une politique de rotation des mots de passe,
- la gestion de favoris,
- une fonction de recherche,
- des notifications par email,
- l’import/export keypass,
- des extensions de navigateur : chrome, firefox, edge,
- l’application mobile
- une interface en français
Par contre, pour accéder par exemple à l’authentification multi-facteur, les journaux d’activités ou encore le support LDAP, il faudra se tourner soit vers la version PRO pour 30€ par mois pour 10 utilisateurs, soit vers la version cloud pour 9€ par mois pour 3 utilisateurs (puis 3€ par utilisateurs supplémentaires) mais sans le support LDAP.
Je vous propose de voir comment tester cette solution de gestion de mots de passe dans sa version CE.
Test de Passbolt
Il existe plein de méthodes pour tester Passbolt
sans se prendre la tête. Il
est par exemple possible d’utiliser une machine Vagrant
, le Vagrantfile
est
fourni, en utilisant un script Bash
qui se charge de tout installer. Il est
aussi possible d’utiliser une ou des image(s) Docker ou de faire l’installation
manuellement ↗ via un package
disponible pour la majorité des distributions. Il existe aussi des images
distroless
, bien pratique si vous faites le choix de l’installer dans un cluster
Kubernetes
Je vais tester la première solution.
Pour récupérer le Vagrantfile c’est par là ↗.
git clone https://gitlab.com/AnatomicJC/passbolt-setup.git
Avant de le lancer un petit coup d’œil au contenu du Vagrantfile :
$script = <<-SCRIPTcurl https://gitlab.com/AnatomicJC/passbolt-setup/-/archive/main/passbolt-setup-main.tar.gz | tar xzf -cd passbolt-setup-mainmv passbolt.conf.vagrant passbolt.conf.override./passbolt-setup.bash ceSCRIPT
Vagrant.configure("2") do |config| config.vm.box = "bento/debian-11" #config.vm.box = "bento/rockylinux-8" config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" config.vm.network "forwarded_port", guest: 443, host: 4433, host_ip: "127.0.0.1" config.vm.provision "shell", inline: $scriptend
Difficile de faire plus simple non ? Mais je vais changer de box de base, car
les bento
ne fournit pas d’images pour libvirt
. Donc, ce sera plutôt une
generic/debian11
.
C’est parti :
vagrant up
... default: Importing /etc/passbolt//gpg/serverkey_private.asc default: Keyring init OK default: Passbolt installation success! Enjoy! ☮ default: default: ____ __ ____ default: / __ \____ _____ ____/ /_ ____ / / /_ default: / /_/ / __ `/ ___/ ___/ __ \/ __ \/ / __/ default: / ____/ /_/ (__ |__ ) /_/ / /_/ / / / default: /_/ \__,_/____/____/_.___/\____/_/\__/ default: default: Open source password manager for teams default: ------------------------------------------------------------------------------- default: User saved successfully. default: To start registration follow the link provided in your mailbox or here: default: http://127.0.0.1:8080/setup/install/69091134-ad98-4ef4-963b-a0ba5161f4f0/5137978a-0660-4c23-b39c-136db9c68a7a
Efficace. Merci Jean Christophe Vassort ↗
Je clique que le lien et il me propose direct d’installer l’extension Chrome.
Suivant, le mot de passe admin un kit de récupération, un jeton composé de trois lettres + une couleur et hop, c’est prêt. Je crée un premier mot de passe.
Je crée un premier mot de passe en cliquant sur [Créer].
Accès aux mots de passe depuis un playbook Ansible
Tout est bien documenté et en conséquence je m’appuie sur le
billet ↗
du même auteur du VagrantFile
.
On installe le rôle depuis ansible-galaxy
et le module python
py-passbolt :
ansible-galaxy collection install anatomicjc.passbolt...
anatomicjc.passbolt:0.0.5 was installed successfully
pip3 install py-passbolt
Récupérons les informations nécessaires à la connexion au serveur passbolt
. Il
faut dans le profil utilisateur puis dans le menu [Inspecteur de clé] et cliquer
sur [Privé].
Nous allons chiffrer les données avec Ansible-Vault. Pour cela, on va aussi
créer un fichier de mot de passe nommé vault_pass
et une configuration Ansible
dont voici le contenu :
[defaults]inventory=inventoryinterpreter_python=auto_silentvault_identity_list = main@vault_pass
On encode les informations
cat private_passbolt.txt | ansible-vault encrypt$ANSIBLE_VAULT;1.2;AES256;main35316631653864386662326366646334633839343863633066616134333839316633396335343461...3464353532386635356563323733333736643566316264306538653530353565346534356231323233396261373935376163echo -n 'password' | ansible-vault encrypt$ANSIBLE_VAULT;1.2;AES256;main386538333139313035303437623066636434316539376163383532643031623761653466633033306634626565613534303836623230333161366365316366650a343439636432663966373935366534633963313936643931653863363338363165373965663335633066653735303538323736373133356265313733646439660a3831316362353833343263363235656462316435643964326366623065396339
On crée l’inventaire :
mkdir -p inventory/
vi hosts.yml
On y met ce contenu :
all: vars: private_key_vault: !vault | $ANSIBLE_VAULT;1.2;AES256;main 39636534343934636630663262623366653836646264386462663731363366633433323965663139 ... 30623237383030356264 passphrase_vault: !vault | $ANSIBLE_VAULT;1.2;AES256;main 61366163363437623364613637386463333965363130383664393135313263323465303135646231 3765616236656139663536373233383632623834663633350a666661643731383663316463663835 34306662363232633930353462326634333061633230306238633831643536316333376261666364 3839363566396636380a626161353639633431363238353462303737303766316563356230316132 3461 hosts: localhost: ansible_connection: local
Maintenant le playbook qu’on example-playbook.yml
:
- hosts: all gather_facts: false environment: PASSBOLT_BASE_URL: "http://127.0.0.1:8080" PASSBOLT_PRIVATE_KEY: "{{ private_key_vault }}" PASSBOLT_PASSPHRASE: "{{ passphrase_vault }}"
tasks: - name: "Passbolt lookup plugin / fetch one" ansible.builtin.debug: var: lookup('anatomicjc.passbolt.passbolt', 'Test')
Allez on teste :
TASK [Passbolt lookup plugin / fetch one] **************************************ok: [localhost] => { "lookup('anatomicjc.passbolt.passbolt', 'Test')": { "created": "2022-08-20T13:12:03+00:00", "deleted": false, "description": "", "forder_parent_id": "", "modified": "2022-08-20T13:12:03+00:00", "modified_by": "69091134-ad98-4ef4-963b-a0ba5161f4f0", "name": "Test", "password": "zX3\"#v)er(^z^=e_DC", "personal": "", "resource_type_id": "a28a04cd-6f53-518a-967c-9963bf9cec51", "uri": "", "username": "stephane.robert" }}
PLAY RECAP *********************************************************************localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Cool, on a nos infos. Pour récupérer directement un champ, il suffit d’ajouter le nom du champ après le lookup :
var: lookup('anatomicjc.passbolt.passbolt', 'Test').password
Il y a quelques exemples dans le playbook ↗ fourni par JC.
Utilisation de la CLI go-passbolt
Maintenant, on teste la CLI de passbolt. Le code se trouve ici ↗.
Installons le package debian, d’autres sont disponibles, sur ma machine :
wget https://github.com/passbolt/go-passbolt-cli/releases/download/v0.1.9/go-passbolt-cli_0.1.9_linux_amd64.debdpkg -i go-passbolt-cli_0.1.9_linux_amd64.deb
Maintenant configurons l’accès :
passbolt configure --serverAddress http://127.0.0.1:8080 --userPassword 'password' --userPrivateKeyFile passbolt_private.txt
Maintenant récupérons notre user/mdp :
passbolt list resourceID | FolderParentID | Name | Username | URI1a1dd36f-9ccf-45c6-822b-55d0d84d4a94 | | Test | stephane.robert |
passbolt get resource --id 1a1dd36f-9ccf-45c6-822b-55d0d84d4a94FolderParentID:Name: TestUsername: stephane.robertURI:Password: zX3"#v)er(^z^=e_DCDescription:
Vraiment sympa ce gestionnaire de mots de passe centralisé. Une belle alternative à Vault pour la gestion des mots de passes. Reste plus qu’à créer une stack sur AWS ou GCP avec de la redondance en utilisant Terraform par exemple, ou le monter dans un cluster kubernetes.