PowerShell : utiliser Secret Management avec KeePass
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment utiliser une base KeePass comme coffre-fort avec le module Secret Management de PowerShell. Ainsi, on sera en mesure d'aller récupérer des identifiants dans une base KeePass à l'aide de PowerShell, ainsi que d'en ajouter de nouveaux.
Cet article s'inscrit dans la continuité du premier sur l'utilisation du module PowerShell "Secret Management" et d'un coffre-fort avec "Secret Store". Pour bien comprendre ce nouvel article et maîtriser Secret Management, je vous recommande de le lire :
⭐ PowerShell Secret Management et Secret Store
? Tutoriel complet sur Secret Management disponible au format vidéo :
II. Installer l'extension KeePass pour Secret Management
La première étape consiste à installer l'extension KeePass pour Secret Management. Cela passe par l'installation du module "SecretManagement.KeePass" grâce à la commande suivante :
Install-Module SecretManagement.KeePass
Retrouvez ce module sur la PowerShell Gallery et sur GitHub :
➡ Powershellgallery.com - SecretManagement.KeePass
➡ Github.com - SecretManagement.KeePass
III. Créer un coffre-fort KeePass
Vous pouvez utiliser un coffre-fort KeePass existant pour cet article. Si vous n'en avez pas ou que vous souhaitez tester sur un coffre-fort qui ne craint rien, alors suivez ces quelques étapes pour créer une base KeePass.
Cliquez sur le bouton en haut à gauche pour créer un nouveau coffre-fort KeePass. Validez ensuite l'avertissement qui vous précise que vous devez stocker dans un endroit sécurisé ce fichier. En fait, ce fichier est précieux, car si vous le perdez, vous perdez votre base KeePass complètement.
Spécifiez un nom pour le fichier et un emplacement (sécurisé). Il peut s'agir d'un partage ou d'un espace Cloud si vous souhaitez partager la base avec vos collègues ?. Pour ma part, ce sera "VaultPowerShell.kdbx".
Ensuite, il faut définir le "Master Password" c'est-à-dire le mot de passe maître qui permet de déverrouiller le coffre-fort et d'accéder à son contenu. Choisissez un mot de passe robuste !
En complément, je vous invite à cocher la case "Key file / provider" pour créer une clé qui se présente sous la forme d'un fichier "KEYX". Cette clé devra être fournie en complément du mot de passe pour déverrouiller l'accès à la base KeePass. C'est facultatif, mais cela permet d'améliorer la sécurité de son coffre-fort, attention toutefois à ne pas perdre ce fichier ! Cliquez sur le bouton "Create".
Choisissez "Create a nex key file (random key)" et cliquez sur "OK" : vous allez devoir agiter votre souris dans la zone à l'écran pour l'entropie, c'est-à-dire le fait de baser la génération de votre clé sur des mouvements imprédictibles.
Pour finir avec la création de la clé, spécifiez l'emplacement de la clé KEYX.
Poursuivez... Pour finir, il faudra indiquer le nom du coffre-fort tel qu'il apparaîtra au sein de KeePass. Renseignez le champ "Database name" et indiquez éventuellement une description via le champ "Database description". Cliquez sur "OK".
Le coffre-fort KeePass est créé ! Par défaut, il est livré avec quelques dossiers et deux entrées, vous pouvez les supprimer si vous le souhaitez et organiser la base à votre guise. Pour créer une nouvelle entrée pour ajouter de nouveaux identifiants, il suffit de faire un clic droit et de cliquer sur "Add Entry".
Nous verrons que l'entrée ajoutée à partir de l'interface graphique est accessible en PowerShell.
Maintenant, nous allons voir comment exploiter ce coffre-fort KeePass à l'aide de PowerShell et de Secret Management.
IV. Utiliser KeePass avec Secret Management
A. Enregistrer le coffre-fort KeePass
Dès lors que le module est installé et que notre base KeePass est prête, on peut enregistrer le coffre-fort au niveau de Secret Management grâce à la commande Register-SecretVault.
Dans l'exemple ci-dessous, je nomme le coffre-fort "Keepass" et j'indique plusieurs paramètres : le chemin vers la base KeePass c'est-à-dire le fichier KDBX créé précédemment (Path) et le chemin vers la clé qui permet de déverrouiller la base KeePass (KeyPath). En complément, il faut préciser le paramètre UseMasterPassword à $true si la base KeePass est protégée par un mot de passe maître, ce qui est mon cas.
Register-SecretVault -Name "KeePass" -ModuleName "SecretManagement.Keepass" -VaultParameters @{ Path = "C:\TEMP\POWERSHELL\VaultPowerShell.kdbx" UseMasterPassword = $true KeyPath= "C:\TEMP\POWERSHELL\VaultPowerShell.keyx" }
Remarque : lorsque l'on enregistre le coffre-fort, il n'y a pas de vérification du chemin.
Maintenant que le coffre-fort est enregistré, on va tester qu'il est bien accessible. La commande Test-SecretVault va permettre d'effectuer cette opération, il suffit de spécifier le nom du vault à tester.
Test-SecretVault -Name KeePass
Le mot de passe du coffre-fort sera demandé : "KeePass Master Password". La commande doit retourner "True" dans la console.
Pour lister le contenu de la base KeePass, la commande Get-SecretInfo doit être utilisée comme pour interroger un coffre-fort créé à partir de Secret Store.
Get-SecretInfo -Vault KeePass
B. Créer une nouvelle entrée dans KeePass avec PowerShell
Pour alimenter notre base KeePass avec PowerShell et ajouter une nouvelle entrée avec un couple utilisateur/mot de passe, on va utiliser Set-Secret. On spécifie le nom de l'entrée, ce qui correspond au "Titre" (Title) dans KeePass, ainsi que le nom d'utilisateur et le mot de passe. Les identifiants seront obtenus à l'aide de Get-Credential.
Set-Secret -Vault KeePass -Name "PS-Compte1" -Secret (Get-Credential)
Une fois l'entrée créée, il faut fermer et rouvrir la base KeePass pour voir les changements. La nouvelle entrée sera positionnée dans le dossier racine de votre base KeePass.
Remarque : pour l'instant, il n'est pas possible de créer l'entrée dans un dossier spécifique, mais c'est dans la roadmap du développeur : j'ai vu qu'il avait indiqué "TODO: Support Creating Secrets with paths" dans le code ?.
Sur la copie d'écran ci-dessous, on peut voir que l'entrée est correctement alimentée. Pour le moment, il n'est pas possible d'exploiter l'option -Metadata avec un coffre-fort KeePass.
Si on liste de nouveau le contenu de notre coffre-fort, on retrouve bien les deux entrées : celle d'origine créée avec l'interface graphique de KeePass et celle créée en PowerShell.
C. Récupérer des identifiants dans KeePass pour se connecter
Que ce soit à l'aide d'identifiants existants dans votre base KeePass ou de nouveaux identifiants ajoutés via PowerShell, il est intéressant d'aller piocher dans la base pour utiliser les identifiants à souhait. Dans le même esprit qu'avec coffre-fort géré par Secret Store, on va utiliser le cmdlet "Get-Secret" accompagné par deux paramètres : -Vault pour spécifier le coffre-fort et -Name pour spécifier le nom de l'entrée à utiliser.
Enter-PSSession -ComputerName PC-W10 -Credential (Get-Secret -Vault KeePass -Name PS-Compte1)
La connexion à l'hôte distant via PowerShell va s'effectuer à l'aide de vos identifiants, en toute transparence. Si votre coffre-fort est verrouillé, il faudra saisir le mot de passe maître.
Très pratique ! L'usage de Secret Management et de KeePass permet de gérer ses credentials très facilement ! Surtout, cela facilite l'usage des credentials au quotidien avec PowerShell, tout en ayant la possibilité de stocker la base KeePass sur un partage ou un espace Cloud.
Top,
Ça me donne des idées pour mes scripts o365 car les credentials me posaient un souci pour les tâches planifiées.
La je peux combiner le technique de chiffrement du passe pour ouvrir un coffre KeePasse avec clé en plus. On est potes mal.
Merci
Le module Secret-Management fonctionne avec d’autres coffres forts de mots de passe, pour info, tels que Azure Vault, Bitwarden, etc…
Hallo,
Tres interressant.
Comment srpasser le mot de passe maite dans un script?
Merci.