PowerShell DSC. Учетные записи

Про использование учетных записей в PowerShell Desired State Configuration.

PowerShell Desired State Configuration Credentials

При попытке скомпилировать файл конфигурации в 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-файл в этом случае. Для примера возьмем следующую конфигурацию:

  1. Configuration MyCustomConfiguration {
  2.     param(
  3.         [Parameter(Mandatory=$true)]
  4.         [ValidateNotNullorEmpty()]
  5.         [PSCredential]
  6.         $Account
  7.     )
  8.  
  9.     Node localhost
  10.     {
  11.     #DSC resource using $Account
  12.     }
  13. }

Компиляция его, которая порождает выше описанные ошибки:

  1. MyCustomConfiguration -Account (Get-Credential)

ConfigurationData

Чтобы разрешить проблему компиляцию необходимо дополнить параметром ConfigurationData.

Способ 1. Неправильный

Самый простой способ - разрешить хранение пароля в открытом виде. Примерно так:

  1. $ConfigData = @{
  2.     AllNodes = @(
  3.         @{
  4.             NodeName = 'localhost'
  5.             PSDscAllowPlainTextPassword = $true
  6.             PsDscAllowDomainUser = $true
  7.         }
  8.     )
  9. }
  10.  
  11. 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 есть возможность зашифровать пароль с помощью сертификата. В этом случае конфигурация будет примерно такой:

  1. $ConfigData = @{
  2.     AllNodes = @(
  3.         @{
  4.             NodeName = 'SP2016SRV'
  5.             CertificateFile = 'C:\sp\localhost.cer'
  6.             Thumbprint = '‎35024c5060014373e768b900b762f6793c5575d9'
  7.             PSDscAllowDomainUser = $true
  8.         }
  9.     )
  10. }

После компиляции mof-файл не будет содержать пароль в открытом виде:

instance of MSFT_Credential as $MSFT_Credential1ref
{
 Password = "-----BEGIN CMS-----\...\n-----END CMS-----";
 UserName = "domain\\admin";
};

Пользуемся.


Поделиться

Коментарии