Поделиться через


Использование 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

Необходимо также создать пароль в качестве SecureString , который используется для защиты хранилища SecretStore. Используемая система автоматизации может иметь способ безопасного ввода пароля, который можно использовать для защиты хранилища. Например, 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.

Скрипт автоматизации должен разблокировать хранилище, чтобы получить секреты, необходимые в скрипте. Командлет Unlock-SecretStore используется для разблокировки SecretStore для этого сеанса. Время ожидания пароля было настроено на 1 час. Хранилище остается незаблокированным в сеансе в течение этого периода времени. По истечении времени ожидания хранилище должно быть разблокировано еще раз, прежде чем можно будет получить доступ к секретам.

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