Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: Windows PowerShell 5.0
Пароли в виде обычного текста и пользователи домена
Конфигурации DSC, содержащие учетные данные без шифрования, будут генерировать сообщение об ошибке о паролях в виде обычного текста. Кроме того, DSC выдаст предупреждение при использовании учетных данных домена. Чтобы подавить эти сообщения об ошибках и предупреждениях, используйте ключевые слова данных конфигурации DSC:
- PsDscAllowPlainTextPassword (Пароль простого текста)
- PsDscAllowDomainUser (Пользователь PsDscAllowDomain)
Замечание
Хранение/передача паролей в виде открытого текста в незашифрованном виде, как правило, небезопасна. Рекомендуется защищать учетные данные с помощью методов, описанных далее в этом разделе. Служба DSC службы автоматизации Azure позволяет централизованно управлять учетными данными, которые должны быть скомпилированы в конфигурациях и надежно сохранены. Дополнительные сведения см. в разделе: Компиляция конфигураций DSC / ресурсов учетных данных
Работа с учетными данными в DSC
Конфигурационные ресурсы DSC работают по Local System умолчанию. Однако некоторым ресурсам требуются учетные данные, например, когда ресурсу Package необходимо установить программное обеспечение под определенной учетной записью пользователя.
Более ранние ресурсы использовали жестко заданное Credential имя свойства для обработки этой проблемы. В WMF 5.0 добавлено автоматическое PsDscRunAsCredential свойство для всех ресурсов. Сведения об использовании PsDscRunAsCredentialсм. в разделе Запуск DSC с учетными данными пользователя. Новые и пользовательские ресурсы могут использовать это автоматическое свойство вместо создания собственного свойства для учетных данных.
Замечание
Некоторые ресурсы разрабатываются таким образом, чтобы использовать несколько учетных данных по определенной причине, и они будут иметь свои собственные свойства учетных данных.
Чтобы найти доступные свойства учетных данных для ресурса, используйте либо Get-DscResource -Name ResourceName -Syntax Intellisense в интегрированной среде сценариев (CTRL+SPACE).
Get-DscResource -Name Group -Syntax
Group [String] #ResourceName
{
GroupName = [string]
[Credential = [PSCredential]]
[DependsOn = [string[]]]
[Description = [string]]
[Ensure = [string]{ Absent | Present }]
[Members = [string[]]]
[MembersToExclude = [string[]]]
[MembersToInclude = [string[]]]
[PsDscRunAsCredential = [PSCredential]]
}
В этом примере используется ресурс группы из встроенного PSDesiredStateConfiguration модуля ресурсов DSC. Он может создавать локальные группы, а также добавлять или удалять участников. Он принимает как свойство, Credential так и автоматическое PsDscRunAsCredential свойство. Однако ресурс использует только свойство Credential .
Дополнительные сведения о свойстве PsDscRunAsCredential см. в разделе Запуск DSC с учетными данными пользователя.
Пример: свойство Учетные данные ресурса группы
DSC работает под управлением Local System, поэтому у него уже есть разрешения на изменение локальных пользователей и групп. Если добавленный участник является локальной учетной записью, то учетные данные не требуются.
Group Если ресурс добавляет учетную запись домена в локальную группу, то требуются учетные данные.
Анонимные запросы к Active Directory не допускаются. Свойством CredentialGroup ресурса является учетная запись домена, используемая для запроса Active Directory. В большинстве случаев это может быть общая учетная запись пользователя, поскольку по умолчанию пользователи могут читать большинство объектов в Active Directory.
Пример конфигурации
В следующем примере кода DSC используется для заполнения локальной группы пользователем домена:
Configuration DomainCredentialExample
{
param
(
[PSCredential] $DomainCredential
)
Import-DscResource -ModuleName PSDesiredStateConfiguration
node localhost
{
Group DomainUserToLocalGroup
{
GroupName = 'ApplicationAdmins'
MembersToInclude = 'contoso\alice'
Credential = $DomainCredential
}
}
}
$cred = Get-Credential -UserName contoso\genericuser -Message "Password please"
DomainCredentialExample -DomainCredential $cred
Этот код генерирует как сообщение об ошибке, так и предупреждение:
ConvertTo-MOFInstance : System.InvalidOperationException error processing property 'Credential' OF
TYPE 'Group': 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:
https://go.microsoft.com/fwlink/?LinkId=393729
At line:11 char:9
+ Group
At line:341 char:16
+ $aliasId = ConvertTo-MOFInstance $keywordName $canonicalizedValue
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Write-Error], InvalidOperationException
+ FullyQualifiedErrorId : FailToProcessProperty,ConvertTo-MOFInstance
WARNING: It is not recommended to use domain credential for node 'localhost'. 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 'localhost'.
Compilation errors occurred while processing configuration
'DomainCredentialExample'. Please review the errors reported in error stream and modify your
configuration code appropriately.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:3917 char:5
+ throw $ErrorRecord
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (DomainCredentialExample:String) [], InvalidOperationException
+ FullyQualifiedErrorId : FailToProcessConfiguration
В этом примере есть две проблемы:
- Ошибка объясняет, что пароли в виде обычного текста не рекомендуются
- Предупреждение не рекомендует использовать учетные данные домена
Флаги PSDSCAllowPlainTextPassword и PSDSCAllowDomainUser подавляют ошибку и предупреждают, информируя пользователя о риске.
PSDSCAllowPlainTextPassword
В первом сообщении об ошибке указан URL с документацией. По этой ссылке объясняется, как шифровать пароли с помощью структуры ConfigurationData и сертификата. Для получения дополнительной информации о сертификатах и DSC прочтите этот пост.
Чтобы принудительно ввести пароль в текстовом виде, ресурсу требуется PsDscAllowPlainTextPassword ключевое слово в разделе конфигурационных данных следующим образом:
$password = "ThisIsAPlaintextPassword" | ConvertTo-SecureString -asPlainText -Force
$username = "contoso\Administrator"
[PSCredential] $credential = New-Object System.Management.Automation.PSCredential($username,$password)
Configuration DomainCredentialExample
{
Import-DscResource -ModuleName PSDesiredStateConfiguration
node localhost
{
Group DomainUserToLocalGroup
{
GroupName = 'ApplicationAdmins'
MembersToInclude = 'contoso\alice'
Credential = $credential
}
}
}
$cd = @{
AllNodes = @(
@{
NodeName = 'localhost'
PSDscAllowPlainTextPassword = $true
}
)
}
DomainCredentialExample -ConfigurationData $cd
localhost.mof
Флаг PSDSCAllowPlainTextPassword требует, чтобы пользователь признал риск хранения паролей в виде обычного текста в MOF-файле. В сгенерированном MOF-файле, несмотря на то, что был использован PSCredential-объект , содержащий SecureString , пароли по-прежнему отображаются в виде обычного текста. Это единственный раз, когда учетные данные раскрываются. Получение доступа к этому файлу MOF дает любому пользователю доступ к учетной записи администратора.
/*
@TargetNode='localhost'
@GeneratedBy=Administrator
@GenerationDate=01/31/2019 06:43:13
@GenerationHost=Server01
*/
instance of MSFT_Credential as $MSFT_Credential1ref
{
Password = "ThisIsAPlaintextPassword";
UserName = "Administrator";
};
instance of MSFT_GroupResource as $MSFT_GroupResource1ref
{
ResourceID = "[Group]DomainUserToLocalGroup";
MembersToInclude = {
"contoso\\alice"
};
Credential = $MSFT_Credential1ref;
SourceInfo = "::11::9::Group";
GroupName = "ApplicationAdmins";
ModuleName = "PSDesiredStateConfiguration";
ModuleVersion = "1.0";
ConfigurationName = "DomainCredentialExample";
};
Учетные данные при передаче и хранении
- Флаг PSDscAllowPlainTextPassword позволяет компилировать MOF-файлы, содержащие пароли в виде открытого текста. Примите меры предосторожности при хранении MOF-файлов, содержащих пароли в открытом виде.
- Когда MOF-файл доставляется на узел в режиме Push, WinRM шифрует обмен данными для защиты пароля в открытом виде, если вы не переопределите значение по умолчанию параметром AllowUncoded .
- Шифрование MOF с помощью сертификата защищает файл MOF при хранении до того, как он будет применен к узлу.
-
В режиме Pull вы можете настроить Windows Pull Server на использование HTTPS для шифрования трафика с использованием протокола, указанного в Internet Information Server. Дополнительные сведения см. в статьях Настройка опрашивающего клиента DSC и Защита MOF файлов с помощью сертификатов.
- В службе настройки состояния службы автоматизации Azure трафик по запросу всегда шифруется.
- На узле файлы MOF шифруются при хранении, начиная с PowerShell 5.0.
- В PowerShell 4.0 файлы MOF не шифруются при хранении, если они не были зашифрованы с помощью сертификата при отправке или получении на узел.
Microsoft рекомендует избегать паролей в виде обычного текста из-за значительного риска для безопасности.
Учетные данные домена
При повторном запуске примера сценария конфигурации (с шифрованием или без него) по-прежнему выдается предупреждение о том, что использование учетной записи домена для учетных данных не рекомендуется. Использование локальной учетной записи исключает потенциальное раскрытие учетных данных домена, которые могут быть использованы на других серверах.
При использовании учетных данных с ресурсами DSC по возможности отдавайте предпочтение локальной учетной записи, а не учетной записи домена.
Если в свойстве Username учетных данных есть «\» или «@», DSC будет рассматривать его как учетную запись домена. Существует исключение для "localhost", "127.0.0.1" и "::1" в доменной части имени пользователя.
PSDscAllowDomainUser
В приведенном выше примере ресурса DSC Group для запроса домена Active Directory требуется учетная запись домена. В этом случае добавьте свойство PSDscAllowDomainUser в ConfigurationData блок следующим образом:
$password = "ThisIsAPlaintextPassword" | ConvertTo-SecureString -asPlainText -Force
$username = "contoso\Administrator"
[PSCredential] $credential = New-Object System.Management.Automation.PSCredential($username,$password)
Configuration DomainCredentialExample
{
Import-DscResource -ModuleName PSDesiredStateConfiguration
node localhost
{
Group DomainUserToLocalGroup
{
GroupName = 'ApplicationAdmins'
MembersToInclude = 'contoso\alice'
Credential = $credential
}
}
}
$cd = @{
AllNodes = @(
@{
NodeName = 'localhost'
PSDscAllowDomainUser = $true
PSDscAllowPlainTextPassword = $true
}
)
}
DomainCredentialExample -ConfigurationData $cd
Теперь конфигурационный скрипт сгенерирует MOF-файл без ошибок и предупреждений.