Condividi tramite


Usare SecretStore nell'automazione

Questo articolo fornisce un esempio per l'uso di un insieme di credenziali di Microsoft.PowerShell.SecretStore in uno scenario di automazione. Un insieme di credenziali secretStore consente di archiviare e recuperare in modo sicuro le password, i token e altri segreti da usare nella pipeline di automazione nel computer locale.

Configurare l'host che esegue l'automazione

Per questo esempio è prima necessario installare e configurare i moduli SecretManagement. In questo esempio si presuppone che l'host di automazione stia eseguendo Windows. Questi comandi devono essere eseguiti nel contesto utente dell'account di automazione nell'host.

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

Configurare l'insieme di credenziali di SecretStore

È anche necessario creare una password come secureString usata per proteggere l'insieme di credenziali di SecretStore. Il sistema di automazione usato potrebbe avere un modo per fornire in modo sicuro una password che è possibile usare per proteggere l'insieme di credenziali. GitHub, ad esempio, offre un modo per archiviare e usare in modo sicuro i segreti in GitHub Actions. Per altre informazioni, vedere Uso dei segreti in GitHub Actions.

In questo esempio la password è un secureString esportato in modo sicuro in un file XML e crittografato da Windows Data Protection (DPAPI). Il comando seguente richiede una password. In questo esempio userName non è importante.

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

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

Dopo aver ottenuto la password, è possibile salvarla in un file XML crittografato.

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

È quindi necessario configurare l'insieme di credenziali secretStore . La configurazione imposta l'interazione dell'utente su None, in modo che SecretStore non venga mai richiesto all'utente. La configurazione richiede una password e la password viene passata come oggetto SecureString . Il -Confirm:false parametro viene usato in modo che PowerShell non venga richiesto di confermare.

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

Dopo aver installato e configurato l'insieme di credenziali, è possibile usare Set-Secret per aggiungere i segreti necessari per gli script di automazione.

Usare i segreti nell'automazione

La password secretStore deve essere fornita in modo sicuro. In questo caso la password viene importata da un file crittografato usando Windows Data Protection (DPAPI).

Nota

Si tratta di una soluzione solo Windows, ma un'altra opzione consiste nell'usare una variabile sicura fornita da un sistema CI come GitHub Actions.

Lo script di automazione deve sbloccare l'insieme di credenziali per recuperare i segreti necessari nello script. Il Unlock-SecretStore cmdlet viene usato per sbloccare SecretStore per questa sessione. Il timeout della password è stato configurato per 1 ora. L'insieme di credenziali rimane sbloccato nella sessione per quel periodo di tempo. Dopo il timeout, l'insieme di credenziali deve essere sbloccato di nuovo prima di poter accedere ai segreti.

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