Partager via


Options d’informations d’identification dans les données de configuration

S’applique à : Windows PowerShell 5.0

Mots de passe en texte brut et utilisateurs du domaine

Les configurations DSC contenant des informations d’identification sans chiffrement génèrent un message d’erreur concernant les mots de passe en texte brut. En outre, DSC génère un avertissement lors de l’utilisation des informations d’identification du domaine. Pour supprimer ces messages d’erreur et d’avertissement, utilisez les mots-clés de données de configuration DSC :

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

Note

Le stockage/la transmission de mots de passe en texte brut non cryptés n’est généralement pas sécurisée. Il est recommandé d’obtenir des informations d’identification à l’aide des techniques abordées plus loin dans cette rubrique. Le service Azure Automation DSC vous permet de gérer de manière centralisée les informations d’identification à compiler dans les configurations et à stocker en toute sécurité. Pour plus d’informations, consultez : Compilation des configurations DSC / Ressources d’informations d’identification

Gestion des informations d’identification dans DSC

Les ressources de configuration DSC s’exécutent par Local System défaut. Toutefois, certaines ressources ont besoin d’informations d’identification, par exemple lorsqu’elles Package doivent installer un logiciel sous un compte d’utilisateur spécifique.

Les ressources précédentes utilisaient un nom de propriété codé Credential en dur pour gérer cela. WMF 5.0 a ajouté une propriété automatique PsDscRunAsCredential pour toutes les ressources. Pour plus d’informations sur l’utilisation de PsDscRunAsCredential, reportez-vous à la section Exécution de DSC avec les informations d’identification de l’utilisateur. Les ressources plus récentes et les ressources personnalisées peuvent utiliser cette propriété automatique au lieu de créer leur propre propriété pour les informations d’identification.

Note

La conception de certaines ressources consiste à utiliser plusieurs informations d’identification pour une raison spécifique, et elles auront leurs propres propriétés d’informations d’identification.

Pour trouver les propriétés d’identification disponibles sur une ressource, utilisez soit Get-DscResource -Name ResourceName -Syntax Intellisense dans l’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]]
}

Cet exemple utilise une ressource de groupe à PSDesiredStateConfiguration partir du module de ressource DSC intégré. Il peut créer des groupes locaux et ajouter ou supprimer des membres. Il accepte à la fois la Credential propriété et la propriété automatique PsDscRunAsCredential . Toutefois, la ressource n’utilise que la Credential propriété.

Pour plus d’informations sur la PsDscRunAsCredential propriété, consultez Exécution de DSC avec les informations d’identification de l’utilisateur.

Exemple : Propriété d’informations d’identification de la ressource de groupe

DSC s’exécute sous Local System, il dispose donc déjà des autorisations nécessaires pour modifier les utilisateurs et les groupes locaux. Si le membre ajouté est un compte local, aucune information d’identification n’est nécessaire. Si la Group ressource ajoute un compte de domaine au groupe local, des informations d’identification sont nécessaires.

Les requêtes anonymes vers Active Directory ne sont pas autorisées. La Credential propriété de la Group ressource est le compte de domaine utilisé pour interroger Active Directory. Dans la plupart des cas, il peut s’agir d’un compte d’utilisateur générique, car par défaut, les utilisateurs peuvent lire la plupart des objets dans Active Directory.

Exemple de configuration

L’exemple de code suivant utilise DSC pour remplir un groupe local avec un utilisateur de domaine :

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

Ce code génère à la fois un message d’erreur et un message d’avertissement :

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

Cet exemple présente deux problèmes :

  1. Une erreur indique que les mots de passe en texte brut ne sont pas recommandés
  2. Un avertissement déconseille l’utilisation d’informations d’identification de domaine

Les indicateurs PSDSCAllowPlainTextPassword et PSDSCAllowDomainUser suppriment l’erreur et l’avertissement informant l’utilisateur du risque encouru.

PSDSCAllowPlainTextPassword

Le premier message d’erreur a une URL avec de la documentation. Ce lien explique comment chiffrer les mots de passe à l’aide d’une structure ConfigurationData et d’un certificat. Pour plus d’informations sur les certificats et les DSC, lisez cet article.

Pour forcer un mot de passe en texte brut, la ressource a besoin du PsDscAllowPlainTextPassword mot-clé dans la section des données de configuration comme suit :

$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

L’indicateur PSDSCAllowPlainTextPassword exige que l’utilisateur reconnaisse le risque lié au stockage de mots de passe en texte brut dans un fichier MOF. Dans le fichier MOF généré, même si un objet PSCredential contenant une SecureString a été utilisé, les mots de passe apparaissent toujours sous forme de texte brut. C’est la seule fois où les informations d’identification sont exposées. L’accès à ce fichier MOF permet à tout le monde d’accéder au compte Administrateur.

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

};

Identifiants en transit et au repos

  • L’indicateur PSDscAllowPlainTextPassword permet de compiler des fichiers MOF contenant des mots de passe en texte clair. Prenez des précautions lorsque vous stockez des fichiers MOF contenant des mots de passe en texte clair.
  • Lorsque le fichier MOF est remis à un nœud en mode Push , WinRM chiffre la communication pour protéger le mot de passe en texte clair, à moins que vous ne remplaciez la valeur par défaut par le paramètre AllowUncrypted .
    • Le chiffrement du MOF à l’aide d’un certificat protège le fichier MOF au repos avant qu’il n’ait été appliqué à un nœud.
  • En mode Pull , vous pouvez configurer le serveur pull Windows pour qu’il utilise HTTPS afin de chiffrer le trafic à l’aide du protocole spécifié dans Internet Information Server. Pour plus d’informations, consultez les articles Configuration d’un client d’extraction DSC et Sécurisation des fichiers MOF à l’aide de certificats.
  • Sur le nœud, les fichiers MOF sont chiffrés au repos à partir de PowerShell 5.0.
    • Dans PowerShell 4.0, les fichiers MOF sont déchiffrés au repos, sauf s’ils sont chiffrés avec un certificat lorsqu’ils sont poussés ou tirés vers le nœud.

Microsoft conseille d’éviter les mots de passe en texte brut en raison du risque de sécurité important.

Informations d’identification du domaine

L’exécution à nouveau de l’exemple de script de configuration (avec ou sans chiffrement) génère toujours l’avertissement indiquant que l’utilisation d’un compte de domaine pour les informations d’identification n’est pas recommandée. L’utilisation d’un compte local élimine l’exposition potentielle des informations d’identification du domaine qui pourraient être utilisées sur d’autres serveurs.

Lorsque vous utilisez des informations d’identification avec des ressources DSC, privilégiez un compte local à un compte de domaine lorsque cela est possible.

S’il y a un « \ » ou un « @ » dans la Username propriété de l’identifiant, DSC le traitera comme un compte de domaine. Il existe une exception pour « localhost », « 127.0.0.1 » et « ::1 » dans la partie domaine du nom d’utilisateur.

PSDscAllowDomainUser

Dans l’exemple de ressource DSC Group ci-dessus, l’interrogation d’un domaine Active Directory nécessite un compte de domaine. Dans ce cas, ajoutez la PSDscAllowDomainUser propriété au ConfigurationData bloc comme suit :

$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

Maintenant, le script de configuration va générer le fichier MOF sans erreurs ni avertissements.