Compartilhar via


Serviço de pull de configuração de estado desejado

Importante

O Servidor de Pull ( Serviço DSC de Recurso do Windows) é um componente com suporte do Windows Server, no entanto, não há planos para oferecer novos recursos ou funcionalidades. gostaríamos que você soubesse que uma versão mais recente do DSC agora está em disponibilidade geral, gerenciada por um recurso do Azure Policy chamado configuração de convidado. O serviço de configuração de convidado combina recursos da Extensão DSC, State Configuration da Automação do Azure e os recursos mais solicitados dos comentários dos clientes. A configuração de convidado também inclui suporte a máquinas híbridas por meio de servidores habilitados para Arc.

O LCM (Gerenciador de Configurações Local) pode ser gerenciado centralmente por uma solução de Serviço de Pull. Ao usar essa abordagem, o nó que está sendo gerenciado é registrado em um serviço e atribuído a uma configuração nas configurações do LCM. A configuração e todos os recursos de DSC necessários como dependências para a configuração são baixados para a máquina e usados pelo LCM para gerenciar a configuração. As informações sobre o estado da máquina que está sendo gerenciada são carregadas no serviço para relatórios. Esse conceito é conhecido como "serviço de pull".

As opções atuais para o serviço de pull incluem:

  • Serviço de Configuração de Estado Desejado da Automação do Azure
  • Um serviço de pull em execução no Windows Server
  • Soluções de código aberto mantidas pela comunidade
  • Um compartilhamento SMB

A escala recomendada para cada solução é a seguinte:

Solução Nós do cliente
Windows Pull Server usando o banco de dados MDB/ESENT Até 500 nós
Servidor de Pull do Windows usando o banco de dados SQL Até 3500 nós
DSC de Automação do Azure Ambientes pequenos e grandes

A solução recomendada e a opção com mais recursos disponíveis é o DSC de Automação do Azure. Um limite superior para o número de nós por conta de automação não foi identificado.

O serviço do Azure pode gerenciar nós locais em datacenters privados ou em nuvens públicas, como Azure e AWS. Para ambientes privados em que os servidores não podem se conectar diretamente à Internet, considere limitar o tráfego de saída apenas ao intervalo de IP do Azure publicado (consulte Intervalos de IP do Azure e marcas de serviço).

Os recursos do serviço online que não estão disponíveis atualmente no serviço de pull no Windows Server incluem:

  • Todos os dados são criptografados em trânsito e em repouso
  • Os certificados de cliente são criados e gerenciados automaticamente
  • Repositório de segredos para gerenciar centralmente senhas/credenciais ou variáveis , como nomes de servidor ou cadeias de conexão
  • Gerencie centralmente a configuração do LCM do nó
  • Atribuir configurações de forma centralizada aos nós do cliente
  • Libere alterações de configuração para "grupos canários" para teste antes de chegar à produção
  • Relatórios gráficos
    • Detalhes do status no nível de granularidade do recurso DSC
    • Mensagens de erro detalhadas de máquinas clientes para solução de problemas
  • Integração com o Azure Log Analytics para alertas, tarefas automatizadas, aplicativo Android/iOS para relatórios e alertas

Serviço de pull DSC no Windows Server

É possível configurar um serviço de pull para ser executado no Windows Server. Lembre-se de que a solução de serviço de pull incluída no Windows Server inclui apenas recursos de armazenamento de configurações e módulos para download e captura de dados de relatório em um banco de dados. Ele não inclui muitos dos recursos oferecidos pelo serviço no Azure e, portanto, não é uma boa ferramenta para avaliar como o serviço seria usado.

O serviço de pull oferecido no Windows Server é um serviço Web no IIS que usa uma interface OData para disponibilizar arquivos de configuração de DSC para nós de destino quando esses nós os solicitam.

Requisitos para usar um servidor de pull:

  • Um servidor executando:
    • WMF/PowerShell 4.0 ou superior
    • Função de servidor IIS
    • Serviço DSC
  • Idealmente, alguns meios de gerar um certificado, para proteger as credenciais passadas para o LCM (Gerenciador de Configurações Local) nos nós de destino

A melhor maneira de configurar o Windows Server para hospedar o serviço de pull é usar uma configuração de DSC. Um script de exemplo é fornecido abaixo.

Sistemas de banco de dados suportados

A partir da versão 17090 do Windows Server, o WMF 5.1 inclui suporte para a opção SQL Server para o Serviço de Pull ( Serviço DSC de Recurso do Windows). Isso fornece uma nova opção para dimensionar ambientes DSC grandes que não migraram para o DSC de Automação do Azure.

Para configurar o servidor de pull para usar o SQL Server, defina SqlProvider como $true e SqlConnectionString como uma cadeia de conexão válida do SQL Server. Para obter mais informações, consulte Cadeias de conexão do SqlClient. Para obter um exemplo de configuração do SQL Server com xDscWebService, primeiro leia Usando o recurso xDscWebService e, em seguida, examine 2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 no GitHub.

Usando o recurso xDscWebService

A maneira mais fácil de configurar um servidor de pull da Web é usar o recurso xDscWebService , incluído no módulo xPSDesiredStateConfiguration . As etapas a seguir explicam como usar o recurso em um Configuration que configura o serviço Web.

  1. Chame o cmdlet Install-Module para instalar o módulo xPSDesiredStateConfiguration.

  2. Obtenha um certificado SSL para o servidor de recebimento de DSC de uma Autoridade de Certificação confiável, dentro de sua organização ou de uma autoridade pública. O certificado recebido da autoridade geralmente está no formato PFX.

  3. Instale o certificado no nó que se tornará o servidor de pull do DSC no local padrão, que deve ser CERT:\LocalMachine\My. Anote a impressão digital do certificado.

  4. Selecione um GUID a ser usado como a chave de registro. Para gerar um usando o PowerShell, digite o seguinte no prompt do PS e pressione enter: [guid]::newGuid() ou New-Guid. Essa chave será usada pelos nós do cliente como uma chave compartilhada para autenticar durante o registro. Para obter mais informações, consulte a seção Chave de Registro abaixo.

  5. No ISE do PowerShell, inicie (F5) o seguinte script de configuração (incluído na pasta do módulo xPSDesiredStateConfiguration como Sample_xDscWebServiceRegistration.ps1.

    Esse script configura o servidor de pull.

    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. Execute a configuração, passando a impressão digital do certificado SSL como o parâmetro certificateThumbPrint e uma chave de registro GUID como o parâmetro 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
    

Chave de Registro

Para permitir que os nós do cliente se registrem no servidor para que possam usar nomes de configuração em vez de um ID de configuração, uma chave de registro criada pela configuração acima é salva em um arquivo chamado RegistrationKeys.txt .C:\Program Files\WindowsPowerShell\DscService A chave de registro funciona como um segredo compartilhado usado durante o registro inicial pelo cliente com o servidor de pull. O cliente gerará um certificado autoassinado que é usado para autenticar exclusivamente no servidor de pull depois que o registro for concluído com êxito. A impressão digital desse certificado é armazenada localmente e associada à URL do servidor de pull.

Observação

Não há suporte para chaves de registro no PowerShell 4.0.

Para configurar um nó para autenticar com o servidor de pull, a chave de registro precisa estar na metaconfiguração para qualquer nó de destino que será registrado com esse servidor de pull. Observe que o RegistrationKey na metaconfiguração abaixo é removido depois que o computador de destino é registrado com êxito e que o valor deve corresponder ao RegistrationKeys.txt valor armazenado no arquivo no servidor de pull ('140a952b-b9d6-406b-b416-e0f759c9c0e4' para este exemplo). Sempre trate o valor da chave de registro com segurança, pois conhecê-lo permite que qualquer computador de destino se registre no servidor de pull.

[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

Observação

A seção ReportServerWeb permite que os dados de relatório sejam enviados para o servidor de pull.

A falta da propriedade ConfigurationID no arquivo de metaconfiguração significa implicitamente que o servidor de pull está dando suporte à versão V2 do protocolo do servidor de pull, portanto, um registro inicial é necessário. Por outro lado, a presença de um ConfigurationID significa que a versão V1 do protocolo do servidor de pull é usada e não há processamento de registro.

Observação

Em um cenário PUSH, existe um bug na versão atual que torna necessário definir uma propriedade ConfigurationID no arquivo de metaconfiguração para nós que nunca foram registrados em um servidor de pull. Isso forçará o protocolo V1 Pull Server e evitará mensagens de falha de registro.

Colocando configurações e recursos

Após a conclusão da configuração do servidor de pull, as pastas definidas pelas propriedades ConfigurationPath e ModulePath na configuração do servidor de pull são onde você colocará os módulos e as configurações que estarão disponíveis para os nós de destino efetuarem. Esses arquivos precisam estar em um formato específico para que o servidor de pull os processe corretamente.

Formato do pacote do módulo de recurso DSC

Cada módulo de recurso precisa ser compactado e nomeado de acordo com o seguinte padrão <Module Name>_<Module Version>.zip.

Por exemplo, um módulo chamado xWebAdminstration com uma versão de módulo de 3.1.2.0 seria nomeado xWebAdministration_3.1.2.0.zip. Cada versão de um módulo deve estar contida em um único arquivo zip. Como há apenas uma única versão de um recurso em cada arquivo zip, não há suporte para o formato de módulo adicionado no WMF 5.0 com suporte para várias versões de módulo em um único diretório. Isso significa que, antes de empacotar os módulos de recursos DSC para uso com o servidor de pull, você precisará fazer uma pequena alteração na estrutura de diretórios. O formato padrão dos módulos que contêm o recurso DSC no WMF 5.0 é <Module Folder>\<Module Version>\DscResources\<DSC Resource Folder>\. Antes de empacotar para o servidor pull, remova a <Module version> pasta para que o caminho se torne <Module Folder>\DscResources\<DSC Resource Folder>\. Com essa alteração, compacte a pasta conforme descrito acima e coloque esses arquivos zip na pasta ModulePath .

Use New-DscChecksum <module zip file> para criar um arquivo de soma de verificação para o módulo recém-adicionado.

Formato MOF de configuração

Um arquivo MOF de configuração precisa ser emparelhado com um arquivo de soma de verificação para que um LCM em um nó de destino possa validar a configuração. Para criar uma soma de verificação, chame o cmdlet New-DscChecksum . O cmdlet usa um parâmetro Path que especifica a pasta em que o MOF de configuração está localizado. O cmdlet cria um arquivo de soma de verificação chamado ConfigurationMOFName.mof.checksum, em que ConfigurationMOFName é o nome do arquivo mof de configuração. Se houver mais de um arquivo MOF de configuração na pasta especificada, uma soma de verificação será criada para cada configuração na pasta. Coloque os arquivos MOF e seus arquivos de soma de verificação associados na pasta ConfigurationPath .

Observação

Se você alterar o arquivo MOF de configuração de alguma forma, também deverá recriar o arquivo de soma de verificação.

Ferramentas

Para configurar, validar e gerenciar o servidor de pull, use as seguintes ferramentas incluídas como exemplos na versão mais recente do módulo xPSDesiredStateConfiguration:

  1. Um módulo que ajudará a empacotar módulos de recursos de DSC e arquivos de configuração para uso no servidor de pull. PublishModulesAndMofsToPullServer.psm1. Exemplos abaixo:

    # 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. Um script que valida o servidor de pull está configurado corretamente. PullServerSetupTests.ps1.

Soluções da comunidade para serviço de pull

A comunidade DSC criou várias soluções para implementar o protocolo de serviço de pull. Para ambientes locais, eles oferecem recursos de serviço de pull e uma oportunidade de contribuir de volta para a comunidade com aprimoramentos incrementais.

Configuração do cliente de pull

Os tópicos a seguir descrevem a configuração de clientes pull em detalhes:

Consulte também