Desired State Configuration Pull-service

Belangrijk

De pull-server (Windows Feature DSC-Service) is een ondersteund onderdeel van Windows Server, maar er zijn geen plannen om nieuwe functies of mogelijkheden aan te bieden. We willen graag dat u weet dat een nieuwere versie van DSC nu algemeen beschikbaar is, beheerd door een functie van Azure Policy met de naam gastconfiguratie. De gastconfiguratieservice combineert functies van DSC-extensie, Azure Automation State Configuration en de meest gevraagde functies uit feedback van klanten. Gastconfiguratie omvat ook ondersteuning voor hybride machines via servers met Arc.

Local Configuration Manager (LCM) kan centraal worden beheerd door een Pull Service-oplossing. Wanneer u deze methode gebruikt, wordt het knooppunt dat wordt beheerd, geregistreerd bij een service en wordt 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 onder andere:

  • 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 MDB/ESENT-database Maximaal 500 knooppunten
Windows Pull Server met sql-database Maximaal 3500 knooppunten
Azure Automation DSC Zowel kleine als grote omgevingen

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

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

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

  • Alle gegevens worden versleuteld in transit en at rest
  • Clientcertificaten worden automatisch gemaakt en beheerd
  • Geheimenarchief voor het centraal beheren van wachtwoorden/referenties, of variabelen zoals servernamen of verbindingsreeksen
  • LCM-configuratie van knooppunten centraal beheren
  • Configuraties centraal toewijzen aan clientknooppunten
  • Configuratiewijzigingen vrijgeven in 'canary-groepen' voor testen voordat de productie wordt bereikt
  • Grafische rapportage
    • Statusdetails op het NIVEAU van de DSC-resource van granulariteit
    • Uitgebreide foutberichten van clientcomputers voor probleemoplossing
  • Integratie met Azure Log Analytics voor waarschuwingen, geautomatiseerde taken, Android/iOS-app voor rapportage en waarschuwingen

DSC-pullservice in Windows Server

Het is mogelijk om een pull-service te configureren voor uitvoering op Windows Server. Houd er rekening mee dat de pull-serviceoplossing in Windows Server alleen mogelijkheden bevat 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 daarom geen goed hulpprogramma 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 ernaar vragen.

Vereisten voor het gebruik van een pull-server:

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

De beste manier om Windows Server te configureren voor het hosten van pull-service is het gebruik van een DSC-configuratie. Hieronder ziet u een voorbeeldscript.

Ondersteunde databasesystemen

WMF 4.0 WMF 5.0 WMF 5.1 WMF 5.1 (Windows Server Insider Preview 17090)
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 Feature 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 groter dan of gelijk aan 17090.

Als u de pull-server wilt configureren voor het gebruik van 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 De resource xDscWebService gebruiken en bekijkt u vervolgens2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 op GitHub.

De resource xDscWebService gebruiken

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

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

    Notitie

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

  2. Vraag een SSL-certificaat voor de DSC Pull-server aan bij 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 zijn CERT:\LocalMachine\My.

    • Noteer de vingerafdruk van het certificaat.
  4. Selecteer een GUID die moet worden gebruikt als de 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 de 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, waarbij de vingerafdruk van het SSL-certificaat wordt doorgegeven als de parameter certificateThumbPrint en een GUID-registratiesleutel als de parameter 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
    

Registratiesleutel

Als u wilt toestaan dat clientknooppunten zich bij de server registreren, zodat ze configuratienamen kunnen gebruiken in plaats van een configuratie-id, wordt een registratiesleutel die door de bovenstaande configuratie is gemaakt, opgeslagen in een bestand met de naam RegistrationKeys.txt in C:\Program Files\WindowsPowerShell\DscService. De registratiesleutel fungeert als een gedeeld geheim dat wordt gebruikt tijdens de eerste registratie door de client met de pull-server. De client genereert een zelfondertekend certificaat dat wordt gebruikt voor 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 bevinden voor elk doelknooppunt dat wordt geregistreerd bij deze pull-server. Houd er rekening mee dat de RegistrationKey in de onderstaande metaconfiguratie wordt verwijderd nadat de doelcomputer is geregistreerd en dat de waarde moet overeenkomen met de waarde die is opgeslagen in het RegistrationKeys.txt bestand op de pull-server ('140a952b-b9d6-406b-b416-e0f759c9c0e4' voor dit voorbeeld). Behandel de waarde van de registratiesleutel altijd veilig, omdat u weet dat elke doelcomputer zich kan registreren bij de pull-server.

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

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

        [ValidateNotNullOrEmpty()]
        [string] $ServerName = 'localhost' # The 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"
            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

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, dus een eerste registratie is vereist. Omgekeerd betekent de aanwezigheid van een ConfigurationID dat de V1-versie van het pull-serverprotocol wordt gebruikt en dat er geen registratieverwerking plaatsvindt.

Notitie

In een PUSH-scenario bestaat er een fout in de huidige release die het noodzakelijk maakt om een ConfigurationID-eigenschap in het metaconfiguratiebestand te definiëren voor knooppunten die nooit zijn geregistreerd bij een pull-server. Dit dwingt het V1 Pull Server-protocol af en voorkomt registratiefoutberichten.

Configuraties en resources plaatsen

Nadat de installatie van de pull-server is voltooid, worden in de mappen gedefinieerd door de eigenschappen ConfigurationPath en ModulePath in de configuratie van de pull-server modules en configuraties opgeslagen die beschikbaar zijn voor doelknooppunten om op te halen. Deze bestanden moeten een specifieke indeling hebben, zodat de pull-server ze correct kan verwerken.

INDELING VAN DSC-resourcemodulepakket

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

Een module met de naam xWebAdminstration met moduleversie 3.1.2.0 krijgt 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 moduleindeling die is toegevoegd in WMF 5.0 met ondersteuning voor meerdere moduleversies in één map, niet ondersteund. Dit betekent dat voordat u DSC-resourcemodules inpakt voor gebruik met de pull-server, u een kleine wijziging moet aanbrengen in de mapstructuur. 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 inpakt, verwijdert u de map {Module version} zodat het pad verandert in {Module Folder}\DscResources\{DSC Resource Folder}\. Met deze wijziging zipt u de map zoals hierboven beschreven en plaatst u deze zip-bestanden in de map ModulePath .

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

Configuratie-MOF-indeling

Een configuratie-MOF-bestand moet worden gekoppeld aan een controlesombestand, zodat een LCM op een doelknooppunt de configuratie kan valideren. Als u een controlesom wilt maken, roept u de cmdlet New-DscChecksum aan. De cmdlet gebruikt een padparameter die de map aangeeft waarin de configuratie-MOF zich bevindt. De cmdlet maakt een controlesombestand met de naam ConfigurationMOFName.mof.checksum, waarbij ConfigurationMOFName de naam van het configuratie-mof-bestand is. Als er meer dan één MOF-configuratiebestanden in de opgegeven map zijn, wordt er een controlesom gemaakt voor elke configuratie in de map. Plaats de MOF-bestanden en de bijbehorende controlesombestanden in de map ConfigurationPath .

Notitie

Als u het configuratie-MOF-bestand op een of andere manier wijzigt, moet u ook het controlesombestand 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 module xPSDesiredStateConfiguration:

  1. Een module die 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 waarmee de pull-server wordt gevalideerd, is correct geconfigureerd. PullServerSetupTests.ps1.

Community-oplossingen voor pull-service

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

Configuratie van pull-client

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

Zie ook