Verwenden des SecretStore in der Automatisierung

Wichtig

Das PowerShell-Team hat entschieden, dass Secret-Module funktionsfertig sind und nicht mehr aktiv entwickelt werden. Die Module werden weiterhin für Sicherheits- und kritische Fehlerbehebungen unterstützt. Das Code-Repository wurde archiviert.

Die zuletzt veröffentlichten Versionen sind:

Die Natur der Geheimnisse hat sich seit der Planung dieses Projekts grundlegend verändert. Passwortlose Authentifizierungsmethoden wie Passkeys, Single Sign-on und föderierte Zugangsdaten wie Microsoft Entra ID, Biometrie und Hardware-Sicherheitsschlüssel sind die Zukunft.

Dieser Artikel bietet ein Beispiel für die Nutzung eines Microsoft. PowerShell.SecretStore Vault in einem Automatisierungsszenario. Ein SecretStore-Tresor bietet Ihnen die Möglichkeit, Passwörter, Token und andere Geheimnisse, die Sie in Ihrer Automatisierungspipeline auf dem lokalen Rechner benötigen, sicher zu speichern und abzurufen.

Richte den Host ein, der die Automatisierung ausführt

Für dieses Beispiel musst du zuerst die SecretManagement-Module installieren und konfigurieren. Dieses Beispiel geht davon aus, dass dein Automatisierungshost Windows benutzt. Diese Befehle müssen im Benutzerkontext des Automatisierungskontos auf dem Host ausgeführt werden.

Install-Module -Name Microsoft.PowerShell.SecretStore -Repository PSGallery -Force
Install-Module -Name Microsoft.PowerShell.SecretManagement -Repository PSGallery -Force
Import-Module Microsoft.PowerShell.SecretStore
Import-Module Microsoft.PowerShell.SecretManagement

Konfigurieren des SecretStore-Tresors

Sie müssen außerdem ein Passwort als SecureString erstellen, das zur Sicherung des SecretStore-Tresors verwendet wird. Das Automatisierungssystem, das Sie verwenden, könnte eine sichere Möglichkeit haben, ein Passwort bereitzustellen, mit dem Sie den Tresor sichern können. Zum Beispiel bietet GitHub eine Möglichkeit, Geheimnisse sicher in GitHub Actions zu speichern und zu verwenden. Weitere Informationen finden Sie unter Verwenden von geheimen Schlüsseln in GitHub-Aktionen.

In diesem Beispiel ist das Passwort eine SecureString, die sicher in eine XML-Datei exportiert und durch Windows Data Protection (DPAPI) verschlüsselt wird. Der folgende Befehl fordert dich nach einem Passwort. In diesem Beispiel ist der Benutzername unwichtig.

PS> $credential = Get-Credential -UserName 'SecureStore'

PowerShell credential request
Enter your credentials.
Password for user SecureStore: **************

Sobald du das Passwort hast, kannst du es in einer verschlüsselten XML-Datei speichern.

$securePasswordPath = 'C:\automation\passwd.xml'
$credential.Password |  Export-Clixml -Path $securePasswordPath

Als Nächstes musst du den SecretStore-Tresor konfigurieren. Die Konfiguration setzt die Benutzerinteraktion auf None, sodass SecretStore den Benutzer nie auffordert. Die Konfiguration erfordert ein Passwort, und das Passwort wird als SecureString-Objekt übermittelt. Der Parameter -Confirm:false wird verwendet, damit PowerShell nicht zur Bestätigung auffordert.

Register-SecretVault -Name SecretStore -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
$password = Import-CliXml -Path $securePasswordPath

$storeConfiguration = @{
    Authentication = 'Password'
    PasswordTimeout = 3600 # 1 hour
    Interaction = 'None'
    Password = $password
    Confirm = $false
}
Set-SecretStoreConfiguration @storeConfiguration

Jetzt, wo der Tresor installiert und konfiguriert ist, kannst Set-Secret du die Geheimnisse hinzufügen, die du für deine Automatisierungsskripte brauchst.

Geheimnisse in der Automatisierung verwenden

Das SecretStore-Passwort muss auf sichere Weise angegeben werden. Hier wird das Passwort aus einer Datei importiert, die mit Windows Data Protection (DPAPI) verschlüsselt wurde.

Note

Dies ist eine reine Windows-Lösung, aber eine weitere Möglichkeit ist die Verwendung einer sicheren Variable, die von einem CI-System wie GitHub Actions bereitgestellt wird.

Das Automatisierungsskript muss den Tresor entsperren, um die im Skript benötigten Geheimnisse abzurufen. Das Unlock-SecretStore Cmdlet wird verwendet, um den SecretStore für diese Sitzung freizuschalten. Das Passwort-Timeout war auf eine Stunde konfiguriert. Der Tresor bleibt in der Sitzung für diese Zeit freigeschaltet. Nach der Auszeit muss der Tresor erneut entsperrt werden, bevor Geheimnisse zugänglich sind.

$password = Import-CliXml -Path $securePasswordPath
Unlock-SecretStore -Password $password
$automationPassword = Get-Secret -Name CIJobSecret