Opcje poświadczeń w danych konfiguracji

Dotyczy: Windows PowerShell 5.0

Hasła zwykłego tekstu i użytkownicy domeny

Konfiguracje DSC zawierające poświadczenia bez szyfrowania wygenerują komunikat o błędzie dotyczący haseł w postaci zwykłego tekstu. Ponadto dsC wygeneruje ostrzeżenie podczas korzystania z poświadczeń domeny. Aby pominąć te komunikaty o błędach i ostrzeżeniach, użyj słów kluczowych danych konfiguracji DSC:

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

Uwaga

Przechowywanie/przesyłanie haseł w postaci zwykłego tekstu niezaszyfrowanych zwykle nie jest bezpieczne. Zalecane jest zabezpieczanie poświadczeń przy użyciu technik omówionych w dalszej części tego tematu. Usługa Azure Automation DSC umożliwia centralne zarządzanie poświadczeniami, które mają być kompilowane w konfiguracjach i przechowywane bezpiecznie. Aby uzyskać informacje, zobacz: Kompilowanie konfiguracji DSC /Assets poświadczeń

Obsługa poświadczeń w usłudze DSC

Zasoby konfiguracji DSC są domyślnie uruchamiane jako Local System . Jednak niektóre zasoby wymagają poświadczeń, na przykład gdy Package zasób musi zainstalować oprogramowanie na określonym koncie użytkownika.

Wcześniejsze zasoby używały nazwy właściwości zakodowanej Credential w kodzie, aby to obsłużyć. Program WMF 5.0 dodał właściwość automatyczną PsDscRunAsCredential dla wszystkich zasobów. Aby uzyskać informacje na temat korzystania z usługi PsDscRunAsCredential, zobacz Running DSC with user credentials (Uruchamianie kontrolera DSC z poświadczeniami użytkownika). Nowsze zasoby i zasoby niestandardowe mogą używać tej właściwości automatycznej zamiast tworzyć własną właściwość dla poświadczeń.

Uwaga

Projekt niektórych zasobów służy do używania wielu poświadczeń z określonego powodu i będą miały własne właściwości poświadczeń.

Aby znaleźć dostępne właściwości poświadczeń w zasobie, użyj funkcji Get-DscResource -Name ResourceName -Syntax Intellisense w środowisku 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]]
}

W tym przykładzie użyto zasobu grupy z wbudowanego modułu PSDesiredStateConfiguration zasobów DSC. Może tworzyć grupy lokalne i dodawać lub usuwać członków. Akceptuje zarówno właściwość, jak Credential i właściwość automatyczną PsDscRunAsCredential . Jednak zasób używa Credential tylko właściwości .

Aby uzyskać więcej informacji na temat PsDscRunAsCredential właściwości, zobacz Running DSC with user credentials (Uruchamianie kontrolera DSC z poświadczeniami użytkownika).

Przykład: właściwość Poświadczenie zasobu grupy

Rozszerzenie DSC działa w obszarze Local System, więc ma już uprawnienia do zmieniania lokalnych użytkowników i grup. Jeśli dodany element członkowski jest kontem lokalnym, nie trzeba poświadczeń. Group Jeśli zasób dodaje konto domeny do grupy lokalnej, wymagane jest poświadczenie.

Zapytania anonimowe do usługi Active Directory są niedozwolone. Właściwość CredentialGroup zasobu to konto domeny używane do wykonywania zapytań w usłudze Active Directory. W większości celów może to być ogólne konto użytkownika, ponieważ domyślnie użytkownicy mogą odczytywać większość obiektów w usłudze Active Directory.

Przykładowa konfiguracja

Poniższy przykładowy kod używa kontrolera DSC do wypełniania grupy lokalnej użytkownikiem domeny:

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 zarówno komunikat o błędzie, jak i ostrzeżeniu:

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:

  1. Błąd wyjaśnia, że hasła w postaci zwykłego tekstu nie są zalecane
  2. Ostrzeżenie zaleca użycie poświadczeń domeny

Flagi PSDSCAllowPlainTextPassword i PSDSCAllowDomainUser pomijają błąd i ostrzeżenie informujące użytkownika o zaangażowanym ryzyku.

PSDSCAllowPlainTextPassword

Pierwszy komunikat o błędzie zawiera adres URL z dokumentacją. W tym linku wyjaśniono, jak szyfrować hasła przy użyciu struktury ConfigurationData i certyfikatu. Aby uzyskać więcej informacji na temat certyfikatów i DSC , przeczytaj ten wpis.

Aby wymusić hasło zwykłego tekstu, zasób wymaga PsDscAllowPlainTextPassword słowa kluczowego w sekcji danych konfiguracji w następujący sposób:

$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

Flaga PSDSCAllowPlainTextPassword wymaga, aby użytkownik przyznał ryzyko przechowywania haseł w postaci zwykłego tekstu w pliku MOF. W wygenerowanym pliku MOF, mimo że użyto obiektu PSCredential zawierającego funkcję SecureString , hasła nadal są wyświetlane jako zwykły tekst. Jest to jedyny czas uwidocznienia poświadczeń. Uzyskanie dostępu do tego pliku MOF daje każdemu użytkownikowi dostęp do konta administratora.

/*
@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 przesyłane i magazynowane

  • Flaga PSDscAllowPlainTextPassword umożliwia kompilację plików MOF zawierających hasła w postaci zwykłego tekstu. Podejmij środki ostrożności podczas przechowywania plików MOF zawierających hasła w postaci zwykłego tekstu.
  • Gdy plik MOF jest dostarczany do węzła w trybie wypychania , usługa WinRM szyfruje komunikację w celu ochrony hasła w postaci zwykłego tekstu, chyba że zastąpisz wartość domyślną parametrem AllowUnencrypted .
    • Szyfrowanie moF przy użyciu certyfikatu chroni plik MOF magazynowane przed zastosowaniem go do węzła.
  • 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 na serwerze informacji internetowych. Aby uzyskać więcej informacji, zobacz artykuły Konfigurowanie klienta ściągania DSC i Zabezpieczanie plików MOF przy użyciu certyfikatów.
  • W węźle pliki MOF są szyfrowane w spoczynku Począwszy od programu PowerShell 5.0.
    • W programie PowerShell 4.0 pliki MOF są niezaszyfrowane w spoczynku, chyba że są szyfrowane przy użyciu certyfikatu podczas wypychania lub ściągania do węzła.

Firma Microsoft zaleca unikanie haseł w postaci zwykłego tekstu ze względu na znaczne ryzyko związane z bezpieczeństwem.

Poświadczenia domeny

Ponowne uruchomienie przykładowego skryptu konfiguracji (z szyfrowaniem lub bez niego) nadal generuje ostrzeżenie, że użycie konta domeny dla poświadczeń nie jest zalecane. Użycie konta lokalnego eliminuje potencjalne narażenie poświadczeń domeny, które mogą być używane na innych serwerach.

W przypadku korzystania z poświadczeń z zasobami DSC w razie potrzeby preferuj konto lokalne na koncie domeny.

Jeśli we właściwości poświadczeń znajduje się znak "\" lub "@" Username , kontroler DSC będzie traktować go jako konto domeny. Istnieje wyjątek dla "localhost", "127.0.0.1" i "::1" w części domeny nazwy użytkownika.

PSDscAllowDomainUser

W powyższym przykładzie zasobu DSC Group wykonywanie zapytań dotyczących domeny usługi Active Directory wymaga konta domeny. W tym przypadku dodaj PSDscAllowDomainUser właściwość do ConfigurationData bloku w następujący sposób:

$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 wygeneruje plik MOF bez błędów ani ostrzeżeń.