Udostępnij za pośrednictwem


Używanie magazynu secretStore w automatyzacji

Ten artykuł zawiera przykład użycia magazynu Microsoft.PowerShell.SecretStore w scenariuszu automatyzacji. Magazyn SecretStore umożliwia bezpieczne przechowywanie i pobieranie haseł, tokenów i innych wpisów tajnych, których należy użyć w potoku automatyzacji na komputerze lokalnym.

Konfigurowanie hosta, który uruchamia automatyzację

W tym przykładzie należy najpierw zainstalować i skonfigurować moduły SecretManagement. W tym przykładzie przyjęto założenie, że host automatyzacji korzysta z systemu Windows. Te polecenia muszą być uruchamiane w kontekście użytkownika konta usługi Automation na hoście.

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

Konfigurowanie magazynu SecretStore

Należy również utworzyć hasło jako element SecureString używany do zabezpieczania magazynu SecretStore. Używany system automatyzacji może mieć sposób na bezpieczne podanie hasła, którego można użyć do zabezpieczenia magazynu. Na przykład usługa GitHub umożliwia bezpieczne przechowywanie i używanie wpisów tajnych w GitHub Actions. Aby uzyskać więcej informacji, zobacz Używanie wpisów tajnych w GitHub Actions.

W tym przykładzie hasło jest bezpiecznym ciągiem, który jest bezpiecznie eksportowany do pliku XML i szyfrowany przez usługę Windows Data Protection (DPAPI). Następujące polecenie wyświetla monit o podanie hasła. W tym przykładzie nazwa_użytkownika jest nieważna.

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

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

Po utworzeniu hasła możesz zapisać je w zaszyfrowanym pliku XML.

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

Następnie należy skonfigurować magazyn SecretStore . Konfiguracja ustawia interakcję użytkownika na Nonewartość , aby usługa SecretStore nigdy nie monituje użytkownika. Konfiguracja wymaga hasła, a hasło jest przekazywane jako obiekt SecureString . Parametr -Confirm:false jest używany tak, aby program PowerShell nie monituje o potwierdzenie.

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

Po zainstalowaniu i skonfigurowaniu magazynu możesz użyć Set-Secret polecenia , aby dodać wpisy tajne potrzebne dla skryptów automatyzacji.

Używanie wpisów tajnych w automatyzacji

Hasło SecretStore musi być podane w bezpieczny sposób. W tym miejscu hasło jest importowane z pliku, który został zaszyfrowany przy użyciu usługi Windows Data Protection (DPAPI).

Uwaga

Jest to rozwiązanie tylko dla systemu Windows, ale inną opcją jest użycie bezpiecznej zmiennej dostarczonej przez system ciągłej integracji, taki jak GitHub Actions.

Skrypt automatyzacji musi odblokować magazyn, aby pobrać wpisy tajne potrzebne w skrypce. Polecenie Unlock-SecretStore cmdlet służy do odblokowania magazynu wpisów tajnych dla tej sesji. Limit czasu hasła został skonfigurowany przez 1 godzinę. Magazyn pozostaje odblokowany w sesji przez ten czas. Po przekroczeniu limitu czasu magazyn musi zostać odblokowany ponownie przed uzyskaniem dostępu do wpisów tajnych.

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