Tags: PowerShell, Authentifizierung, Verschlüsselung
Microsoft gab kürzlich die Version 1.0 des PowerShell-Moduls SecretManagement frei. Es dient der Verwaltung von Anmeldedaten in Passwort-Managern und nutzt Konnektoren zu diversen Vaults, darunter KeePass und BitWarden. Mit SecretStore kommt ein eigener Passwortspeicher 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-Abstraktionsschicht zur Verwaltung von Anmeldeinformationen 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.
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
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
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.
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.
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>
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 Systemverwaltung mit PowerShell kommt es regelmäßig vor, dass man sich auf der Kommandozeile 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
Verwandte Beiträge
- Passwörter in PowerShell speichern
- BitLocker aktivieren mit manage-bde, PowerShell oder WMI
- Exchange 2019 CU14 aktiviert Extended Protection, HSTS-Support für 2016 und 2019 ab sofort
- Exchange Online: Endgültiges Aus für Basic Auth, Ende für Remote PowerShell
- AD-Konten mit DES- und RC4-Algorithmus für Kerberos-Verschlüsselung finden
Weitere Links