自動化で SecretStore を使用する

この記事では、自動化シナリオで Microsoft.PowerShell.SecretStore コンテナーを使用する例を示します。 SecretStore コンテナーを使用すると、ローカル コンピューター上の自動化パイプラインで使用する必要があるパスワード、トークン、その他のシークレットを安全に格納および取得できます。

自動化を実行するホストを設定する

この例では、まず SecretManagement モジュールをインストールして構成する必要があります。 この例では、オートメーション ホストが Windows を実行していることを前提としています。 これらのコマンドは、ホスト上の Automation アカウントのユーザー コンテキストで実行する必要があります。

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 Data Protection (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 Data Protection (DPAPI) を使用して暗号化されたファイルからパスワードをインポートしています。

注意

これは Windows 専用のソリューションですが、もう 1 つのオプションは、GitHub Actionsなどの CI システムによって提供されるセキュリティで保護された変数を使用することです。

自動化スクリプトでは、コンテナーのロックを解除して、スクリプトで必要なシークレットを取得する必要があります。 コマンドレットは Unlock-SecretStore 、このセッションの SecretStore のロックを解除するために使用されます。 パスワード のタイムアウトが 1 時間構成されました。 コンテナーは、その期間、セッションでロック解除されたままになります。 タイムアウト後は、シークレットにアクセスする前に、コンテナーのロックを再度解除する必要があります。

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