SecretsManagement: PowerShell erhält Modul für Passwort-Manager

    Authentifizierung über Username und PasswortMicrosoft stellte eine frühe Version von Secrets­Management vor. Es dient dazu, Pass­wörter in einem Tresor ("Vault") abzu­legen und daraus auszu­lesen. Es kann über Provider an Passwort-Manager an­docken, bringt aber auch einen eigenen Vault mit. Es erspart Admins damit das Speichern von Secure Strings in Text­dateien.

    Bei der System­verwaltung mit PowerShell ist es gang und gäbe, dass man sich auf der Kommando­zeile oder über Scripts an vers­chiedenen Systemen und Diensten anmelden muss. Da ein PSCredential-Objekt ein Kennwort nur als Secure String akzeptiert, muss man es erst in diese Form bringen, in der Regel mit ConvertTo-SecureString.

    Möchte man ein Kennwort über Sitzungen hinweg in einer Datei oder in der Registry speichern, dann ist zuvor ein weiterer Schritt erforderlich, bei dem man den Secure String mit ConvertFrom-SecureString in eine ver­schlüsselte Zeichenkette umwandelt. Bei Auslesen aus einer Datei ist dann wieder die umgekehrte Operation fällig.

    Passwort-Manager in Scripts auslesen

    Die derart verarbeiteten Kennwörter liegen aber oft ohnehin in einem Passwort-Manager, aber Anwender können aus PowerShell auf sie dort nicht programmatisch nicht zugreifen. Dies soll nun das neue Modul ändern.

    Zur Anbindung von Vaults sieht Secrets­Management eigene Provider vor, welche die jeweiligen Hersteller zur Verfügung stellen müssen. Wer jedoch keinen Passwort-Manager verwendet oder einen solchen, für den es keinen Provider gibt, der kann den Tresor des PowerShell-Moduls verwenden.

    Installation

    Die Installation von Secrets­Management erfolgt standard­mäßig über das Paket-Management von PowerShell, mit dem man das Modul von der PSGallery herunterlädt:

    Install-Module -Name Microsoft.PowerShell.SecretsManagement -AllowPrerelease

    Installation von Microsoft.PowerShell.SecretsManagement unter PowerShell 7

    Als System­voraussetzung nennt die Beschreibung mindestens Windows PowerShell 5.1. Der obige Aufruf klappt zwar unter PowerShell 7, scheitert jedoch bei Windows PowerShell, weil Install-Module dort den Schalter AllowPrerelease nicht unterstützt. Lässt man ihn weg, dann findet das Cmdlet kein Paket für die Installation.

    Die Installation der Preview von Secrets­Management über das Paket-Management scheitert unter Windows PowerShell 5.1.

    Daher muss man das Package manuell herunterladen, die Endung des Dateinamens von .nupkg auf .zip ändern und den Inhalt in ein Verzeichnis namens microsoft.powershell.secretsmanagement kopieren. Dieses verschiebt man dann in ein Verzeichnis, das in $env:PSModulePath enthalten ist, beispielsweise nach

    $env:SystemRoot\System32\WindowsPowerShell\v1.0\Modules

    Danach kann man es mit dem Befehl

    Import-Module microsoft.powershell.secretsmanagement

    importieren.

    Manuelle Installation des Moduls und anschließender Import

    Ein anschließendes

    Get-Command -Module microsoft.powershell.secretsmanagement

    listet die aktuell 7 darin enthaltenen Cmdlets auf.

    Lokalen Vault nutzen

    Wie ein Aufruf von

    Get-SecretsVault

    zeigt, ist BuiltInLocalVault bereits registriert und kann sofort genutzt werden. Alternative Passwort-Manager müsste man über Register-SecretsVault einbinden bzw. über Unregister-SecretsVault wieder entfernen.

    Um ein Kennwort im mitgelieferten Tresor abzulegen, gibt man einen Befehl nach dem Muster

    Add-Secret -Name MyService -Secret MyPass

    ein. Das Cmdlet legt das Passwort dann als Secure String im Vault ab. Es kann dann nur von jenem Nutzer zurückgeholt werden, der es gespeichert hat.

    Der Nachteil dieses Vorgehens besteht darin, dass man das Kennwort im Klartext auf der Kommando­zeile eingibt, wo es möglicher­weise erspäht werden könnte. Möchte man das vermeiden, dann erzeugt man den Secure String schon vorher und übergibt diesen dann an Add-Secret:

    $st = Read-Host -Prompt "Secret eingeben" -AsSecureString
    Add-Secret -Name MyService -Secret $st

    Kennwort als Secure String erfassen, mit Add-Secret im Vault speichern und mit Get-Secret wieder auslesen

    Passwörter auslesen

    Mit Get-SecretInfo erhält man einen Überblick über die im Tresor gespeicherten Kenn­wörter, wobei diese selbst nicht angezeigt werden, sondern nur der dazugehörige Name. Das Gleiche gilt, wenn man eines davon explizit mit

    Get-Secret -Name Test

    aus dem Vault anfordert.

    Nachdem man an ein PSCredential-Objekt ohnehin einen Secure String übergibt, erhält man einen solchen gleich von Get-Secret. Möchte man das Kennwort im Klartext anzeigen, dann muss man zusätzlich den Schalter AsPlainText anhängen. Damit erspart man sich die manuelle Konvertierung eines Secure String in eine Zeichen­kette.

    Verfügbarkeit

    Das Modul microsoft.powershell.secretsmanagement liegt aktuell in einer Alphaversion vor und soll im 2. Quartal 2020 allgemein verfügbar sein. Vorerst läuft es auch in PowerShell 7 nur unter Windows, eine Portierung auf Linux und macOS ist aber geplant.

    Keine Kommentare