Sdílet prostřednictvím


Možnosti přihlašovacích údajů v konfiguračních datech

Platí pro: Windows PowerShell 5.0

Hesla ve formátu prostého textu a uživatelé domény

Konfigurace DSC obsahující přihlašovací údaje bez šifrování vygenerují chybovou zprávu o heslech ve formátu prostého textu. DSC také vygeneruje upozornění při použití přihlašovacích údajů domény. K potlačení těchto chybových a varovných zpráv použijte klíčová slova konfiguračních dat DSC:

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

Poznámka

Ukládání a přenos nešifrovaných hesel ve formátu prostého textu není obecně bezpečné. Doporučujeme zabezpečit přihlašovací údaje pomocí technik popsaných dále v tomto tématu. Služba Azure Automation DSC umožňuje centrálně spravovat přihlašovací údaje, které se mají kompilovat v konfiguracích a bezpečně ukládat. Informace najdete v tématu : Kompilace konfigurací DSC / Prostředků přihlašovacích údajů

Zpracování přihlašovacích údajů v DSC

Prostředky konfigurace DSC se ve výchozím nastavení spouští jako Local System . Některé prostředky ale potřebují přihlašovací údaje, například když Package prostředek potřebuje nainstalovat software pod konkrétním uživatelským účtem.

Dřívější prostředky k tomu používaly pevně zakódovaný Credential název vlastnosti. WMF 5.0 přidal automatickou PsDscRunAsCredential vlastnost pro všechny prostředky. Informace o používání PsDscRunAsCredentialnajdete v tématu Spuštění DSC s uživatelskými přihlašovacími údaji. Novější prostředky a vlastní prostředky můžou tuto automatickou vlastnost používat místo vytváření vlastní vlastnosti pro přihlašovací údaje.

Poznámka

Některé prostředky mají z určitého důvodu používat více přihlašovacích údajů a budou mít své vlastní vlastnosti přihlašovacích údajů.

Pokud chcete najít dostupné vlastnosti přihlašovacích údajů prostředku, použijte buď Get-DscResource -Name ResourceName -Syntax nebo IntelliSense v 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]]
}

V tomto příkladu se používá prostředek skupiny z integrovaného PSDesiredStateConfiguration modulu prostředků DSC. Může vytvářet místní skupiny a přidávat nebo odebírat členy. Přijímá vlastnost i Credential automatickou PsDscRunAsCredential vlastnost. Prostředek však používá Credential pouze vlastnost .

Další informace o vlastnosti najdete v PsDscRunAsCredential tématu Spuštění DSC s přihlašovacími údaji uživatele.

Příklad: Vlastnost Přihlašovací údaje prostředku skupiny

DSC běží pod Local System, takže už má oprávnění ke změně místních uživatelů a skupin. Pokud je přidaným členem místní účet, nejsou potřeba žádné přihlašovací údaje. Pokud prostředek Group přidá účet domény do místní skupiny, je nutné použít přihlašovací údaje.

Anonymní dotazy do služby Active Directory nejsou povoleny. Vlastnost Credential prostředku Group je účet domény, který se používá k dotazování služby Active Directory. Pro většinu účelů to může být obecný uživatelský účet, protože ve výchozím nastavení můžou uživatelé číst většinu objektů ve službě Active Directory.

Ukázková konfigurace

Následující příklad kódu používá DSC k naplnění místní skupiny uživatelem domény:

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

Tento kód vygeneruje chybovou i varovnou zprávu:

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

Tento příklad má dva problémy:

  1. Chyba vysvětluje, že se nedoporučují hesla ve formátu prostého textu.
  2. Upozornění nedoporučuje používat přihlašovací údaje domény.

Příznaky PSDSCAllowPlainTextPassword a PSDSCAllowDomainUser potlačí chybu a upozornění informující uživatele o souvisejícím riziku.

PSDSCAllowPlainTextPassword

První chybová zpráva obsahuje adresu URL s dokumentací. Tento odkaz vysvětluje, jak šifrovat hesla pomocí struktury ConfigurationData a certifikátu. Další informace o certifikátech a DSC najdete v tomto příspěvku.

K vynucení hesla ve formátu prostého textu vyžaduje PsDscAllowPlainTextPassword prostředek klíčové slovo v části konfiguračních dat následujícím způsobem:

$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

Příznak PSDSCAllowPlainTextPassword vyžaduje, aby uživatel potvrdil riziko ukládání hesel ve formátu prostého textu do souboru MOF. Ve vygenerovaném souboru MOF se hesla stále zobrazují jako prostý text, i když byl použit objekt PSCredential obsahující secureString . Toto je jediný čas, kdy jsou přihlašovací údaje zpřístupněny. Získáním přístupu k tomuto souboru MOF získáte přístup k účtu správce komukoli.

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

};

Přihlašovací údaje při průchodu a neaktivních uložených přihlašovacích údajích

  • Příznak PSDscAllowPlainTextPassword umožňuje kompilaci souborů MOF, které obsahují hesla ve formátu prostého textu. Při ukládání souborů MOF obsahujících hesla ve formátu prostého textu proveďte bezpečnostní opatření.
  • Když je soubor MOF doručován do uzlu v režimu nabízení , WinRM šifruje komunikaci, aby chránil heslo bez textu, pokud nepřepíšete výchozí parametr allowUnencrypted .
    • Šifrování MOF pomocí certifikátu chrání uložený soubor MOF před jeho použitím na uzel.
  • V režimu vyžádání obsahu můžete server vyžádané replikace systému Windows nakonfigurovat tak, aby k šifrování provozu používal protokol HTTPS pomocí protokolu zadaného v internetovém informačním serveru. Další informace najdete v článcích Nastavení klienta vyžádání DSC a Zabezpečení souborů MOF pomocí certifikátů.
  • Na uzlu se soubory MOF šifrují v klidovém stavu Počínaje PowerShellem 5.0.
    • V PowerShellu 4.0 jsou soubory MOF nešifrované v neaktivním stavu, pokud nejsou při nabízení nebo nahrazování do uzlu zašifrované certifikátem.

Společnost Microsoft doporučuje vyhnout se heslům ve formátu prostého textu kvůli významnému bezpečnostnímu riziku.

Přihlašovací údaje k doméně

Opětovné spuštění ukázkového konfiguračního skriptu (se šifrováním nebo bez) stále vygeneruje upozornění, že použití doménového účtu pro přihlašovací údaje se nedoporučuje. Použití místního účtu eliminuje potenciální ohrožení přihlašovacích údajů domény, které by bylo možné použít na jiných serverech.

Při používání přihlašovacích údajů s prostředky DSC upřednostněte místní účet před doménovým účtem, pokud je to možné.

Pokud je ve Username vlastnosti přihlašovacích údajů znak \nebo @, bude s nimi DSC zacházet jako s doménovým účtem. Existuje výjimka pro "localhost", "127.0.0.1" a "::1" v doménové části uživatelského jména.

PSDscAllowDomainUser

V příkladu prostředku DSC Group výše vyžaduje dotazování domény služby Active Directory účet domény. V tomto případě přidejte PSDscAllowDomainUser vlastnost do ConfigurationData bloku následujícím způsobem:

$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

Konfigurační skript teď vygeneruje soubor MOF bez chyb nebo upozornění.