Desired State Configuration Pull-service

Belangrijk

De pull-server (Windows functie DSC-Service) is een ondersteund onderdeel van Windows Server, maar er zijn geen plannen om nieuwe functies of mogelijkheden aan te bieden. Het is raadzaam om te beginnen met het overstappen van beheerde clients naar Azure Automation DSC (bevat functies buiten Pull Server op Windows Server) of een van de community-oplossingen die hier worden vermeld.

Lokale Configuration Manager (LCM) kunnen centraal worden beheerd door een pull-serviceoplossing. Wanneer u deze methode gebruikt, wordt het knooppunt dat wordt beheerd, geregistreerd bij een service en een configuratie toegewezen in LCM-instellingen. De configuratie en alle DSC-resources die nodig zijn als afhankelijkheden voor de configuratie, worden gedownload naar de computer en gebruikt door LCM om de configuratie te beheren. Informatie over de status van de machine die wordt beheerd, wordt geüpload naar de service voor rapportage. Dit concept wordt 'pull-service' genoemd.

De huidige opties voor de pull-service zijn:

  • Azure Automation Desired State Configuration service
  • Een pull-service die wordt uitgevoerd op Windows Server
  • Door de community onderhouden opensource-oplossingen
  • Een SMB-share

De aanbevolen schaal voor elke oplossing is als volgt:

Oplossing Clientknooppunten
Windows Pull-server met behulp van MDB/ESENT-database Maximaal 500 knooppunten
Windows Pull-server met behulp SQL database Maximaal 3500 knooppunten
Azure Automation DSC Zowel kleine als grote omgevingen

De aanbevolen oplossing en de optie met de meeste beschikbare functies zijn Azure Automation DSC. Er is geen bovengrens voor het aantal knooppunten per Automation-account geïdentificeerd.

De Azure-service kan knooppunten on-premises beheren in privé datacenters of in openbare clouds zoals Azure en AWS. Voor privéomgevingen waarin servers geen rechtstreeks verbinding kunnen maken met internet, kunt u uitgaand verkeer beperken tot alleen het gepubliceerde Azure IP-bereik (zie Azure Datacenter IP Ranges).

Functies van de onlineservice die momenteel niet beschikbaar zijn in de pull-service op Windows Server zijn onder andere:

  • Alle gegevens worden versleuteld tijdens overdracht en at-rest
  • Clientcertificaten worden automatisch gemaakt en beheerd
  • Geheimenopslag voor het centraal beheren van wachtwoorden/referenties,of variabelen zoals servernamen of verbindingsreeksen
  • LCM-configuratie van knooppunt centraal beheren
  • Configuraties centraal toewijzen aan clientknooppunten
  • Wijzigingen in de releaseconfiguratie in 'canary groups' voor testen voordat de productie wordt bereikt
  • Grafische rapportage
    • Statusdetails op het granulariteitsniveau van de DSC-resource
    • Uitgebreide foutberichten van clientmachines voor probleemoplossing
  • Integratie met Azure Log Analytics voor waarschuwingen, geautomatiseerde taken, Android/iOS-app voor rapportage en waarschuwingen

DSC pull-service in Windows Server

Het is mogelijk om een pull-service te configureren om te worden uitgevoerd op Windows Server. De pull-serviceoplossing die is opgenomen in Windows Server bevat alleen mogelijkheden voor het opslaan van configuraties en modules voor het downloaden en vastleggen van rapportgegevens in een database. Het bevat niet veel van de mogelijkheden die de service in Azure biedt en is dus geen goed hulpmiddel om te evalueren hoe de service zou worden gebruikt.

De pull-service die wordt aangeboden in Windows Server is een webservice in IIS die gebruikmaakt van een OData-interface om DSC-configuratiebestanden beschikbaar te maken voor doelknooppunten wanneer deze knooppunten hier om vragen.

Vereisten voor het gebruik van een pull-server:

  • Een server met:
    • WMF/PowerShell 4.0 of hoger
    • IIS-serverfunctie
    • DSC-service
  • In het ideale moment kunt u een certificaat genereren om referenties te beveiligen die worden doorgegeven aan de Local Configuration Manager (LCM) op doelknooppunten

De beste manier om een Windows te configureren voor het hosten van de pull-service, is door een DSC-configuratie te gebruiken. Hieronder vindt u een voorbeeldscript.

Ondersteunde databasesystemen

WMF 4.0 WMF 5.0 WMF 5.1 WMF 5.1
MDB ESENT (standaard), MDB ESENT (standaard), MDB ESENT (standaard), SQL Server, MDB

Vanaf versie 17090 van Windows Server is SQL Server een ondersteunde optie voor de pull-service (Windows DSC-Service). Dit biedt een nieuwe optie voor het schalen van grote DSC-omgevingen die niet zijn gemigreerd naar Azure Automation DSC.

Notitie

SQL Server ondersteuning wordt niet toegevoegd aan eerdere versies van WMF 5.1 (of eerder) en is alleen beschikbaar op Windows Server-versies die groter zijn dan of gelijk zijn aan 17090.

Als u de pull-server wilt configureren voor SQL Server, stelt u SqlProvider in op $true en SqlConnectionString op een geldige SQL Server verbindingsreeks. Zie SqlClient-verbindingsreeksen voor meer informatie. Voor een voorbeeld van SQL Server configuratie met xDscWebService, leest u eerst Using the xDscWebService resource (De xDscWebService-resource gebruiken) en bekijkt u de2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 op GitHub.

De xDscWebService-resource gebruiken

De eenvoudigste manier om een web-pull-server in te stellen, is met de resource xDscWebService, die is opgenomen in de xPSDesiredStateConfiguration-module. In de volgende stappen wordt uitgelegd hoe u de resource gebruikt in een Configuration om de webservice in te stellen.

  1. Roep de cmdlet Install-Module aan om de xPSDesiredStateConfiguration-module te installeren.

    Notitie

    Install-Module is opgenomen in de PowerShellGet-module, die is opgenomen in PowerShell 5.0 en hoger.

  2. Haal een SSL-certificaat op voor de DSC Pull-server van een vertrouwde certificeringsinstantie, binnen uw organisatie of een openbare instantie. Het certificaat dat van de instantie is ontvangen, heeft meestal de PFX-indeling.

  3. Installeer het certificaat op het knooppunt dat de DSC Pull-server wordt op de standaardlocatie, die moet CERT:\LocalMachine\My zijn.

    • Noteer de vingerafdruk van het certificaat.
  4. Selecteer een GUID die moet worden gebruikt als registratiesleutel. Als u er een wilt genereren met behulp van PowerShell, voert u het volgende in bij de PS-prompt en drukt u op Enter: [guid]::newGuid() of New-Guid . Deze sleutel wordt door clientknooppunten gebruikt als een gedeelde sleutel voor verificatie tijdens de registratie. Zie de sectie Registratiesleutel hieronder voor meer informatie.

  5. Start in PowerShell ISE (F5)het volgende configuratiescript (opgenomen in de map van de xPSDesiredStateConfiguration-module als Sample_xDscWebServiceRegistration.ps1 ) . Met dit script wordt de pull-server ingesteld.

    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. Voer de configuratie uit en voer de vingerafdruk van het SSL-certificaat door als de parameter certificateThumbPrint en een GUID-registratiesleutel als de RegistrationKey-parameter:

    # 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_xDscWebServiceRegistration -certificateThumbprint 'A7000024B753FA6FFF88E966FD6E19301FAE9CCC' -RegistrationKey '140a952b-b9d6-406b-b416-e0f759c9c0e4' -OutputPath c:\Configs\PullServer
    
    # Run the compiled configuration to make the target node a DSC Pull Server
    Start-DscConfiguration -Path c:\Configs\PullServer -Wait -Verbose
    

Registratiesleutel

Als u wilt dat clientknooppunten zich kunnen registreren bij de server, zodat ze configuratienamen kunnen gebruiken in plaats van een configuratie-id, wordt een registratiesleutel die is gemaakt door de bovenstaande configuratie opgeslagen in een bestand met de RegistrationKeys.txt naam in C:\Program Files\WindowsPowerShell\DscService . De registratiesleutel fungeert als een gedeeld geheim dat wordt gebruikt tijdens de eerste registratie door de client bij de pull-server. De client genereert een zelf-ondertekend certificaat dat wordt gebruikt voor een unieke verificatie bij de pull-server zodra de registratie is voltooid. De vingerafdruk van dit certificaat wordt lokaal opgeslagen en gekoppeld aan de URL van de pull-server.

Notitie

Registratiesleutels worden niet ondersteund in PowerShell 4.0.

Als u een knooppunt wilt configureren voor verificatie bij de pull-server, moet de registratiesleutel zich in de metaconfiguratie voor elk doel-knooppunt dat bij deze pull-server wordt geregistreerd. Houd er rekening mee dat de RegistrationKey in de onderstaande metaconfiguratie wordt verwijderd nadat de doelmachine is geregistreerd en dat de waarde moet overeenkomen met de waarde die is opgeslagen in het bestand op de RegistrationKeys.txt pull-server ('140a952b-b9d6-406b-b416-e0f759c9c0e4' voor dit voorbeeld). Behandel de waarde van de registratiesleutel altijd veilig, omdat u weet dat elke doelmachine zich hiermee kan registreren bij de pull-server.

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

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

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

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

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

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

Sample_MetaConfigurationToRegisterWithLessSecurePullServer -RegistrationKey $RegistrationKey -OutputPath c:\Configs\TargetNodes

Notitie

In de sectie ReportServerWeb kunnen rapportagegegevens naar de pull-server worden verzonden.

Het ontbreken van de eigenschap ConfigurationID in het metaconfiguratiebestand betekent impliciet dat de pull-server de V2-versie van het pull-serverprotocol ondersteunt, zodat een initiële registratie vereist is. De aanwezigheid van een ConfigurationID betekent daarentegen dat de V1-versie van het pull-serverprotocol wordt gebruikt en dat er geen registratie wordt verwerkt.

Notitie

In een PUSH-scenario bestaat er een fout in de huidige release waardoor het nodig is om een ConfigurationID-eigenschap te definiëren in het metaconfiguratiebestand voor knooppunten die nooit zijn geregistreerd bij een pull-server. Hierdoor wordt het pull-serverprotocol V1 geforceerd en worden berichten over registratiefout voorkomen.

Configuraties en resources plaatsen

Nadat de installatie van de pull-server is voltooid, worden in de mappen die zijn gedefinieerd door de eigenschappen ConfigurationPath en ModulePath in de pull-serverconfiguratie modules en configuraties geplaatst die beschikbaar zijn voor het pullen van doelknooppunten. Deze bestanden moeten een specifieke indeling hebben om ze correct te kunnen verwerken door de pull-server.

Pakketindeling van DSC-resourcemodule

Elke resourcemodule moet worden ingepakt en benoemd volgens het volgende patroon {Module Name}_{Module Version}.zip .

Een module met de naam xWebAdminstration met moduleversie 3.1.2.0 heeft bijvoorbeeld de naam xWebAdministration_3.1.2.0.zip . Elke versie van een module moet zijn opgenomen in één zip-bestand. Omdat elk zip-bestand slechts één versie van een resource bevat, wordt de module-indeling die is toegevoegd in WMF 5.0 met ondersteuning voor meerdere moduleversies in één map, niet ondersteund. Dit betekent dat u een kleine wijziging moet maken in de mapstructuur voordat u DSC-resourcemodules verpakt voor gebruik met een pull-server. De standaardindeling van modules met DSC-resource in WMF 5.0 is {Module Folder}\{Module Version}\DscResources\{DSC Resource Folder}\ . Voordat u de pull-server verpakt, verwijdert u de map {Module version} zodat het pad {Module Folder}\DscResources\{DSC Resource Folder}\ wordt. Met deze wijziging zipt u de map in zoals hierboven wordt beschreven en plaats u deze zip-bestanden in de map ModulePath.

Gebruik New-DscChecksum {module zip file} om een controlesumbestand te maken voor de zojuist toegevoegde module.

Configuratie-MOF-indeling

Een MOF-configuratiebestand moet worden gekoppeld aan een controlesumbestand, zodat een LCM op een doel-knooppunt de configuratie kan valideren. Als u een controlesum wilt maken, roept u de cmdlet New-DscChecksum aan. De cmdlet gebruikt de parameter Path om de map op te geven waarin de configuratie-MOF zich bevindt. De cmdlet maakt een controlesumbestand met de ConfigurationMOFName.mof.checksum naam , waarbij de naam is van het ConfigurationMOFName mof-configuratiebestand. Als er meer dan één MOF-configuratiebestanden in de opgegeven map staan, wordt er een controlesum gemaakt voor elke configuratie in de map. Plaats de MOF-bestanden en de bijbehorende controlesumbestanden in de map ConfigurationPath.

Notitie

Als u het MOF-configuratiebestand op een of andere manier wijzigt, moet u ook het controlesumbestand opnieuw maken.

Hulpprogramma's

Om het instellen, valideren en beheren van de pull-server eenvoudiger te maken, zijn de volgende hulpprogramma's opgenomen als voorbeelden in de nieuwste versie van de xPSDesiredStateConfiguration-module:

  1. Een module die u helpt bij het verpakken van DSC-resourcemodules en configuratiebestanden voor gebruik op de pull-server. PublishModulesAndMofsToPullServer.psm1. Voorbeelden hieronder:

    # 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. Een script dat de pull-server valideert, is correct geconfigureerd. PullServerSetupTests.ps1.

Communityoplossingen voor pull-service

De DSC-community heeft meerdere oplossingen geschreven voor het implementeren van het pull-serviceprotocol. Voor on-premises omgevingen bieden deze mogelijkheden voor pull-service en de mogelijkheid om een bijdrage te leveren aan de community met incrementele verbeteringen.

Clientconfiguratie pullen

In de volgende onderwerpen wordt het instellen van pull-clients in detail beschreven:

Zie ook