共用方式為


在自動化中使用 SecretStore

本文提供在自動化案例中使用 Microsoft.PowerShell.SecretStore 保存庫的範例。 SecretStore 保存庫可讓您安全地儲存和擷取本機電腦上自動化管線中使用的密碼、令牌和其他秘密。

設定執行自動化的主機

在此範例中,您必須先安裝和設定 SecretManagement 模組。 此範例假設您的自動化主機正在執行 Windows。 這些命令必須在主機上自動化帳戶的用戶內容中執行。

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

設定 SecretStore 保存庫

您也必須建立密碼作為用來保護 SecretStore 保存庫的 SecureString 。 您使用的自動化系統可能會有一種方式可以安全地提供可用來保護保存庫的密碼。 例如,GitHub 提供一種方式,以安全地儲存和使用 GitHub Actions 中的秘密。 如需詳細資訊,請參閱在 GitHub Actions 中使用秘密

在此範例中,密碼是 SecureString ,可安全地導出至 XML 檔案,並由 Windows 數據保護 (DPAPI) 加密。 下列命令會提示您輸入密碼。 在此範例中, UserName 不重要。

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

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

擁有密碼之後,您可以將它儲存至加密的 XML 檔案。

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

接下來,您必須設定 SecretStore 保存庫。 組態會將用戶互動設定為 None,讓 SecretStore 永遠不會提示使用者。 組態需要密碼,密碼會以 SecureString 物件的形式傳入。 使用 參數 -Confirm:false ,讓 PowerShell 不會提示確認。

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

現在您已安裝並設定保存庫,您可以使用 Set-Secret 來新增自動化腳本所需的秘密。

在自動化中使用秘密

SecretStore 密碼必須以安全的方式提供。 在這裡,密碼是從使用 Windows 數據保護加密的檔案匯入, (DPAPI) 。

注意

這是僅限 Windows 的解決方案,但另一個選項是使用 CI 系統所提供的安全變數,例如 GitHub Actions。

自動化腳本需要解除鎖定保存庫,才能擷取腳本中所需的秘密。 Cmdlet Unlock-SecretStore 可用來解除鎖定此會話的 SecretStore 。 密碼逾時已設定為1小時。 保存庫會在會話中維持解除鎖定的時間量。 逾時之後,必須先解除鎖定保存庫,才能存取秘密。

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