Delen via


Opties voor referenties in configuratiegegevens

Van toepassing op: Windows PowerShell 5.0

Wachtwoorden voor tekst zonder opmaak en domeingebruikers

DSC-configuraties die een referentie zonder versleuteling bevatten, genereren een foutbericht over wachtwoorden zonder opmaak. Dsc genereert ook een waarschuwing bij het gebruik van domeinreferenties. Gebruik de trefwoorden voor DSC-configuratiegegevens om deze fout- en waarschuwingsberichten te onderdrukken:

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

Notitie

Het opslaan/verzenden van niet-versleutelde wachtwoorden zonder opmaak is over het algemeen niet veilig. Het wordt aanbevolen referenties te beveiligen met behulp van de technieken die verderop in dit onderwerp worden besproken. Met de Azure Automation DSC-service kunt u referenties centraal beheren die in configuraties moeten worden gecompileerd en veilig moeten worden opgeslagen. Zie voor meer informatie: DSC-configuraties/referentieassets compileren

Referenties verwerken in DSC

DSC-configuratieresources worden standaard uitgevoerd als Local System . Sommige resources hebben echter een referentie nodig, bijvoorbeeld wanneer de Package resource software moet installeren onder een specifiek gebruikersaccount.

Eerdere resources gebruikten een in code vastgelegde Credential eigenschapsnaam om dit af te handelen. WMF 5.0 heeft een automatische PsDscRunAsCredential eigenschap toegevoegd voor alle resources. Zie DSC uitvoeren met gebruikersreferenties voor meer informatie over het gebruikPsDscRunAsCredential. Nieuwere resources en aangepaste resources kunnen deze automatische eigenschap gebruiken in plaats van hun eigen eigenschap voor referenties te maken.

Notitie

Het ontwerp van sommige resources is om een specifieke reden meerdere referenties te gebruiken en ze hebben hun eigen referentie-eigenschappen.

Als u de beschikbare referentie-eigenschappen voor een resource wilt zoeken, gebruikt Get-DscResource -Name ResourceName -Syntax u of de IntelliSense in de 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]]
}

In dit voorbeeld wordt een groepsresource uit de PSDesiredStateConfiguration ingebouwde DSC-resourcemodule gebruikt. Het kan lokale groepen maken en leden toevoegen of verwijderen. Deze accepteert zowel de Credential eigenschap als de automatische PsDscRunAsCredential eigenschap. De resource gebruikt echter alleen de Credential eigenschap.

Zie DSC uitvoeren met gebruikersreferenties voor meer informatie over de PsDscRunAsCredential eigenschap.

Voorbeeld: de eigenschap Referentie van de groepresource

DSC wordt uitgevoerd onder Local System, zodat deze al machtigingen heeft om lokale gebruikers en groepen te wijzigen. Als het toegevoegde lid een lokaal account is, is er geen referentie nodig. Als de Group resource een domeinaccount toevoegt aan de lokale groep, is een referentie nodig.

Anonieme query's naar Active Directory zijn niet toegestaan. De Credential eigenschap van de Group resource is het domeinaccount dat wordt gebruikt om een query uit te voeren op Active Directory. Voor de meeste doeleinden kan dit een algemeen gebruikersaccount zijn, omdat gebruikers standaard de meeste objecten in Active Directory kunnen lezen .

Voorbeeldconfiguratie

In de volgende voorbeeldcode wordt DSC gebruikt om een lokale groep te vullen met een domeingebruiker:

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

Met deze code wordt zowel een fout als een waarschuwingsbericht gegenereerd:

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

Dit voorbeeld heeft twee problemen:

  1. In een fout wordt uitgelegd dat wachtwoorden voor tekst zonder opmaak niet worden aanbevolen
  2. Er wordt een waarschuwing afgeraden om een domeinreferentie te gebruiken

De vlaggen PSDSCAllowPlainTextPassword en PSDSCAllowDomainUser onderdrukken de fout en waarschuwing die de gebruiker informeert over het betrokken risico.

PSDSCAllowPlainTextPassword

Het eerste foutbericht bevat een URL met documentatie. In deze koppeling wordt uitgelegd hoe u wachtwoorden versleutelt met behulp van een ConfigurationData-structuur en een certificaat. Lees dit bericht voor meer informatie over certificaten en DSC.

Als u een wachtwoord voor tekst zonder opmaak wilt afdwingen, vereist de resource het PsDscAllowPlainTextPassword trefwoord in de sectie met configuratiegegevens als volgt:

$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

De vlag PSDSCAllowPlainTextPassword vereist dat de gebruiker het risico van het opslaan van wachtwoorden zonder opmaak in een MOF-bestand erkent. Hoewel in het gegenereerde MOF-bestand een PSCredential-object met een SecureString is gebruikt, worden de wachtwoorden nog steeds weergegeven als tekst zonder opmaak. Dit is de enige keer dat de referenties worden weergegeven. Als u toegang krijgt tot dit MOF-bestand, krijgt iedereen toegang tot het beheerdersaccount.

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

};

Referenties in transit en at rest

  • Met de vlag PSDscAllowPlainTextPassword kan MOF-bestanden worden gecompileerd die wachtwoorden in tekst bevatten. Neem voorzorgsmaatregelen bij het opslaan van MOF-bestanden met wachtwoorden zonder tekst.
  • Wanneer het MOF-bestand wordt geleverd aan een knooppunt in de pushmodus , versleutelt WinRM de communicatie om het wachtwoord voor niet-versleutelde tekst te beveiligen, tenzij u de standaardwaarde overschrijft met de parameter AllowUnencrypted .
    • Het versleutelen van de MOF met een certificaat beveiligt het MOF-bestand at rest voordat het is toegepast op een knooppunt.
  • In de pull-modus kunt u de Windows-pullserver configureren voor het gebruik van HTTPS om verkeer te versleutelen met behulp van het protocol dat is opgegeven in Internet Information Server. Zie de artikelen Een DSC-pullclient instellen en MOF-bestanden beveiligen met certificaten voor meer informatie.
  • Op het knooppunt worden MOF-bestanden in rust versleuteld vanaf PowerShell 5.0.
    • In PowerShell 4.0 worden MOF-bestanden in rust niet versleuteld, tenzij ze zijn versleuteld met een certificaat wanneer ze naar het knooppunt worden gepusht of opgehaald.

Microsoft adviseert om wachtwoorden zonder opmaak te vermijden vanwege het aanzienlijke beveiligingsrisico.

Referenties voor domein

Als u het voorbeeldconfiguratiescript opnieuw uitvoert (met of zonder versleuteling), wordt nog steeds de waarschuwing gegenereerd dat het gebruik van een domeinaccount voor een referentie niet wordt aanbevolen. Het gebruik van een lokaal account elimineert mogelijke blootstelling van domeinreferenties die op andere servers kunnen worden gebruikt.

Wanneer u referenties gebruikt met DSC-resources, geeft u indien mogelijk de voorkeur aan een lokaal account boven een domeinaccount.

Als er een '\' of '@' in de Username eigenschap van de referentie voorkomt, wordt dit door DSC behandeld als een domeinaccount. Er is een uitzondering voor 'localhost', '127.0.0.1' en '::1' in het domeingedeelte van de gebruikersnaam.

PSDscAllowDomainUser

In het voorbeeld van de DSC-resource Group hierboven is een domeinaccount vereist om een query uit te voeren op een Active Directory-domein. Voeg in dit geval de PSDscAllowDomainUser eigenschap als volgt toe aan het ConfigurationData blok:

$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

Het configuratiescript genereert nu het MOF-bestand zonder fouten of waarschuwingen.