Opzioni delle credenziali nei dati di configurazioneCredentials Options in Configuration Data

Si applica a: Windows PowerShell 5.0Applies To: Windows PowerShell 5.0

Password di testo normale e utenti di dominioPlain Text Passwords and Domain Users

Le configurazioni DSC che contengono una credenziale senza crittografia generano un messaggio di errore relativo alle password di testo normale.DSC configurations containing a credential without encryption will generate an error message about plain text passwords. Inoltre, DSC genera un avviso quando si usano credenziali di dominio.Also, DSC will generate a warning when using domain credentials. Per eliminare questi messaggi di errore e di avviso, usare le parole chiave dei dati di configurazione DSC seguenti:To suppress these error and warning messages use the DSC configuration data keywords:

  • PsDscAllowPlainTextPasswordPsDscAllowPlainTextPassword
  • PsDscAllowDomainUserPsDscAllowDomainUser

Nota

L'archiviazione o la trasmissione di password di testo normale non crittografata in genere non è protetta.Storing/transmitting plaintext passwords unencrypted is generally not secure. È consigliabile proteggere le credenziali tramite le tecniche illustrate più avanti in questo argomento.Securing credentials by using the techniques covered later in this topic is recommended. Il servizio Automation DSC di Azure consente di gestire centralmente le credenziali da compilare nelle configurazioni e archiviare in modo sicuro.The Azure Automation DSC service allows you to centrally manage credentials to be compiled in configurations and stored securely. Per informazioni, vedere Compilazione di configurazioni in Azure Automation DSC/Asset credenzialiFor information, see: Compiling DSC Configurations / Credential Assets

Gestione delle credenziali in DSCHandling Credentials in DSC

Le risorse di configurazione DSC vengono eseguite come Local System per impostazione predefinita.DSC configuration resources run as Local System by default. Tuttavia, per alcune risorse è necessaria una credenziale, ad esempio quando la risorsa Package deve installare software nell'ambito di un account utente specifico.However, some resources need a credential, for example when the Package resource needs to install software under a specific user account.

Le risorse delle versioni precedenti usano un nome di proprietà Credential hardcoded per gestire questo caso.Earlier resources used a hard-coded Credential property name to handle this. In WMF 5.0 è stata aggiunta una proprietà PsDscRunAsCredential automatica per tutte le risorse.WMF 5.0 added an automatic PsDscRunAsCredential property for all resources. Per informazioni sull'uso di PsDscRunAsCredential, vedere Esecuzione di DSC con le credenziali dell'utente.For information about using PsDscRunAsCredential, see Running DSC with user credentials. Le risorse più recenti e quelle personalizzate possono usare questa proprietà automatica invece di creare una proprietà personalizzata per le credenziali.Newer resources and custom resources can use this automatic property instead of creating their own property for credentials.

Nota

La progettazione di alcune risorse prevede l'uso di più credenziali per un motivo specifico e tali risorse hanno proprietà delle credenziali proprie.The design of some resources are to use multiple credentials for a specific reason, and they will have their own credential properties.

Per trovare le proprietà delle credenziali disponibili in una risorsa, usare Get-DscResource -Name ResourceName -Syntax o Intellisense in 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]]
}

Questo esempio usa una risorsa Group, inclusa nel modulo di risorse DSC PSDesiredStateConfiguration predefinito.This example uses a Group resource from the PSDesiredStateConfiguration built-in DSC resource module. La risorsa può creare gruppi locali e aggiungere o rimuovere membri.It can create local groups and add or remove members. Accetta sia la proprietà Credential sia la proprietà PsDscRunAsCredential automatica.It accepts both the Credential property and the automatic PsDscRunAsCredential property. Tuttavia, la risorsa usa solo la proprietà Credential.However, the resource only uses the Credential property.

Per altre informazioni sulla proprietà PsDscRunAsCredential, vedere Esecuzione di DSC con le credenziali dell'utente.For more information about the PsDscRunAsCredential property, see Running DSC with user credentials.

Esempio: proprietà Credential della risorsa GroupExample: The Group resource Credential property

Poiché DSC viene eseguito in Local System, ha già le autorizzazioni necessarie per modificare gruppi e utenti locali.DSC runs under Local System, so it already has permissions to change local users and groups. Se il membro aggiunto è un account locale, non è necessaria alcuna credenziale.If the member added is a local account, then no credential is necessary. Se la risorsa Group aggiunge un account di dominio al gruppo locale, è necessaria una credenziale.If the Group resource adds a domain account to the local group, then a credential is necessary.

Le query anonime in Active Directory non sono consentite.Anonymous queries to Active Directory are not allowed. La proprietà Credential della risorsa Group corrisponde all'account di dominio usato per eseguire query in Active Directory.The Credential property of the Group resource is the domain account used to query Active Directory. Per quasi tutti gli scopi può trattarsi di un account utente generico, perché per impostazione predefinita gli utenti possono leggere la maggior parte degli oggetti in 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.

Configurazione di esempioExample Configuration

Il codice di esempio seguente usa DSC per immettere un utente di dominio in un gruppo locale: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

Questo codice genera un messaggio di errore e uno di avviso: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

Questo esempio include due problemi:This example has two issues:

  1. Un errore indica che le password di testo semplice non sono consigliateAn error explains that plain text passwords are not recommended
  2. Un avviso sconsiglia l'uso di una credenziale di dominioA warning advises against using a domain credential

I flag PSDSCAllowPlainTextPassword e PSDSCAllowDomainUser eliminano l'errore e l'avviso che informano l'utente dei rischi coinvolti.The flags PSDSCAllowPlainTextPassword and PSDSCAllowDomainUser suppress the error and warning informing the user of the risk involved.

PSDSCAllowPlainTextPasswordPSDSCAllowPlainTextPassword

Il primo messaggio di errore contiene un URL con la documentazione.The first error message has a URL with documentation. Il collegamento descrive come crittografare le password usando una struttura ConfigurationData e un certificato.This link explains how to encrypt passwords using a ConfigurationData structure and a certificate. Per altre informazioni sui certificati e su DSC, leggere questo post.For more information on certificates and DSC read this post.

Per forzare una password di testo semplice, la risorsa richiede la presenza della parola chiave PsDscAllowPlainTextPassword nella sezione dei dati di configurazione, nel modo seguente: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

Il flag PSDSCAllowPlainTextPassword richiede che l'utente accetti il rischio correlato all'archiviazione delle password in testo normale in un file MOF.The PSDSCAllowPlainTextPassword flag requires that the user acknowledge the risk of storing plain text passwords in a MOF file. Nel file MOF generato, anche se è stato usato un oggetto PSCredential contenente una SecureString , le password vengono comunque visualizzate come testo normale.In the generated MOF file, even though a PSCredential object containing a SecureString was used, the passwords still appear as plain text. Questa è l'unica volta in cui vengono esposte le credenziali.This is the only time the credentials are exposed. Chiunque riesce ad accedere a questo file MOF ottiene l'accesso anche all'account amministratore.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";

};

Credenziali in transito e inattiveCredentials in transit and at rest

  • Il flag PSDscAllowPlainTextPassword consente la compilazione di file MOF che contengono password come testo non crittografato.The PSDscAllowPlainTextPassword flag allows the compilation of MOF files that contain passwords in clear text. Adottare le necessarie precauzioni quando si archiviano file MOF che contengono password come testo non crittografato.Take precautions when storing MOF files containing clear text passwords.
  • Quando il file MOF viene recapitato a un nodo in modalità push , WinRM crittografa la comunicazione per proteggere la password come testo non crittografato, a meno che non si ignori l'impostazione predefinita con il parametro 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.
    • La crittografia del file MOF con un certificato protegge il file MOF nello stato inattivo prima dell'applicazione a un nodo.Encrypting the MOF with a certificate protects the MOF file at rest before it has been applied to a node.
  • Nella modalità pull è possibile configurare il server di pull Windows per usare HTTPS per crittografare il traffico tramite il protocollo specificato in 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. Per altre informazioni, vedere gli articoli Configurazione di un client di pull DSC e Protezione del file MOF con certificati.For more information, see the articles Setting up a DSC pull client and Securing MOF files with Certificates.
  • Nel nodo i file MOF vengono crittografati nello stato inattivo a partire da PowerShell 5.0.On the Node, MOF files are encrypted at rest Beginning in PowerShell 5.0.
    • In PowerShell 4.0 i file MOF non vengono decrittografati nello stato inattivo a meno che non vengano crittografati con un certificato quando ne viene eseguito il push o pull sul nodo.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.

Microsoft consiglia di evitare password di testo semplice, che possono provocare rischi significativi per la sicurezza.Microsoft advises to avoid plain text passwords due to the significant security risk.

Credenziali del dominioDomain Credentials

Una nuova esecuzione dello script di configurazione di esempio (con o senza crittografia) genera comunque l'avviso che sconsiglia l'uso di un account di dominio per una credenziale.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. L'uso di un account locale elimina la potenziale esposizione delle credenziali di dominio, che potrebbero essere usate in altri server.Using a local account eliminates potential exposure of domain credentials that could be used on other servers.

Quando si usano credenziali con risorse DSC, se possibile preferire un account locale a un account di dominio.When using credentials with DSC resources, prefer a local account over a domain account when possible.

Se la proprietà Username della credenziale contiene un carattere '\' o '@', DSC la considera un account di dominio.If there is a '\' or '@' in the Username property of the credential, then DSC will treat it as a domain account. Un'eccezione riguarda "localhost", "127.0.0.1" e "::1" nella parte del dominio del nome utente.There is an exception for "localhost", "127.0.0.1", and "::1" in the domain portion of the user name.

PSDscAllowDomainUserPSDscAllowDomainUser

Nell'esempio di risorsa Group DSC precedente per l'esecuzione di query su un dominio Active Directory è necessario un account di dominio.In the DSC Group resource example above, querying an Active Directory domain requires a domain account. In questo caso, aggiungere la proprietà PSDscAllowDomainUser al blocco ConfigurationData nel modo seguente: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

Lo script di configurazione genera ora il file MOF senza errori o avvisi.Now the configuration script will generate the MOF file with no errors or warnings.