Partager via


Service d’extraction de la configuration de l’état souhaité

Important

Le serveur Pull Server (Windows Feature DSC-Service) est un composant pris en charge de Windows Server, mais il n’est pas prévu d’offrir de nouvelles fonctionnalités ou capacités. nous aimerions que vous sachiez qu’une version plus récente de DSC est désormais généralement disponible, gérée par une fonctionnalité d’Azure Policy nommée configuration invité. Le service de configuration invité combine les fonctionnalités de l’extension DSC, de la configuration d’état d’Azure Automation et des fonctionnalités les plus fréquemment demandées à partir des commentaires des clients. La configuration invité inclut également la prise en charge des machines hybrides via des serveurs compatibles Arc.

Le gestionnaire de configuration local (LCM) peut être géré de manière centralisée par une solution de service d’extraction. Lorsque vous utilisez cette approche, le nœud géré est enregistré auprès d’un service et une configuration est affectée dans les paramètres LCM. La configuration et toutes les ressources DSC nécessaires en tant que dépendances pour la configuration sont téléchargées sur la machine et utilisées par LCM pour gérer la configuration. Les informations sur l’état de la machine gérée sont téléchargées dans le service pour la création de rapports. Ce concept est appelé « service pull ».

Les options actuelles pour le service pull comprennent :

  • Service de configuration de l’état souhaité d’Azure Automation
  • Un service d’extraction s’exécutant sur Windows Server
  • Solutions open source gérées par la communauté
  • Une action PME

L’échelle recommandée pour chaque solution est la suivante :

Solution Nœuds clients
Windows Pull Server à l’aide de la base de données MDB/ESENT Jusqu’à 500 nœuds
Windows Pull Server à l’aide d’une base de données SQL Jusqu’à 3500 nœuds
Azure Automation DSC Petits et grands environnements

La solution recommandée et l’option offrant le plus de fonctionnalités disponibles est Azure Automation DSC. Aucune limite supérieure pour le nombre de nœuds par compte Automation n’a été identifiée.

Le service Azure peut gérer des nœuds locaux dans des centres de données privés ou dans des clouds publics tels qu’Azure et AWS. Pour les environnements privés où les serveurs ne peuvent pas se connecter directement à Internet, envisagez de limiter le trafic sortant à la plage d’adresses IP Azure publiée (consultez Plages d’adresses IP Azure et étiquettes de service).

Les fonctionnalités du service en ligne qui ne sont actuellement pas disponibles dans le service d’extraction sur Windows Server sont les suivantes :

  • Toutes les données sont cryptées en transit et au repos
  • Les certificats clients sont créés et gérés automatiquement
  • Magasin de secrets pour la gestion centralisée des mots de passe/informations d’identification, ou des variables telles que les noms de serveur ou les chaînes de connexion
  • Gestion centralisée de la configuration LCM des nœuds
  • Attribuez de manière centralisée des configurations aux nœuds clients
  • Publiez les modifications de configuration vers les « groupes Canary » pour les tests avant d’atteindre la production
  • Rapports graphiques
    • Détail de l’état au niveau de granularité de la ressource DSC
    • Messages d’erreur détaillés des machines clientes pour le dépannage
  • Intégration avec Azure Log Analytics pour les alertes, les tâches automatisées, l’application Android/iOS pour la création de rapports et d’alertes

Service d’extraction DSC dans Windows Server

Il est possible de configurer un service d’extraction pour qu’il s’exécute sur Windows Server. Notez que la solution de service d’extraction incluse dans Windows Server inclut uniquement des fonctionnalités de stockage des configurations et des modules pour le téléchargement et la capture des données de rapport dans une base de données. Il n’inclut pas la plupart des fonctionnalités offertes par le service dans Azure et n’est donc pas un bon outil pour évaluer la façon dont le service serait utilisé.

Le service d’extraction proposé dans Windows Server est un service Web dans IIS qui utilise une interface OData pour mettre les fichiers de configuration DSC à la disposition des nœuds cibles lorsque ceux-ci les demandent.

Conditions requises pour l’utilisation d’un serveur collecteur :

  • Un serveur exécutant :
    • WMF/PowerShell 4.0 ou version ultérieure
    • Rôle serveur IIS
    • DSC Service
  • Idéalement, il s’agit d’un moyen de générer un certificat, pour sécuriser les informations d’identification transmises au gestionnaire de configuration local (LCM) sur les nœuds cibles

La meilleure façon de configurer Windows Server pour héberger le service d’extraction consiste à utiliser une configuration DSC. Un exemple de script est fourni ci-dessous.

Systèmes de base de données pris en charge

À compter de la version 17090 de Windows Server, WMF 5.1 inclut la prise en charge de l’option SQL Server pour le service d’extraction (Windows Feature DSC-Service). Il s’agit d’une nouvelle option pour la mise à l’échelle d’environnements DSC volumineux qui n’ont pas migré vers Azure Automation DSC.

Pour configurer le serveur collecteur afin qu’il utilise SQL Server, définissez SqlProvider sur $true et SqlConnectionString sur une chaîne de connexion SQL Server valide. Pour plus d’informations, consultez Chaînes de connexion SqlClient. Pour obtenir un exemple de configuration SQL Server avec xDscWebService, consultez d’abord Utilisation de la ressource xDscWebService , puis consultez2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 sur GitHub.

Utilisation de la ressource xDscWebService

La façon la plus simple de configurer un serveur web pull est d’utiliser la ressource xDscWebService , incluse dans le module xPSDesiredStateConfiguration . Les étapes suivantes expliquent comment utiliser la ressource dans un Configuration qui configure le service Web.

  1. Appelez l’applet de commande Install-Module pour installer le module xPSDesiredStateConfiguration .

  2. Obtenez un certificat SSL pour le serveur DSC Pull auprès d’une autorité de certification de confiance, au sein de votre organisation ou d’une autorité publique. Le certificat reçu de l’autorité est généralement au format PFX.

  3. Installez le certificat sur le nœud qui deviendra le serveur d’extraction DSC à l’emplacement par défaut, qui doit être CERT:\LocalMachine\My. Notez l’empreinte du certificat.

  4. Sélectionnez un GUID à utiliser comme clé d’enregistrement. Pour en générer un à l’aide de PowerShell, entrez ce qui suit à l’invite PS et appuyez sur Entrée : [guid]::newGuid() ou New-Guid. Cette clé sera utilisée par les nœuds clients comme clé partagée pour s’authentifier lors de l’enregistrement. Pour plus d’informations, consultez la section Clé d’inscription ci-dessous.

  5. Dans l’ISE PowerShell, démarrez (F5) le script de configuration suivant (inclus dans le dossier du module xPSDesiredStateConfiguration sous la forme Sample_xDscWebServiceRegistration.ps1.

    Ce script configure le serveur collecteur.

    configuration Sample_xDscWebServiceRegistration
    {
        param
        (
            [string[]]$NodeName = 'localhost',
    
            [ValidateNotNullOrEmpty()]
            [string] $certificateThumbPrint,
    
            [Parameter(HelpMessage='This should be a string with enough entropy (randomness)' +
                ' to protect the registration of clients to the pull server.  We will use new' +
                ' GUID by default.'
            )]
            [ValidateNotNullOrEmpty()]
            [string] $RegistrationKey   # A guid that clients use to initiate conversation with pull server
        )
    
        Import-DSCResource -ModuleName PSDesiredStateConfiguration
        Import-DSCResource -ModuleName xPSDesiredStateConfiguration
    
        Node $NodeName
        {
            WindowsFeature DSCServiceFeature
            {
                Ensure = "Present"
                Name   = "DSC-Service"
            }
    
            xDscWebService PSDSCPullServer
            {
                Ensure                  = "Present"
                EndpointName            = "PSDSCPullServer"
                Port                    = 8080
                PhysicalPath            = "$env:SystemDrive\inetpub\PSDSCPullServer"
                CertificateThumbPrint   = $certificateThumbPrint
                ModulePath              = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Modules"
                ConfigurationPath       = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration"
                State                   = "Started"
                DependsOn               = "[WindowsFeature]DSCServiceFeature"
                RegistrationKeyPath     = "$env:PROGRAMFILES\WindowsPowerShell\DscService"
                AcceptSelfSignedCertificates = $true
                UseSecurityBestPractices     = $true
                Enable32BitAppOnWin64   = $false
            }
    
            File RegistrationKeyFile
            {
                Ensure          = 'Present'
                Type            = 'File'
                DestinationPath = "$env:ProgramFiles\WindowsPowerShell\DscService\RegistrationKeys.txt"
                Contents        = $RegistrationKey
            }
        }
    }
    
  6. Exécutez la configuration en transmettant l’empreinte numérique du certificat SSL en tant que paramètre certificateThumbPrint et une clé d’enregistrement GUID en tant que paramètre RegistrationKey :

    # To find the Thumbprint for an installed SSL certificate for use with the pull server list all
    # certificates in your local store and then copy the thumbprint for the appropriate certificate
    # by     reviewing the certificate subjects
    
    dir Cert:\LocalMachine\my
    
    # Then include this thumbprint when running the configuration
    $sample_xDscWebServiceRegistrationSplat = @{
        certificateThumbprint = 'A7000024B753FA6FFF88E966FD6E19301FAE9CCC'
        RegistrationKey = '140a952b-b9d6-406b-b416-e0f759c9c0e4'
        OutputPath = 'C:\Configs\PullServer'
    }
    Sample_xDscWebServiceRegistration @sample_xDscWebServiceRegistrationSplat
    
    # Run the compiled configuration to make the target node a DSC Pull Server
    Start-DscConfiguration -Path c:\Configs\PullServer -Wait -Verbose
    

Clé d’inscription

Pour permettre aux noeuds clients de s’enregistrer auprès du serveur afin qu’ils puissent utiliser des noms de configuration au lieu d’un ID de configuration, une clé d’enregistrement créée par la configuration ci-dessus est enregistrée dans un fichier nommé RegistrationKeys.txt dans C:\Program Files\WindowsPowerShell\DscService. La clé d’enregistrement fonctionne comme un secret partagé utilisé lors de l’enregistrement initial par le client auprès du serveur collecteur. Le client génère un certificat auto-signé qui est utilisé pour s’authentifier de manière unique auprès du serveur collecteur une fois l’inscription terminée. L’empreinte numérique de ce certificat est stockée localement et associée à l’URL du serveur collecteur.

Remarque

Les clés d’inscription ne sont pas prises en charge dans PowerShell 4.0.

Pour configurer un nœud afin de s’authentifier auprès du serveur collecteur, la clé d’inscription doit se trouver dans la métaconfiguration de tout nœud cible qui s’inscrira auprès de ce serveur collecteur. Notez que la clé d’enregistrement dans la métaconfiguration ci-dessous est supprimée une fois que l’ordinateur cible s’est correctement enregistré, et que la valeur doit correspondre à la valeur stockée dans le RegistrationKeys.txt fichier sur le serveur collecteur ('140a952b-b9d6-406b-b416-e0f759c9c0e4' pour cet exemple). Traitez toujours la valeur de la clé d’enregistrement de manière sécurisée, car sa connaissance permet à n’importe quelle machine cible de s’inscrire auprès du serveur collecteur.

[DSCLocalConfigurationManager()]
configuration Sample_MetaConfigurationToRegisterWithLessSecurePullServer
{
    param
    (
        [ValidateNotNullOrEmpty()]
        [string] $NodeName = 'localhost',

        # the key used to set up pull server in previous configuration
        [ValidateNotNullOrEmpty()]
        [string] $RegistrationKey,

        # The name of the pull server, same as $NodeName used in previous configuration
        [ValidateNotNullOrEmpty()]
        [string] $ServerName = 'localhost'
    )

    Node $NodeName
    {
        Settings
        {
            RefreshMode        = 'Pull'
        }

        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL          = "https://$ServerName`:8080/PSDSCPullServer.svc"
            RegistrationKey    = $RegistrationKey
            ConfigurationNames = @('ClientConfig')
        }

        ReportServerWeb CONTOSO-PullSrv
        {
            ServerURL       = "https://$ServerName`:8080/PSDSCPullServer.svc"
            RegistrationKey = $RegistrationKey
        }
    }
}

$MetaConfigurationSplat = @{
    RegistrationKey = $RegistrationKey
    OutputPath = 'c:\Configs\TargetNodes'
}

Sample_MetaConfigurationToRegisterWithLessSecurePullServer @MetaConfigurationSplat

Remarque

La section ReportServerWeb permet d’envoyer les données de rapport au serveur collecteur.

L’absence de la propriété ConfigurationID dans le fichier de métaconfiguration signifie implicitement que le serveur collecteur prend en charge la version V2 du protocole de serveur collecteur, de sorte qu’un enregistrement initial est requis. À l’inverse, la présence d’un ConfigurationID signifie que la version V1 du protocole de serveur collecteur est utilisée et qu’il n’y a pas de traitement d’enregistrement.

Remarque

Dans un scénario PUSH, il existe un bogue dans la version actuelle qui rend nécessaire la définition d’une propriété ConfigurationID dans le fichier de métaconfiguration pour les nœuds qui ne se sont jamais inscrits auprès d’un serveur collecteur. Cela forcera le protocole V1 Pull Server et évitera les messages d’échec d’enregistrement.

Placement des configurations et des ressources

Une fois la configuration du serveur collecteur terminée, les dossiers définis par les propriétés ConfigurationPath et ModulePath dans la configuration du serveur collecteur sont l’endroit où vous placerez les modules et les configurations qui seront disponibles pour les nœuds cibles à extraire. Ces fichiers doivent être dans un format spécifique pour que le serveur pull puisse les traiter correctement.

Format du package du module de ressources DSC

Chaque module de ressource doit être compressé et nommé selon le modèle <Module Name>_<Module Version>.zipsuivant.

Par exemple, un module nommé xWebAdminstration avec une version de module 3.1.2.0 serait nommé xWebAdministration_3.1.2.0.zip. Chaque version d’un module doit être contenue dans un seul fichier zip. Étant donné qu’il n’y a qu’une seule version d’une ressource dans chaque fichier zip, le format de module ajouté dans WMF 5.0 avec prise en charge de plusieurs versions de module dans un seul répertoire n’est pas pris en charge. Cela signifie qu’avant d’empaqueter les modules de ressources DSC à utiliser avec le serveur collecteur, vous devez apporter une petite modification à la structure des répertoires. Le format par défaut des modules contenant une ressource DSC dans WMF 5.0 est <Module Folder>\<Module Version>\DscResources\<DSC Resource Folder>\. Avant d’empaqueter pour le serveur collecteur, supprimez le <Module version> dossier afin que le chemin d’accès devienne <Module Folder>\DscResources\<DSC Resource Folder>\. Avec cette modification, compressez le dossier comme décrit ci-dessus et placez ces fichiers zip dans le dossier ModulePath .

Permet New-DscChecksum <module zip file> de créer un fichier de somme de contrôle pour le module nouvellement ajouté.

Configuration du format MOF

Un fichier MOF de configuration doit être associé à un fichier de somme de contrôle afin qu’un LCM sur un nœud cible puisse valider la configuration. Pour créer une somme de contrôle, appelez l’applet de commande New-DscChecksum . L’applet de commande prend un paramètre Path qui spécifie le dossier dans lequel se trouve le MOF de configuration. L’applet de commande crée un fichier de somme de contrôle nommé ConfigurationMOFName.mof.checksum, où ConfigurationMOFName est le nom du fichier mof de configuration. S’il y a plusieurs fichiers MOF de configuration dans le dossier spécifié, une somme de contrôle est créée pour chaque configuration du dossier. Placez les fichiers MOF et leurs fichiers de somme de contrôle associés dans le dossier ConfigurationPath .

Remarque

Si vous modifiez le fichier MOF de configuration d’une manière ou d’une autre, vous devez également recréer le fichier de somme de contrôle.

Outillage

Pour configurer, valider et gérer le serveur collecteur, utilisez les outils suivants inclus à titre d’exemples dans la dernière version du module xPSDesiredStateConfiguration :

  1. Un module qui vous aidera à empaqueter les modules de ressources DSC et les fichiers de configuration à utiliser sur le serveur collecteur. PublishModulesAndMofsToPullServer.psm1. Exemples ci-dessous :

    # Example 1 - Package all versions of given modules installed locally and
    # MOF files are in c:\LocalDepot
    $moduleList = @('xWebAdministration', 'xPhp')
    Publish-DSCModuleAndMof -Source C:\LocalDepot -ModuleNameList $moduleList
    
    # Example 2 - Package modules and mof documents from c:\LocalDepot
    Publish-DSCModuleAndMof -Source C:\LocalDepot -Force
    
  2. Un script qui valide le serveur collecteur est correctement configuré. PullServerSetupTests.ps1.

Solutions communautaires pour le service Pull

La communauté DSC a créé plusieurs solutions pour implémenter le protocole de service d’extraction. Pour les environnements sur site, ceux-ci offrent des fonctionnalités de service d’extraction et la possibilité de contribuer à la communauté avec des améliorations incrémentielles.

Configuration du client d’extraction

Les rubriques suivantes décrivent en détail la configuration des clients pull :

Voir aussi