Tags: PowerShell, Authentifizierung, Passwort
Microsoft stellte eine frühe Version von SecretsManagement vor. Es dient dazu, Passwörter in einem Tresor ("Vault") abzulegen und daraus auszulesen. Es kann über Provider an Passwort-Manager andocken, bringt aber auch einen eigenen Vault mit. Es erspart Admins damit das Speichern von Secure Strings in Textdateien.
Bei der Systemverwaltung mit PowerShell ist es gang und gäbe, dass man sich auf der Kommandozeile oder über Scripts an verschiedenen 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 verschlü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 SecretsManagement 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 SecretsManagement erfolgt standardmäßig über das Paket-Management von PowerShell, mit dem man das Modul von der PSGallery herunterlädt:
Install-Module -Name Microsoft.PowerShell.SecretsManagement `
-AllowPrerelease
Als Systemvoraussetzung 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.
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.
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 Kommandozeile eingibt, wo es möglicherweise 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
Passwörter auslesen
Mit Get-SecretInfo erhält man einen Überblick über die im Tresor gespeicherten Kennwö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 Zeichenkette.
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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Passwörter in PowerShell speichern
- Ablaufdatum von AD-Passwörtern in PowerShell auslesen
- Microsoft fasst alle Authentifizierungsmethoden des Azure AD in einer Policy zusammen
- ManageEngine ADSelfService Plus: Passwort-Reset als Self-Service, MFA für Active Directory
- Exchange Online: Endgültiges Aus für Basic Auth, Ende für Remote PowerShell
Weitere Links