Desired State Configuration pull-tjänst

Viktigt

Pull Server (Windows Feature DSC-Service) är en komponent som stöds i Windows Server, men det finns inga planer på att erbjuda nya funktioner. Vi vill att du ska veta att en nyare version av DSC nu är allmänt tillgänglig, hanterad av en funktion i Azure Policy med namnet gästkonfiguration. Gästkonfigurationstjänsten kombinerar funktioner i DSC-tillägget, Azure Automation State Configuration och de vanligaste begärda funktionerna från kundfeedback. Gästkonfigurationen omfattar även stöd för hybriddatorer via Arc-aktiverade servrar.

Lokala Configuration Manager (LCM) kan hanteras centralt av en Pull Service-lösning. När du använder den här metoden registreras noden som hanteras med en tjänst och tilldelas en konfiguration i LCM-inställningar. Konfigurationen och alla DSC-resurser som behövs som beroenden för konfigurationen laddas ned till datorn och används av LCM för att hantera konfigurationen. Information om tillståndet för den dator som hanteras laddas upp till tjänsten för rapportering. Det här konceptet kallas "pull service".

De aktuella alternativen för pull-tjänsten är:

  • Azure Automation Desired State Configuration tjänst
  • En pull-tjänst som körs på Windows Server
  • Community-underhålls lösningar med öppen källkod
  • En SMB-resurs

Den rekommenderade skalan för varje lösning är följande:

Lösning Klientnoder
Windows Pull Server med MDB/ESENT-databas Upp till 500 noder
Windows Pull Server med SQL Database Upp till 3 500 noder
Azure Automation DSC Både små och stora miljöer

Den rekommenderade lösningen och alternativet med flest tillgängliga funktioner är Azure Automation DSC. En övre gräns för antalet noder per Automation-konto har inte identifierats.

Azure-tjänsten kan hantera noder lokalt i privata datacenter eller i offentliga moln som Azure och AWS. För privata miljöer där servrar inte kan ansluta direkt till Internet bör du överväga att begränsa utgående trafik till endast det publicerade Azure IP-intervallet (se IP-intervall för Azure Datacenter).

Funktioner i onlinetjänsten som för närvarande inte är tillgängliga i pull-tjänsten på Windows Server är:

  • Alla data krypteras under överföring och i vila
  • Klientcertifikat skapas och hanteras automatiskt
  • Hemligheter lagrar centralt för hantering av lösenord/autentiseringsuppgifter eller variabler som servernamn eller anslutningssträngar
  • Hantera LCM-konfiguration för nod centralt
  • Tilldela konfigurationer centralt till klientnoder
  • Versionskonfigurationsändringar i "kanariegrupper" för testning innan de når produktion
  • Grafisk rapportering
    • Statusinformation på DSC-resursnivån för kornighet
    • Utförliga felmeddelanden från klientdatorer för felsökning
  • Integrering med Azure Log Analytics för aviseringar, automatiserade uppgifter, Android/iOS-app för rapportering och aviseringar

DSC-hämtningstjänst i Windows Server

Det går att konfigurera en pull-tjänst så att den körs på Windows Server. Observera att pull-tjänstlösningen som ingår i Windows Server endast innehåller funktioner för att lagra konfigurationer och moduler för nedladdning och insamling av rapportdata till en databas. Den innehåller inte många av funktionerna som erbjuds av tjänsten i Azure och är därför inte ett bra verktyg för att utvärdera hur tjänsten ska användas.

Pull-tjänsten som erbjuds i Windows Server är en webbtjänst i IIS som använder ett OData-gränssnitt för att göra DSC-konfigurationsfiler tillgängliga för målnoder när dessa noder ber om dem.

Krav för att använda en pull-server:

  • En server som kör:
    • WMF/PowerShell 4.0 eller senare
    • IIS-serverroll
    • DSC-tjänst
  • Helst kan du skapa ett certifikat för att skydda autentiseringsuppgifter som skickas till den lokala Configuration Manager (LCM) på målnoder

Det bästa sättet att konfigurera Windows Server som värd för pull-tjänsten är att använda en DSC-konfiguration. Ett exempelskript finns nedan.

Databassystem som stöds

WMF 4.0 WMF 5.0 WMF 5.1 WMF 5.1 (Windows Server Insider Preview 17090)
MDB ESENT (standard), MDB ESENT (standard), MDB ESENT (standard), SQL Server, MDB

Från och med version 17090 av Windows Server är SQL Server ett alternativ som stöds för Pull Service (Windows Feature DSC-Service). Detta ger ett nytt alternativ för att skala stora DSC-miljöer som inte har migrerats till Azure Automation DSC.

Anteckning

SQL Server stöd läggs inte till i tidigare versioner av WMF 5.1 (eller tidigare) och kommer endast att vara tillgängligt i Windows Server-versioner som är större än eller lika med 17090.

Om du vill konfigurera att pull-servern ska använda SQL Server anger du SqlProvider till $true och SqlConnectionString till en giltig SQL Server anslutningssträng. Mer information finns i SqlClient-anslutningssträngar. Ett exempel på SQL Server konfiguration med xDscWebService finns i Använda resursen xDscWebService och granska sedan 2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 på GitHub.

Använda resursen xDscWebService

Det enklaste sättet att konfigurera en webbhämtningsserver är att använda xDscWebService-resursen som ingår i modulen xPSDesiredStateConfiguration . Följande steg förklarar hur du använder resursen i en Configuration som konfigurerar webbtjänsten.

  1. Anropa cmdleten Install-Module för att installera modulen xPSDesiredStateConfiguration .

    Anteckning

    Install-Module ingår i PowerShellGet-modulen , som ingår i PowerShell 5.0 och senare.

  2. Hämta ett SSL-certifikat för DSC Pull-servern från en betrodd certifikatutfärdare, antingen inom din organisation eller en offentlig myndighet. Certifikatet som tas emot från utfärdaren är vanligtvis i PFX-format.

  3. Installera certifikatet på noden som ska bli DSC-pullservern på standardplatsen, som ska vara CERT:\LocalMachine\My.

    • Anteckna certifikatets tumavtryck.
  4. Välj ett GUID som ska användas som registreringsnyckel. Om du vill generera en med PowerShell anger du följande i PS-prompten och trycker på Retur: [guid]::newGuid() eller New-Guid. Den här nyckeln används av klientnoder som en delad nyckel för att autentisera under registreringen. Mer information finns i avsnittet Registreringsnyckel nedan.

  5. I PowerShell ISE startar du (F5) följande konfigurationsskript (ingår i mappen för modulen xPSDesiredStateConfiguration som Sample_xDscWebServiceRegistration.ps1) . Det här skriptet konfigurerar pull-servern.

    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. Kör konfigurationen och skicka tumavtrycket för SSL-certifikatet som parametern certificateThumbPrint och en GUID-registreringsnyckel som parametern 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
    

Registreringsnyckel

Om du vill tillåta att klientnoder registreras på servern så att de kan använda konfigurationsnamn i stället för ett konfigurations-ID sparas en registreringsnyckel som skapades av ovanstående konfiguration i en fil med namnet RegistrationKeys.txt i C:\Program Files\WindowsPowerShell\DscService. Registreringsnyckeln fungerar som en delad hemlighet som används under den första registreringen av klienten med pull-servern. Klienten genererar ett självsignerat certifikat som används för att unikt autentisera till pull-servern när registreringen har slutförts. Tumavtrycket för det här certifikatet lagras lokalt och associeras med URL:en för pull-servern.

Anteckning

Registreringsnycklar stöds inte i PowerShell 4.0.

För att konfigurera en nod att autentisera med pull-servern måste registreringsnyckeln finnas i metakonfigurationen för alla målnoder som ska registreras med den här pull-servern. Observera att RegistrationKey i metakonfigurationen nedan tas bort när måldatorn har registrerats och att värdet måste matcha värdet som lagras i RegistrationKeys.txt filen på pull-servern ("140a952b-b9d6-406b-b416-e0f759c9c0e4" för det här exemplet). Behandla alltid värdet för registreringsnyckeln på ett säkert sätt, eftersom du vet att det gör att alla måldatorer kan registrera sig hos pull-servern.

[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

Anteckning

I avsnittet ReportServerWeb kan rapporteringsdata skickas till pull-servern.

Bristen på egenskapen ConfigurationID i metakonfigurationsfilen innebär implicit att pull-servern stöder V2-versionen av pull-serverprotokollet så en första registrering krävs. Omvänt innebär förekomsten av ett ConfigurationID att V1-versionen av pull-serverprotokollet används och att ingen registrering bearbetas.

Anteckning

I ett PUSH-scenario finns det en bugg i den aktuella versionen som gör det nödvändigt att definiera en ConfigurationID-egenskap i metakonfigurationsfilen för noder som aldrig har registrerats med en pull-server. Detta tvingar V1 Pull Server-protokollet och undviker registreringsfelmeddelanden.

Placera konfigurationer och resurser

När installationen av pull-servern är klar är mapparna som definieras av egenskaperna ConfigurationPath och ModulePath i pull-serverkonfigurationen där du kommer att placera moduler och konfigurationer som är tillgängliga för målnoder att hämta. Dessa filer måste ha ett visst format för att pull-servern ska kunna bearbeta dem korrekt.

Paketformat för DSC-resursmodul

Varje resursmodul måste zippas och namnges enligt följande mönster {Module Name}_{Module Version}.zip.

En modul med namnet xWebAdminstration med modulversionen 3.1.2.0 skulle till exempel ha namnet xWebAdministration_3.1.2.0.zip. Varje version av en modul måste finnas i en enda zip-fil. Eftersom det bara finns en enskild version av en resurs i varje zip-fil stöds inte modulformatet som läggs till i WMF 5.0 med stöd för flera modulversioner i en enda katalog. Det innebär att innan du paketerar DSC-resursmoduler för användning med pull-servern måste du göra en liten ändring i katalogstrukturen. Standardformatet för moduler som innehåller DSC-resurs i WMF 5.0 är {Module Folder}\{Module Version}\DscResources\{DSC Resource Folder}\. Innan du paketerar för pull-servern tar du bort mappen {Module version} så att sökvägen blir {Module Folder}\DscResources\{DSC Resource Folder}\. Med den här ändringen zippar du mappen enligt beskrivningen ovan och placerar zip-filerna i mappen ModulePath .

Använd New-DscChecksum {module zip file} för att skapa en kontrollsummafil för den nyligen tillagda modulen.

MOF-format för konfiguration

En MOF-konfigurationsfil måste paras ihop med en kontrollsummafil så att en LCM på en målnod kan verifiera konfigurationen. Om du vill skapa en kontrollsumma anropar du cmdleten New-DscChecksum . Cmdleten tar en sökvägsparameter som anger mappen där MOF-konfigurationen finns. Cmdleten skapar en checksumfil med namnet ConfigurationMOFName.mof.checksum, där ConfigurationMOFName är namnet på konfigurationsfilen. Om det finns fler än en MOF-konfigurationsfil i den angivna mappen skapas en kontrollsumma för varje konfiguration i mappen. Placera MOF-filerna och deras associerade kontrollsummafiler i ConfigurationPath-mappen .

Anteckning

Om du ändrar MOF-konfigurationsfilen på något sätt måste du även återskapa checksum-filen.

Verktyg

För att underlätta konfiguration, validering och hantering av pull-servern ingår följande verktyg som exempel i den senaste versionen av modulen xPSDesiredStateConfiguration:

  1. En modul som hjälper dig att paketera DSC-resursmoduler och konfigurationsfiler för användning på pull-servern. PublishModulesAndMofsToPullServer.psm1. Exempel nedan:

    # 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. Ett skript som verifierar pull-servern är korrekt konfigurerat. PullServerSetupTests.ps1.

Community-lösningar för pull-tjänst

DSC-communityn har skapat flera lösningar för att implementera pull-tjänstprotokollet. För lokala miljöer erbjuder dessa pull-tjänstfunktioner och en möjlighet att bidra tillbaka till communityn med inkrementella förbättringar.

Pull-klientkonfiguration

I följande avsnitt beskrivs hur du konfigurerar pull-klienter i detalj:

Se även