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