Alternativ för autentiseringsuppgifter i konfigurationsdata

Gäller för: Windows PowerShell 5.0

Oformaterade lösenord och domänanvändare

DSC-konfigurationer som innehåller en autentiseringsuppgift utan kryptering genererar ett felmeddelande om oformaterade lösenord. DSC genererar också en varning när du använder domänautentiseringsuppgifter. Om du vill ignorera dessa fel- och varningsmeddelanden använder du nyckelorden för DSC-konfigurationsdata:

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

Anteckning

Lagring/överföring av okrypterade lösenord i klartext är vanligtvis inte säkert. Vi rekommenderar att du skyddar autentiseringsuppgifterna med hjälp av de tekniker som beskrivs senare i det här avsnittet. Med Azure Automation DSC-tjänsten kan du centralt hantera autentiseringsuppgifter som ska kompileras i konfigurationer och lagras på ett säkert sätt. Mer information finns i: Kompilera DSC-konfigurationer/autentiseringstillgångar

Hantera autentiseringsuppgifter i DSC

DSC-konfigurationsresurser körs som Local System standard. Vissa resurser behöver dock en autentiseringsuppgift, till exempel när resursen Package behöver installera programvara under ett specifikt användarkonto.

Tidigare resurser använde ett hårdkodat egenskapsnamn Credential för att hantera detta. WMF 5.0 har lagt till en automatisk PsDscRunAsCredential egenskap för alla resurser. Information om hur du använder PsDscRunAsCredentialfinns i Köra DSC med användarautentiseringsuppgifter. Nyare resurser och anpassade resurser kan använda den här automatiska egenskapen i stället för att skapa en egen egenskap för autentiseringsuppgifter.

Anteckning

Utformningen av vissa resurser är att använda flera autentiseringsuppgifter av en viss anledning och de har sina egna egenskaper för autentiseringsuppgifter.

Om du vill hitta de tillgängliga egenskaperna för autentiseringsuppgifter för en resurs använder du antingen Get-DscResource -Name ResourceName -Syntax eller Intellisense i 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]]
}

I det här exemplet används en gruppresurs från den PSDesiredStateConfiguration inbyggda DSC-resursmodulen. Den kan skapa lokala grupper och lägga till eller ta bort medlemmar. Den accepterar både egenskapen Credential och den automatiska PsDscRunAsCredential egenskapen. Resursen använder Credential dock bara egenskapen .

Mer information om egenskapen finns i PsDscRunAsCredentialKöra DSC med användarautentiseringsuppgifter.

Exempel: Egenskapen Group resource Credential

DSC körs under Local System, så det har redan behörighet att ändra lokala användare och grupper. Om medlemmen som har lagts till är ett lokalt konto krävs inga autentiseringsuppgifter. Om resursen Group lägger till ett domänkonto i den lokala gruppen krävs en autentiseringsuppgift.

Anonyma frågor till Active Directory tillåts inte. Egenskapen Credential för resursen Group är det domänkonto som används för att fråga Active Directory. I de flesta fall kan detta vara ett allmänt användarkonto, eftersom användarna som standard kan läsa de flesta objekten i Active Directory.

Exempelkonfiguration

I följande exempelkod används DSC för att fylla i en lokal grupp med en domänanvändare:

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

Den här koden genererar både ett felmeddelande och ett varningsmeddelande:

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

Det här exemplet har två problem:

  1. Ett fel förklarar att lösenord för oformaterad text inte rekommenderas
  2. En varning avråder från att använda en domänautentiseringsuppgift

Flaggorna PSDSCAllowPlainTextPassword och PSDSCAllowDomainUser utelämnar felet och varningen som informerar användaren om risken.

PSDSCAllowPlainTextPassword

Det första felmeddelandet har en URL med dokumentation. Den här länken förklarar hur du krypterar lösenord med hjälp av en ConfigurationData-struktur och ett certifikat. Mer information om certifikat och DSC finns i det här inlägget.

För att framtvinga ett lösenord för oformaterad text kräver resursen nyckelordet PsDscAllowPlainTextPassword i avsnittet konfigurationsdata enligt följande:

$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

Flaggan PSDSCAllowPlainTextPassword kräver att användaren erkänner risken att lagra lösenord för oformaterad text i en MOF-fil. Även om ett PSCredential-objekt som innehåller en SecureString användes i den genererade MOF-filen visas lösenorden fortfarande som oformaterad text. Det här är den enda gången som autentiseringsuppgifterna exponeras. Om du får åtkomst till den här MOF-filen får alla åtkomst till administratörskontot.

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

};

Autentiseringsuppgifter under överföring och i vila

  • Flaggan PSDscAllowPlainTextPassword tillåter kompilering av MOF-filer som innehåller lösenord i klartext. Vidta försiktighetsåtgärder när du lagrar MOF-filer som innehåller lösenord för klartext.
  • När MOF-filen levereras till en nod i push-läge krypterar WinRM kommunikationen för att skydda lösenordet för klartext om du inte åsidosätter standardvärdet med parametern AllowUnencrypted .
    • Kryptering av MOF med ett certifikat skyddar MOF-filen i vila innan den har tillämpats på en nod.
  • I pull-läge kan du konfigurera Windows-hämtningsservern så att den använder HTTPS för att kryptera trafik med hjälp av det protokoll som anges i Internet Information Server. Mer information finns i artiklarna Konfigurera en DSC-hämtningsklient och Skydda MOF-filer med certifikat.
  • På Noden krypteras MOF-filer i vila med början i PowerShell 5.0.
    • I PowerShell 4.0 MOF-filer är okrypterade i vila om de inte krypteras med ett certifikat när de push-överförs eller hämtas till Noden.

Microsoft rekommenderar att du undviker oformaterade lösenord på grund av den betydande säkerhetsrisken.

Autentiseringsuppgifter för domän

Om du kör exempelkonfigurationsskriptet igen (med eller utan kryptering) genereras fortfarande en varning om att det inte rekommenderas att använda ett domänkonto för en autentiseringsuppgift. Om du använder ett lokalt konto elimineras potentiell exponering av domänautentiseringsuppgifter som kan användas på andra servrar.

När du använder autentiseringsuppgifter med DSC-resurser föredrar du ett lokalt konto framför ett domänkonto när det är möjligt.

Om det finns ett '\' eller '@' i Username egenskapen för autentiseringsuppgifterna behandlar DSC det som ett domänkonto. Det finns ett undantag för "localhost", "127.0.0.1" och "::1" i domändelen av användarnamnet.

PSDscAllowDomainUser

I DSC-resursexemplet Group ovan kräver frågor mot en Active Directory-domän ett domänkonto. I det här fallet lägger du till PSDscAllowDomainUser egenskapen i blocket på ConfigurationData följande sätt:

$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

Nu genererar konfigurationsskriptet MOF-filen utan fel eller varningar.