====== SecretsManagement: PowerShell erhält Modul für Passwort-Manager ====== {{:powershell:module:authentifizierung-teaser.png?200|}}\\ Microsoft 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''\\ {{:powershell:module:ps-secretsmanagement-install-ps7.png?400|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.\\ {{:powershell:module:ps-secretsmanagement-install-fehler.png?400|Die Installation der Preview von Secrets­Management über das Paket-Management scheitert unter Windows PowerShell 5.1.}}\\ Daher muss man das Package manuell [[https://www.powershellgallery.com/packages/Microsoft.PowerShell.SecretsManagement/0.1.0-alpha1|hier]] 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.\\ {{:powershell:module:ps-secretsmanagement-manual-install.png?400|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 {{:powershell:module:ps-secretsmanagement-add-get-secret.png?400|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.