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

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

PowerShell Desired State Configuration Credentials

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

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";
};

Пользуемся.

Теги

Поделиться

Виталий Жуков

Виталий Жуков

Техлид, Архитектор, Разработчик, Microsoft MVP. Более 20 лет опыта в области системной интеграции и разработки программного обеспечения. Специализируюсь на проектировании и внедрении масштабируемых высокопроизводительных программных решений в различных отраслях.