PowerShell DSC. Учетные записи
Про использование учетных записей в PowerShell Desired State Configuration.
При попытке скомпилировать файл конфигурации в PowerShell DSC, использующий учетные записи, первый получаемый результат - ошибка:
Converting and storing encrypted passwords as plain text is not recommended. For more information on securing credentials in MOF file, please refer to MSDN blog: http://go.microsoft.com/fwlink/?LinkId=393729
И предупреждение в случае использования доменных учетных записей:
WARNING: It is not recommended to use domain credential for node 'NODENAME'. In order to suppress the warning, you can add a property named 'PSDscAllowDomainUser' with a value of $true to your DSC configuration data for node 'NODENAME'.
Посмотрим как можно и как правильно скомпилировать mof-файл в этом случае. Для примера возьмем следующую конфигурацию:
Configuration MyCustomConfiguration {
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PSCredential]
$Account
)
Node localhost
{
#DSC resource using $Account
}
}
Компиляция его, которая порождает выше описанные ошибки:
MyCustomConfiguration -Account (Get-Credential)
ConfigurationData
Чтобы разрешить проблему компиляцию необходимо дополнить параметром ConfigurationData.
Способ 1. Неправильный
Самый простой способ - разрешить хранение пароля в открытом виде. Примерно так:
$ConfigData = @{
AllNodes = @(
@{
NodeName = 'localhost'
PSDscAllowPlainTextPassword = $true
PsDscAllowDomainUser = $true
}
)
}
MyCustomConfiguration -Account (Get-Credential) -ConfigurationData $ConfigData
Параметр PSDscAllowPlainTextPassword разрешает хранить пароль в открытом виде, а PsDscAllowDomainUser - использование доменных учетных записей.
Учетные данные (логин/пароль) будут записаны в mof-файл примерно в таком виде:
instance of MSFT_Credential as $MSFT_Credential1ref
{
Password = "P@ssw0rd";
UserName = "domain\\admin";
};
Т.е. делать так нельзя даже если очень надо.
Способ 2. Правильный
В PowerShell DSC есть возможность зашифровать пароль с помощью сертификата. В этом случае конфигурация будет примерно такой:
$ConfigData = @{
AllNodes = @(
@{
NodeName = 'SP2016SRV'
CertificateFile = 'C:\sp\localhost.cer'
Thumbprint = '35024c5060014373e768b900b762f6793c5575d9'
PSDscAllowDomainUser = $true
}
)
}
После компиляции mof-файл не будет содержать пароль в открытом виде:
instance of MSFT_Credential as $MSFT_Credential1ref
{
Password = "-----BEGIN CMS-----\...\n-----END CMS-----";
UserName = "domain\\admin";
};
Пользуемся.