Melpomene - Fotolia

Mit diesen Modulen schützen Sie sensible Daten in PowerShell

SecretManagement und SecretStore sind zwei neue PowerSell-Module mit denen Sie sensible Informationen bei der Automatisierung schützen. Wir erklären, wie man sie einsetzt.

Automatisierung mit PowerShell ist ein zweischneidiges Schwert. Wenn ein Skript die meisten Verwaltungsaufgaben übernimmt, müssen Sie genau wissen, was Sie tun, um schwerwiegende Sicherheitsprobleme zu verhindern. Im schlimmsten Fall können Sie versehentlich Anmeldeinformationen preisgeben.

Ein häufiges Problem mit PowerShell ist es, dass vertrauliche Informationen – Anmeldeinformationen, Schlüssel und andere Werte – Teil des Skripts sein müssen und dadurch sichtbar sein könnten. Es gibt PowerShell-Befehle, mit denen Sie Anmeldeinformationen generieren und verwalten und sie als verschlüsselte Dateien exportieren.

Sie können PowerShell diese Daten wieder importieren lassen, wenn das Skript ausgeführt wird, aber das sind inoffizielle Tricks und kein sicherer Ansatz. Ein Angreifer mit Zugriff auf Ihre Infrastruktur könnte Anmeldeinformationen aus einer Vielzahl von Quellen ziehen. Microsoft hat zwei PowerShell-Module namens SecretManagement und SecretStore entwickelt, um Anmeldeinformationen und andere sensible Daten zu schützen.

Wie funktionieren die Module SecretManagement und SecretStore?

Das SecretManagement-Modul ermöglicht das Speichern von Geheimnissen in Erweiterungstresoren, die lokal oder remote gespeichert sind, und das anschließende sichere Abrufen dieser Informationen. Das Modul funktioniert als Worker-Prozess, der vertrauliche Daten gemeinsam abspeichert, verwaltet und verschlüsselt.

Das SecretManagement-Modul unterstützt fünf geheime Datentypen

  • PSCredentials
  • Hash-Tabellen
  • SecureString
  • String
  • Byte[]

Die Kernbefehle des Moduls optimieren die Fähigkeit von PowerShell, auf neue und gespeicherte geschützte Informationen zuzugreifen und diese zu verwalten sowie Tresorerweiterungen zu registrieren und zu verwalten.

Das SecretStore-Modul ist ein Erweiterungstresor, der mit dem SecretManagement-Modul verbunden ist. Es speichert Geheimnisse in einer Datei für das aktuelle Benutzerkonto und verwendet kryptografische .NET-APIs, um alle Dateiinhalte zu verschlüsseln. Das Modul schützt Geheimnisse im Speicher und entschlüsselt sie beim Abrufen. Während der Konfiguration legen Sie ein Passwort zum Speichern, Zugreifen und Abrufen von Geheimnissen fest. Erweiterungstresore unterstützen außerdem das Management von Metadaten, die einem Geheimnis zugeordnet sind.

Das Modul funktioniert auf allen unterstützen PowerShell-Versionen, einschließlich Windows PowerShell 5.1 und der neueren plattformübergreifenden PowerShell für Windows, Linux und macOS.

So installieren Sie die PowerShell-Module

Um das SecretManagement-Modul aus der PowerShell-Galerie zu installieren, verwenden Sie den folgenden Befehl:

Install-Module -Name Microsoft.PowerShell.SecretManagement -Repository PSGallery

Um das SecretStore-Modul aus der PowerShell-Galerie zu installieren, verwenden Sie den folgenden Befehl

Install-Module -Name Microsoft.PowerShell.SecretStore -Repository PSGallery

Um die verfügbaren Befehle für jedes Modul anzuzeigen, verwenden Sie den Get-Befehl:

Get-Command -Modul Microsoft.PowerShell.SecretManagement

Get-Secret

ruft ein Geheimnis aus dem Tresor mit seinem Namen ab.

Get-SecretInfo

ruft Metadaten für ein Geheimnis aus dem Tresor ab.

Get-SecretVault

gibt Informationen über einen registrierten Tresor aus.

Register-SecretVault

führt einen Erweiterungstresor für den aktuellen Nutzer hinzu.

Remove-Secret

löscht ein Geheimnis aus dem Erweiterungstresor, der in SecretManagement registriert ist.

Set-Secret

fügt ein Geheimnis aus dem Erweiterungstresor, der in SecretManagement registriert ist, hinzu.

Set-SecretInfo

fügt einem Geheimnis im Tresor geheime Metadaten hinzu.

Set-SecretVaultDefault

aktualisiert die Tresor-Registry, um den gewählten Tresor zum Standardtresor des aktuellen Nutzers zu machen.

Test-SecretVault

durchsucht den Erweiterungstresor nach Fehlern.

Unregister-SecretVault

entfernt den Erweiterungstresor aus SecretManagement für den aktuellen Nutzer.

Führen Sie den folgenden Befehl aus, um sich alle für das SecretStore-Modul verfügbaren Befehle anzeigen zu lassen:

Get-Command -Modul Microsoft.PowerShell.SecretStore

Get-SecretStoreConfiguration

findet SecretStore-Konfigurationsinformationen und gibt sie aus

Reset-SecretStore

löscht geheime Daten und setzt SecretStore auf die Standartwerte zurück.

Set-SecretStoreConfiguration

konfiguriert SecretStore.

Set-SecretStorePassword

ändert das aktuelle SecretStore-Passwort.

Unlock-SecretStore

entschlüsselt SecretStore mit dem Passwort.

Mit SecretManagement- und SecretStore-Modulen arbeiten

Sie verwenden die beiden PowerShell-Module zusammen für unterschiedliche Szenarien und Speicher.

Führen Sie zunächst Get-SecretVault aus, um alle registrierten geheimen Tresore anzuzeigen.

Das SecretManagement-Modul hilft Ihnen bei der Verwaltung geheimer Informationen, nachdem Sie einen Erweiterungstresor registriert haben. Es funktioniert auch mit anderen Tresoren, darunter Azure Key Vault, KeePass, LastPass und HashiCorp. Microsoft stellt eine Liste der verfügbaren kompatiblen Tresore bereit.

Erstellen Sie zunächst einen Tresor mit dem Cmdlet Register-SecretVault mit einem Namen, Modulnamen und anderen Details, wenn Sie nicht die Standardkonfiguration verwenden möchten. Führen Sie den folgenden Befehl aus, um einen Standardtresor zu erstellen:

Register-SecretVault -Name MySecrets -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault

Führen Sie Get-SecretVault aus, um zu überprüfen, ob der Tresor namens MySecret vorhanden ist. Es sollte den Wert als True zurückgeben.

Um ein Geheimnis zu erstellen, führen Sie Set-Secret mit einem Namen und Wert aus. Um beispielsweise ein Geheimnis hinzuzufügen, schreiben Sie folgenden Befehl:

Set-Secret -Name Password -Secret "Pass@word1"

Abbildung 1: Das Set-Secret-cmdlet fügt ein registrierten Tresor ein Geheimnis hinzu.
Abbildung 1: Das Set-Secret-cmdlet fügt ein registrierten Tresor ein Geheimnis hinzu.

Wenn es das erste Geheimnis ist, das Sie im Tresor speichern, fordert PowerShell Sie zur Eingabe eines Kennworts auf, um Geheimnisse hinzuzufügen, abzurufen, zu entfernen und zu speichern.

Um den Wert abzurufen, rufen Sie den Befehl Get-Secret mit dem Namen des geheimen Elements auf:

Get-Secret -Name Passwort

Wenn Sie das Geheimnis abrufen, gibt PowerShell keine Klartextversion des gespeicherten Werts zurück, sondern den Typ System.Security.SecureString. Um den tatsächlichen Wert abzurufen, verwenden Sie die -AsPlainText-Eigenschaft:

Get-Secret -Name Passwort -AsPlainText

Sie können Metadaten hinzufügen, um das Geheimnis zu beschreiben, zum Beispiel den Verwendungszweck des gespeicherten Werts. Sie können auch Informationen zum verschlüsselten Geheimnis in den Metadaten überprüfen. Das Modul speichert Metadaten nicht sicher, daher sollte es keine sensiblen Informationen enthalten.

Set-Secret -Name OAuthToken -Secret "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9" -Metadata @{Purpose="Office 365 OAuth Token"}

Um die zugehörigen Informationen für den geheimen Namen zu finden, verwenden Sie den folgenden Befehl

Get-SecretInfo -Name OAuthToken

Abbildung 2: Verwenden Sie das Get-SecretInfo-Cmdlet, um Metadaten abzurufen.
Abbildung 2: Verwenden Sie das Get-SecretInfo-Cmdlet, um Metadaten abzurufen.

Wählen Sie mit der gewohnten PowerShell-Syntax das gewünschte Feld aus und rufen sie damit die zugehörigen Metadaten ab.

Get-SecretInfo -Name OAuthToken | Ausgewählter Name, Metadata

Abbildung 3: Ausgabe der Metadaten für en gespeichertes Geheimnis.
Abbildung 3: Ausgabe der Metadaten für en gespeichertes Geheimnis.

Möchten Sie ein Geheimnis aus dem Tresor entfernen, verwenden Sie einen der beiden folgenden PowerShell-Befehle:

Remove-Secret -Name OAuthToken

Get-Secret -Name OAuthToken | Remove-Secret

Beachten Sie dabei unbedingt, dass Sie ein einmal entferntes Geheimnis nicht mehr wiederherstellen können.

Durch die Verwendung mehrerer Tresore können Sie kritische Werte nach Bedarf getrennt speichern.

Anwendungsfälle für SecretManagement und SecretStore

Die Fähigkeit, Anmeldeinformationen, Schlüssel und alle kritischen oder vertraulichen Werte zur Wiederverwendung in einem Tresor zu speichern, ist eine leistungsstarke Ergänzung von PowerShell. Im Folgenden sind drei häufige Situationen für diese Module aufgeführt:

  • Speichern von Anmeldeinformationen für Remote-PowerShell-Verbindungen;
  • Wiederverwendung von Token für den Zugriff auf andere Systeme; und
  • Speichern sicherer URLs für RESTful-API-Aufrufe.

Diese drei Kategorien decken die meisten PowerShell-Automatisierungsszenarien ab. Eine Verbindung zu Cloud-Diensten wie Microsoft 365 und Azure erfordert Anmeldeinformationen, die Sie dank der beiden Module, die wir in diesem Artikel vorstellen, sicher speichern und abrufen können.

Im folgenden Beispielcode werden Microsoft-365-Anmeldeinformationen festgelegt, abgerufen und an das Microsoft-Online-Modul übergeben, um eine Verbindung mit der Cloud herzustellen.

# Create Microsoft 365 Credential Secret

$username = "[email protected]"

$password = ConvertTo-SecureString "Pass@word1" -AsPlainText -Force

$creds = New-Object System.Management.Automation.PSCredential($username,$password)

# Create the secret by storing the PSCredential object

Set-Secret -Name M365 -Secret $cred -Metadata @{Information="M365 Credentials for Tenant"}

# Retrieve the Stored Credentials

$m365creds = Get-Secret -Name M365Creds

# Connect to Microsoft Online with the retrieved credentials

Connect-MsolService -Credential $m365creds

Die PowerShell-Module SecretManagement und SecretStore fügen eine Sicherheitsebene nicht nur für Anmeldeinformationen, sondern auch für API-Schlüssel, Passphrasen, GUIDs (Globally Unique Identifier) und andere Informationen hinzu, um sie beim Ausführen von PowerShell sicher zu nutzen.

Erfahren Sie mehr über Data-Center-Betrieb