Opzioni delle credenziali nei dati di configurazione
Si applica a: Windows PowerShell 5.0
Password di testo normale e utenti di dominio
Le configurazioni DSC che contengono una credenziale senza crittografia generano un messaggio di errore relativo alle password di testo normale. Inoltre, DSC genera un avviso quando si usano credenziali di dominio. Per eliminare questi messaggi di errore e di avviso, usare le parole chiave dei dati di configurazione DSC seguenti:
- PsDscAllowPlainTextPassword
- PsDscAllowDomainUser
Nota
L'archiviazione o la trasmissione di password di testo normale non crittografata in genere non è protetta. È consigliabile proteggere le credenziali tramite le tecniche illustrate più avanti in questo argomento. Il servizio Automation DSC di Azure consente di gestire centralmente le credenziali da compilare nelle configurazioni e archiviare in modo sicuro. Per informazioni, vedere Compilazione di configurazioni in Azure Automation DSC/Asset credenziali
Gestione delle credenziali in DSC
Le risorse di configurazione DSC vengono eseguite come Local System
per impostazione predefinita. Tuttavia, per alcune risorse è necessaria una credenziale, ad esempio quando la risorsa Package
deve installare software nell'ambito di un account utente specifico.
Le risorse delle versioni precedenti usano un nome di proprietà Credential
hardcoded per gestire questo caso. In WMF 5.0 è stata aggiunta una proprietà PsDscRunAsCredential
automatica per tutte le risorse. Per informazioni sull'uso di PsDscRunAsCredential
, vedere Esecuzione di DSC con le credenziali dell'utente. Le risorse più recenti e quelle personalizzate possono usare questa proprietà automatica invece di creare una proprietà personalizzata per le credenziali.
Nota
La progettazione di alcune risorse prevede l'uso di più credenziali per un motivo specifico e tali risorse hanno proprietà delle credenziali proprie.
Per trovare le proprietà delle credenziali disponibili in una risorsa, usare Get-DscResource -Name ResourceName -Syntax
o Intellisense in 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. La risorsa può creare gruppi locali e aggiungere o rimuovere membri. Accetta sia la proprietà Credential
sia la proprietà PsDscRunAsCredential
automatica. Tuttavia, la risorsa usa solo la proprietà Credential
.
Per altre informazioni sulla proprietà PsDscRunAsCredential
, vedere Esecuzione di DSC con le credenziali dell'utente.
Esempio: proprietà Credential della risorsa Group
Poiché DSC viene eseguito in Local System
, ha già le autorizzazioni necessarie per modificare gruppi e utenti locali. Se il membro aggiunto è un account locale, non è necessaria alcuna credenziale. Se la risorsa Group
aggiunge un account di dominio al gruppo locale, è necessaria una credenziale.
Le query anonime in Active Directory non sono consentite. La proprietà Credential
della risorsa Group
corrisponde all'account di dominio usato per eseguire query in 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.
Configurazione di esempio
Il codice di esempio seguente usa DSC per immettere un utente di dominio in un gruppo locale:
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:
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:
- Un errore indica che le password di testo semplice non sono consigliate
- Un avviso sconsiglia l'uso di una credenziale di dominio
I flag PSDSCAllowPlainTextPassword e PSDSCAllowDomainUser eliminano l'errore e l'avviso che informano l'utente dei rischi coinvolti.
PSDSCAllowPlainTextPassword
Il primo messaggio di errore contiene un URL con la documentazione. Il collegamento descrive come crittografare le password usando una struttura ConfigurationData e un certificato. Per altre informazioni sui certificati e su DSC, leggere questo 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:
$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
Il flag PSDSCAllowPlainTextPassword richiede che l'utente accetti il rischio correlato all'archiviazione delle password in testo normale in un file MOF. Nel file MOF generato, anche se è stato usato un oggetto PSCredential contenente una SecureString, le password vengono comunque visualizzate come testo normale. Questa è l'unica volta in cui vengono esposte le credenziali. Chiunque riesce ad accedere a questo file MOF ottiene l'accesso anche all'account amministratore.
/*
@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 inattive
- Il flag PSDscAllowPlainTextPassword consente la compilazione di file MOF che contengono password come testo non crittografato. Adottare le necessarie precauzioni quando si archiviano file MOF che contengono password come testo non crittografato.
- 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.
- La crittografia del file MOF con un certificato protegge il file MOF nello stato inattivo prima dell'applicazione a un nodo.
- 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. Per altre informazioni, vedere gli articoli Configurazione di un client di pull DSC e Protezione del file MOF con certificati.
- Nel servizio di configurazione dello stato di Automazione di Azure, il traffico pull viene sempre crittografato.
- Nel nodo i file MOF vengono crittografati nello stato inattivo a partire da 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.
Microsoft consiglia di evitare password di testo semplice, che possono provocare rischi significativi per la sicurezza.
Credenziali del dominio
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. L'uso di un account locale elimina la potenziale esposizione delle credenziali di dominio, che potrebbero essere usate in altri server.
Quando si usano credenziali con risorse DSC, se possibile preferire un account locale a un account di dominio.
Se la proprietà Username
della credenziale contiene un carattere "\" o "@", DSC la considera un account di dominio. Un'eccezione riguarda "localhost", "127.0.0.1" e "::1" nella parte del dominio del nome utente.
PSDscAllowDomainUser
Nell'esempio di risorsa Group
DSC precedente per l'esecuzione di query su un dominio Active Directory è necessario un account di dominio. In questo caso, aggiungere la proprietà PSDscAllowDomainUser
al blocco ConfigurationData
nel modo seguente:
$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.