Opcje poświadczeń w danych konfiguracjiCredentials Options in Configuration Data

Dotyczy: Windows PowerShell 5,0Applies To: Windows PowerShell 5.0

Hasła zwykłego tekstu i użytkownicy domenyPlain Text Passwords and Domain Users

Konfiguracje DSC zawierające poświadczenia bez szyfrowania wygenerują komunikat o błędzie dotyczący haseł w postaci zwykłego tekstu.DSC configurations containing a credential without encryption will generate an error message about plain text passwords. Ponadto DSC będzie generować ostrzeżenie w przypadku korzystania z poświadczeń domeny.Also, DSC will generate a warning when using domain credentials. Aby pominąć te komunikaty o błędach i ostrzeżeniach, Użyj słów kluczowych danych konfiguracji DSC:To suppress these error and warning messages use the DSC configuration data keywords:

  • PsDscAllowPlainTextPasswordPsDscAllowPlainTextPassword
  • PsDscAllowDomainUserPsDscAllowDomainUser

Uwaga

Przechowywanie/przesyłanie haseł w postaci zwykłego tekstu nie jest w ogóle niebezpieczne.Storing/transmitting plaintext passwords unencrypted is generally not secure. Zalecane jest zabezpieczanie poświadczeń przy użyciu technik przedstawionych w dalszej części tego tematu.Securing credentials by using the techniques covered later in this topic is recommended. Usługa Azure Automation DSC umożliwia centralne zarządzanie poświadczeniami, które mają być kompilowane w konfiguracjach i przechowywane bezpiecznie.The Azure Automation DSC service allows you to centrally manage credentials to be compiled in configurations and stored securely. Aby uzyskać więcej informacji, zobacz: Kompilowanie konfiguracji DSC/zasobów poświadczeńFor information, see: Compiling DSC Configurations / Credential Assets

Obsługa poświadczeń w DSCHandling Credentials in DSC

Zasoby konfiguracji DSC działają domyślnie Local System jako domyślne.DSC configuration resources run as Local System by default. Niektóre zasoby wymagają jednak podania poświadczeń, na przykład gdy Package zasób wymaga zainstalowania oprogramowania w ramach określonego konta użytkownika.However, some resources need a credential, for example when the Package resource needs to install software under a specific user account.

Starsze zasoby używały ustalonej Credential nazwy właściwości, aby ją obsłużyć.Earlier resources used a hard-coded Credential property name to handle this. W przypadku programu WMF 5,0 PsDscRunAsCredential dodano automatyczną właściwość dla wszystkich zasobów.WMF 5.0 added an automatic PsDscRunAsCredential property for all resources. Aby uzyskać informacje o PsDscRunAsCredentialużywaniu programu, zobacz Uruchamianie DSC z poświadczeniami użytkownika.For information about using PsDscRunAsCredential, see Running DSC with user credentials. Nowsze zasoby i zasoby niestandardowe mogą korzystać z tej automatycznej właściwości zamiast tworzyć własną Właściwość poświadczeń.Newer resources and custom resources can use this automatic property instead of creating their own property for credentials.

Uwaga

Projekt niektórych zasobów jest używany z wieloma poświadczeniami z określonej przyczyny i będą mieć własne właściwości poświadczeń.The design of some resources are to use multiple credentials for a specific reason, and they will have their own credential properties.

Aby znaleźć dostępne właściwości poświadczeń dla zasobu, użyj albo funkcji Get-DscResource -Name ResourceName -Syntax INTELLISENSE w ISE (CTRL+SPACE).To find the available credential properties on a resource use either Get-DscResource -Name ResourceName -Syntax or the Intellisense in the ISE (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]]
}

Ten przykład używa zasobu grupy z PSDesiredStateConfiguration wbudowanego modułu zasobów DSC.This example uses a Group resource from the PSDesiredStateConfiguration built-in DSC resource module. Można utworzyć grupy lokalne i dodać lub usunąć członków.It can create local groups and add or remove members. Akceptuje Credential Właściwość i Właściwość automatyczną PsDscRunAsCredential .It accepts both the Credential property and the automatic PsDscRunAsCredential property. Jednak zasób używa tylko Credential właściwości.However, the resource only uses the Credential property.

Aby uzyskać więcej informacji na PsDscRunAsCredential temat właściwości, zobacz Uruchamianie DSC przy użyciu poświadczeń użytkownika.For more information about the PsDscRunAsCredential property, see Running DSC with user credentials.

Przykład: Właściwość poświadczeń zasobu grupyExample: The Group resource Credential property

Konfiguracja DSC działa Local Systemw programie, więc ma już uprawnienia do zmiany lokalnych użytkowników i grup.DSC runs under Local System, so it already has permissions to change local users and groups. Jeśli dodany element członkowski jest kontem lokalnym, nie jest wymagane żadne poświadczenie.If the member added is a local account, then no credential is necessary. Jeśli Group zasób dodaje konto domeny do grupy lokalnej, wymagane jest poświadczenie.If the Group resource adds a domain account to the local group, then a credential is necessary.

Zapytania anonimowe do Active Directory są niedozwolone.Anonymous queries to Active Directory are not allowed. Credential Właściwość Group zasobu jest kontem domeny używanym do wykonywania zapytań Active Directory.The Credential property of the Group resource is the domain account used to query Active Directory. W większości przypadków może to być ogólne konto użytkownika, ponieważ domyślnie użytkownicy mogą odczytywać większość obiektów w Active Directory.For most purposes this could be a generic user account, because by default users can read most of the objects in Active Directory.

Przykładowa konfiguracjaExample Configuration

Poniższy przykładowy kod używa DSC do wypełniania grupy lokalnej użytkownikom domeny:The following example code uses DSC to populate a local group with a domain user:

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

Ten kod generuje błąd i komunikat ostrzegawczy:This code generates both an error and warning message:

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

W tym przykładzie występują dwa problemy:This example has two issues:

  1. Wystąpił błąd wyjaśniający, że hasła w postaci zwykłego tekstu nie są zalecaneAn error explains that plain text passwords are not recommended
  2. Ostrzeżenie powiadamia o użyciu poświadczeń domenyA warning advises against using a domain credential

Flagi PSDSCAllowPlainTextPassword i PSDSCAllowDomainUser pomijają błąd i ostrzeżenie informujące użytkownika o ryzyku.The flags PSDSCAllowPlainTextPassword and PSDSCAllowDomainUser suppress the error and warning informing the user of the risk involved.

PSDSCAllowPlainTextPasswordPSDSCAllowPlainTextPassword

Pierwszy komunikat o błędzie zawiera adres URL z dokumentacją.The first error message has a URL with documentation. Ten link wyjaśnia, jak szyfrować hasła przy użyciu struktury ConfigurationData i certyfikatu.This link explains how to encrypt passwords using a ConfigurationData structure and a certificate. Aby uzyskać więcej informacji na temat certyfikatów i konfiguracji DSC, Przeczytaj ten wpis.For more information on certificates and DSC read this post.

Aby wymusić hasło zwykłego tekstu, zasób wymaga PsDscAllowPlainTextPassword słowa kluczowego w sekcji dane konfiguracyjne w następujący sposób:To force a plain text password, the resource requires the PsDscAllowPlainTextPassword keyword in the configuration data section as follows:

$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. MOFlocalhost.mof

Flaga PSDSCAllowPlainTextPassword wymaga, aby użytkownik potwierdzał ryzyko przechowywania haseł w postaci zwykłego tekstu w pliku MOF.The PSDSCAllowPlainTextPassword flag requires that the user acknowledge the risk of storing plain text passwords in a MOF file. W wygenerowanym pliku MOF, mimo że został użyty obiekt PSCredential zawierający element SecureString , hasła nadal są wyświetlane jako zwykły tekst.In the generated MOF file, even though a PSCredential object containing a SecureString was used, the passwords still appear as plain text. Jest to jedyny czas, w którym są ujawniane poświadczenia.This is the only time the credentials are exposed. Uzyskanie dostępu do tego pliku MOF daje wszystkim dostęp do konta administratora.Gaining access to this MOF file gives anyone access to the Administrator account.

/*
@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";

};

Poświadczenia podczas przesyłania i w czasie spoczynkuCredentials in transit and at rest

  • Flaga PSDscAllowPlainTextPassword umożliwia Kompilowanie plików MOF, które zawierają hasła w postaci zwykłego tekstu.The PSDscAllowPlainTextPassword flag allows the compilation of MOF files that contain passwords in clear text. Należy podjąć środki ostrożności podczas przechowywania plików MOF zawierających hasła w postaci zwykłego tekstu.Take precautions when storing MOF files containing clear text passwords.
  • Gdy plik MOF jest dostarczany do węzła w trybie push , usługa WinRM szyfruje komunikację w celu ochrony hasła w postaci zwykłego tekstu, chyba że wartość domyślna zostanie zastąpiona parametrem AllowUnencrypted .When the MOF file is delivered to a Node in Push mode, WinRM encrypts the communication to protect the clear text password unless you override the default with the AllowUnencrypted parameter.
    • Szyfrowanie pliku MOF przy użyciu certyfikatu chroni plik MOF w stanie spoczynku, zanim zostanie on zastosowany do węzła.Encrypting the MOF with a certificate protects the MOF file at rest before it has been applied to a node.
  • W trybie ściągania można skonfigurować serwer ściągania systemu Windows tak, aby używał protokołu HTTPS do szyfrowania ruchu przy użyciu protokołu określonego w programie Internet Information Server.In Pull mode, you can configure Windows pull server to use HTTPS to encrypt traffic using the protocol specified in Internet Information Server. Aby uzyskać więcej informacji, zobacz artykuł Konfigurowanie klienta ściągania DSC i Zabezpieczanie plików MOF przy użyciu certyfikatów.For more information, see the articles Setting up a DSC pull client and Securing MOF files with Certificates.
  • W węźle pliki MOF są szyfrowane w spoczynku, począwszy od programu PowerShell 5,0.On the Node, MOF files are encrypted at rest Beginning in PowerShell 5.0.
    • W plikach MOF programu PowerShell 4,0 są szyfrowane w stanie spoczynku, chyba że są szyfrowane przy użyciu certyfikatu podczas wypychania lub ściągania do węzła.In PowerShell 4.0 MOF files are unencrypted at rest unless they are encrypted with a certificate when they pushed or pulled to the Node.

Firma Microsoft zaleca uniknięcie hasła zwykłego tekstu ze względu na znaczące zagrożenie bezpieczeństwa.Microsoft advises to avoid plain text passwords due to the significant security risk.

Poświadczenia domenyDomain Credentials

Ponowne uruchomienie przykładowego skryptu konfiguracji (z szyfrowaniem lub bez niego) nadal generuje ostrzeżenie, że nie zaleca się korzystania z konta domeny w celu podania poświadczeń.Running the example configuration script again (with or without encryption), still generates the warning that using a domain account for a credential is not recommended. Użycie konta lokalnego eliminuje potencjalne narażenie poświadczeń domeny, które mogą być używane na innych serwerach.Using a local account eliminates potential exposure of domain credentials that could be used on other servers.

W przypadku korzystania z poświadczeń z zasobami DSC Preferuj konto lokalne na koncie domeny, jeśli jest to możliwe.When using credentials with DSC resources, prefer a local account over a domain account when possible.

Jeśli w Username właściwości poświadczenia istnieje\wartość ""@lub "", usługa DSC będzie traktować ją jako konto domeny.If there is a '\' or '@' in the Username property of the credential, then DSC will treat it as a domain account. Występuje wyjątek dla "localhost", "127.0.0.1" i ":: 1" w części domeny nazwy użytkownika.There is an exception for "localhost", "127.0.0.1", and "::1" in the domain portion of the user name.

PSDscAllowDomainUserPSDscAllowDomainUser

W powyższym przykładzie zasobu DSC Group zapytanie o domenę Active Directory wymaga konta domeny.In the DSC Group resource example above, querying an Active Directory domain requires a domain account. W takim przypadku Dodaj PSDscAllowDomainUser właściwość do ConfigurationData bloku w następujący sposób:In this case add the PSDscAllowDomainUser property to the ConfigurationData block as follows:

$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

Teraz skrypt konfiguracji generuje plik MOF bez błędów ani ostrzeżeń.Now the configuration script will generate the MOF file with no errors or warnings.