PowerShell SecretManagement: Passwörter in KeePass oder SecretStore verwalten

    Authentifizierung über Username und PasswortMicrosoft gab kürz­lich die Version 1.0 des PowerShell-Moduls Secret­Management frei. Es dient der Verwaltung von Anmelde­daten in Passwort-Managern und nutzt Konnek­toren zu diversen Vaults, darunter KeePass und Bit­Warden. Mit Secret­Store kommt ein eigener Passwort­speicher für PowerShell hinzu.

    Eine erste Vorabversion veröffentlichte Microsoft vor einem Jahr unter der Bezeichnung SecretsManagement. Es enthielt sowohl die Cmdlets für das Management von Credentials in einem Passwort-Manager als auch einen eigenen Vault. Die finale Version verteilt diese beiden Funktionen auf separate Module, nämlich auf SecretManagement (ohne 's') und SecretStore.

    SecretManagement fungiert als PowerShell-Abstraktions­schicht zur Verwaltung von Anmelde­informationen in diversen Passwort-Managern. Es bietet somit immer die gleiche Schnittstelle in Form von aktuell 10 Cmdlets, um etwa Secrets aus dem Vault einzulesen oder neue dort abzuspeichern.

    Dafür sind so genannte Vault Extensions erforderlich, die als Konnektoren zu den verschiedenen Tools dienen. Diese müssen separat installiert werden, ausgenommen davon ist Microsofts neuer SecretStore. Die verfügbaren Erweiterungen kann man sich mittels

    Find-Module *secretmanagement*

    anzeigen lassen.

    Aktuell verfügbare SecretManagement-Konnektoren für Passwort-Manager

    Die Installation des SecretsManagement-Moduls erfolgt über den Aufruf von

    Install-Module Microsoft.PowerShell.SecretManagement

    Dabei erhält man die übliche Warnung, wonach die PSGallery kein sicheres Repository sei.

    Store einrichten und verbinden

    Das Modul für Microsofts Store installiert man mit

    Install-Module Microsoft.PowerShell.SecretStore

    Anschließend reicht es, eines der Cmdlets für seine Konfiguration aufzurufen, zum Beispiel Get-SecretStoreConfiguration, um einen neuen Vault anzulegen. Standardmäßig erfordert die Änderung der Konfiguration die Eingabe eines Passworts.

    Diese Einstellung sowie drei weitere (Timeout für die Session, Prompt für Passwort, Authentifizierung bei Store-Zugriff) lassen sich dann durch Set-SecretStoreConfiguration ändern. Die Option Scope ist aktuell auf CurrentUser beschränkt.

    Möchte man einen externen Passwort-Manager nutzen, in unserem Beispiel KeePass, dann muss man erst die dafür nötige Erweiterung installieren:

    Install-Module SecretManagement.KeePass

    Vault registrieren

    Im nächsten Schritt registriert man einen Vault, aus dem man nachher Passwörter ausliest oder in den man sie einträgt. Im Fall des SecretStore ist dies ziemlich einfach:

    Register-SecretVault -Name <StoreName> -ModuleName Microsoft.PowerShell.SecretStore

    Vault auf Basis von Microsofts SecretStore registrieren und anschließend Passwort hinzufügen.

    Bei externen Tools wie KeePass muss man der Registrierung einige Parameter mitgeben, etwa den Pfad zur Datenbank. Sie kann man vorab in einer Hash-Tabelle speichern:

    $VaultParams = @{ Path = "C:\Users\me\Documents\Database.kdbx"
         UseMasterPassword = $true
    }

    Zusätzlich teilt man der Registrierung hier mit, dass die Datenbank mit einem Master-Passwort geschützt ist. Der eigentliche Befehl sieht dann so aus:

    Register-SecretVault -Name <VaultName> -ModuleName SecretManagement.keepass `
    -VaultParameters $VaultParams

    Neues Vault auf Basis von KeePass registrieren und mit Test-SecretVault überprüfen

    Das Cmdlet Get-SecretVault sollte jetzt alle verfügbaren Speicher anzeigen, darunter auch den eben registrierten.

    Passwörter hinzufügen, auslesen und entfernen

    Ab nun ist es im Wesentlichen egal, welcher Passwort-Manager sich hinter einem Vault verbirgt. Die Operationen erfolgen mit den gleichen Cmdlets.

    Unterschiede gibt es nur darin, dass einige Konnektoren derzeit etwa das Schreiben von Metadaten nicht unterstützen und sich auf den Namen und das Passwort beschränken. Dies trifft etwa auch auf KeePass zu.

    Die Extension für KeePass erlaubt aktuell nicht das Überschreiben eines Secrets oder das Hinzufügen von Metadaten.

    Um sich die Secrets in einem Vault anzeigen zu lassen, ruft man

    Get-SecretInfo -Vault <Name-des-Vaults>

    auf. Eines der Passwörter liest man dann mit

    Get-Secret -Name <Names-des-Secrets> -Vault <Name-des-Vaults>

    aus. Standardmäßig erhält man das Passwort dann als Secure String, den man etwa verwenden kann, um ein PSCredentials-Objekt zu erzeugen.

    Hängt man den Schalter AsPlainText an, dann gibt Get-Secret das Passwort als Klartext aus.

    Passwort aus KeePass auslesen und im Klartext anzeigen

    Umgekehrt hat man mit Set-Secret ebenfalls die Möglichkeit, ein neues Passwort entweder über einen Secure String oder eine unverschlüsselte Zeichenkette einzutragen. Dafür verwendet man wahlweise den Parameter Secret oder SecureStringSecret:

    Set-Secret -Name <Names-des-Secrets> -Secret "GeheimesPasswort" -Vault <Name-des-Vaults>

    Neues Passwort in KeePass eintragen mittels Set-Secret und eines Secure String

    Um schließlich ein Secret zu entfernen, benötigt Remove-Secret nur die Namen des Vaults und des Secrets:

    Remove-Secret -Name <Names-des-Secrets> -Vault <Name-des-Vaults>

    Alernativ kann man ihm auch den Output von Get-SecretInfo über eine Pipe weiterleiten.

    Fazit

    Bei der System­verwaltung mit PowerShell kommt es regelmäßig vor, dass man sich auf der Kommando­zeile oder über Scripts an verschiedenen Systemen und Diensten anmelden muss. Um diesen Vorgang zu automatisieren, musste man bisher Passwörter als Secure String in Textdateien zwischenspeichern und bei Bedarf dann wieder auslesen und konvertieren.

    Das Modul SecretManagement vereinfacht diese Aufgabe, indem man die bereits in einem Passwort-Manager gespeicherten Credendials in PowerShell direkt verarbeiten kann. Microsoft stellt zudem für diesen Zweck einen einfachen Vault als Alternative zur Verfügung.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Keine Kommentare