Compartir a través de


Servicio de extracción de configuración de estado deseado

Importante

El servidor de extracción (servicio DSC de características de Windows) es un componente compatible de Windows Server, sin embargo, no hay planes para ofrecer nuevas características o capacidades. nos gustaría que supiera que ya está disponible con carácter general una versión más reciente de DSC, administrada por una característica de Azure Policy denominada configuración de invitado. El servicio de configuración de invitado combina características de la extensión DSC, la configuración de estado de Azure Automation y las características más solicitadas de los comentarios de los clientes. La configuración de invitado también incluye compatibilidad con máquinas híbridas a través de servidores habilitados para Arc.

Local Configuration Manager (LCM) se puede administrar de forma centralizada mediante una solución de servicio de extracción. Al usar este enfoque, el nodo que se está administrando se registra con un servicio y se le asigna una configuración en la configuración de LCM. La configuración y todos los recursos de DSC necesarios como dependencias para la configuración se descargan en la máquina y LCM los utiliza para administrar la configuración. La información sobre el estado de la máquina que se está administrando se carga en el servicio para la generación de informes. Este concepto se conoce como "servicio pull".

Las opciones actuales para el servicio de extracción incluyen:

  • Servicio de configuración de estado deseado de Azure Automation
  • Un servicio de extracción que se ejecuta en Windows Server
  • Soluciones de código abierto mantenidas por la comunidad
  • Un recurso compartido de SMB

La escala recomendada para cada solución es la siguiente:

Solución Nodos de cliente
Servidor de extracción de Windows mediante la base de datos MDB/ESENT Hasta 500 nodos
Servidor de extracción de Windows mediante una base de datos SQL Hasta 3500 nodos
Azure Automation DSC Entornos pequeños y grandes

La solución recomendada, y la opción con más características disponibles, es DSC de Azure Automation. No se ha identificado un límite superior para el número de nodos por cuenta de Automation.

El servicio de Azure puede administrar nodos locales en centros de datos privados o en nubes públicas como Azure y AWS. En el caso de los entornos privados en los que los servidores no pueden conectarse directamente a Internet, considere la posibilidad de limitar el tráfico saliente solo al intervalo de direcciones IP de Azure publicado (consulte Intervalos de direcciones IP de Azure y etiquetas de servicio).

Entre las características del servicio en línea que no están disponibles actualmente en el servicio de extracción en Windows Server se incluyen:

  • Todos los datos se cifran en tránsito y en reposo
  • Los certificados de cliente se crean y administran automáticamente
  • Almacén de secretos para administrar de forma centralizada contraseñas/credenciales, o variables como nombres de servidor o cadenas de conexión
  • Gestione de forma centralizada la configuración de LCM del nodo
  • Asigne configuraciones de forma centralizada a los nodos de cliente
  • Cambios en la configuración de la versión a "grupos canary" para realizar pruebas antes de llegar a producción
  • Informes gráficos
    • Detalle de estado en el nivel de granularidad del recurso DSC
    • Mensajes de error detallados de los equipos cliente para la solución de problemas
  • Integración con Azure Log Analytics para alertas, tareas automatizadas, aplicación Android/iOS para informes y alertas

Servicio de extracción de DSC en Windows Server

Es posible configurar un servicio de extracción para que se ejecute en Windows Server. Tenga en cuenta que la solución de servicio de extracción incluida en Windows Server solo incluye capacidades de almacenamiento de configuraciones y módulos para descargar y capturar datos de informes en una base de datos. No incluye muchas de las funcionalidades que ofrece el servicio en Azure y, por lo tanto, no es una buena herramienta para evaluar cómo se usaría el servicio.

El servicio de extracción que se ofrece en Windows Server es un servicio web en IIS que usa una interfaz OData para que los archivos de configuración de DSC estén disponibles para los nodos de destino cuando estos los soliciten.

Requisitos para usar un servidor de extracción:

  • Un servidor que ejecuta:
    • WMF/PowerShell 4.0 o superior
    • Rol de servidor IIS
    • Servicio DSC
  • Idealmente, algún medio de generar un certificado, para proteger las credenciales pasadas al Administrador de configuración local (LCM) en los nodos de destino

La mejor manera de configurar Windows Server para hospedar el servicio de extracción es usar una configuración de DSC. A continuación se proporciona un script de ejemplo.

Sistemas de bases de datos compatibles

A partir de la versión 17090 de Windows Server, WMF 5.1 incluye compatibilidad con la opción SQL Server para el servicio de extracción ( servicio DSC de características de Windows). Esto proporciona una nueva opción para escalar entornos de DSC de gran tamaño que no se han migrado a DSC de Automatización de Azure.

Para configurar el servidor de extracción para que use SQL Server, establezca SqlProvider en $true y SqlConnectionString en una cadena de conexión de SQL Server válida. Para obtener más información, vea Cadenas de conexión de SqlClient. Para ver un ejemplo de configuración de SQL Server con xDscWebService, lea primero Uso del recurso xDscWebService y, a continuación, revise 2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 en GitHub.

Uso del recurso xDscWebService

La manera más sencilla de configurar un servidor de extracción web es usar el recurso xDscWebService , incluido en el módulo xPSDesiredStateConfiguration . En los pasos siguientes se explica cómo utilizar el recurso en un Configuration servicio web.

  1. Llame al cmdlet Install-Module para instalar el módulo xPSDesiredStateConfiguration .

  2. Obtenga un certificado SSL para el servidor DSC Pull de una autoridad de certificación de confianza, ya sea dentro de su organización o una autoridad pública. El certificado recibido de la autoridad suele estar en formato PFX.

  3. Instale el certificado en el nodo que se convertirá en el servidor de extracción DSC en la ubicación predeterminada, que debe ser CERT:\LocalMachine\My. Tome nota de la huella digital del certificado.

  4. Seleccione un GUID que se usará como clave de registro. Para generar uno mediante PowerShell, escriba lo siguiente en el símbolo del sistema de PS y presione entrar: [guid]::newGuid() o New-Guid. Los nodos cliente usarán esta clave como clave compartida para autenticarse durante el registro. Para obtener más información, consulte la sección Clave de registro a continuación.

  5. En el ISE de PowerShell, inicie (F5) el siguiente script de configuración (incluido en la carpeta del módulo xPSDesiredStateConfiguration como Sample_xDscWebServiceRegistration.ps1.

    Este script configura el servidor de extracción.

    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. Ejecute la configuración, pasando la huella digital del certificado SSL como el parámetro certificateThumbPrint y una clave de registro GUID como el 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
    

Clave de registro

Para permitir que los nodos de cliente se registren en el servidor de modo que puedan usar nombres de configuración en lugar de un ID de configuración, una clave de registro creada por la configuración anterior se guarda en un archivo denominado RegistrationKeys.txt en C:\Program Files\WindowsPowerShell\DscService. La clave de registro funciona como un secreto compartido utilizado durante el registro inicial por el cliente con el servidor de extracción. El cliente generará un certificado autofirmado que se usa para autenticarse de forma única en el servidor de extracción una vez que el registro se haya completado correctamente. La huella digital de este certificado se almacena localmente y se asocia con la dirección URL del servidor de extracción.

Nota:

Las claves de registro no se admiten en PowerShell 4.0.

Para configurar un nodo para autenticarse con el servidor de extracción, la clave de registro debe estar en la metaconfiguración de cualquier nodo de destino que se registre con este servidor de extracción. Tenga en cuenta que la RegistrationKey de la metaconfiguración siguiente se quita después de que el equipo de destino se haya registrado correctamente y que el valor debe coincidir con el valor almacenado en el RegistrationKeys.txt archivo en el servidor de extracción ('140a952b-b9d6-406b-b416-e0f759c9c0e4' para este ejemplo). Trate siempre el valor de la clave de registro de forma segura, ya que conocerlo permite que cualquier equipo de destino se registre con el servidor de extracción.

[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

Nota:

La sección ReportServerWeb permite enviar datos de informes al servidor de extracción.

La falta de la propiedad ConfigurationID en el archivo de metaconfiguración significa implícitamente que el servidor de extracción admite la versión V2 del protocolo de servidor de extracción, por lo que se requiere un registro inicial. Por el contrario, la presencia de un ConfigurationID significa que se usa la versión V1 del protocolo de servidor de extracción y no hay procesamiento de registro.

Nota:

En un escenario PUSH, existe un error en la versión actual que hace necesario definir una propiedad ConfigurationID en el archivo de metaconfiguración para los nodos que nunca se han registrado con un servidor de extracción. Esto forzará el protocolo V1 Pull Server y evitará los mensajes de error de registro.

Colocación de configuraciones y recursos

Una vez completada la instalación del servidor de extracción, las carpetas definidas por las propiedades ConfigurationPath y ModulePath en la configuración del servidor de extracción son donde colocará los módulos y las configuraciones que estarán disponibles para que los nodos de destino los extraigan. Estos archivos deben estar en un formato específico para que el servidor de extracción los procese correctamente.

Formato de paquete del módulo de recursos DSC

Cada módulo de recursos debe comprimirse y nombrarse de acuerdo con el siguiente patrón <Module Name>_<Module Version>.zip.

Por ejemplo, un módulo denominado xWebAdminstration con una versión de módulo de 3.1.2.0 se denominaría xWebAdministration_3.1.2.0.zip. Cada versión de un módulo debe estar contenida en un único archivo zip. Dado que solo hay una única versión de un recurso en cada archivo zip, no se admite el formato de módulo agregado en WMF 5.0 con soporte para varias versiones de módulo en un solo directorio. Esto significa que antes de empaquetar módulos de recursos DSC para su uso con el servidor de extracción, deberá realizar un pequeño cambio en la estructura de directorios. El formato predeterminado de los módulos que contienen recursos DSC en WMF 5.0 es <Module Folder>\<Module Version>\DscResources\<DSC Resource Folder>\. Antes de empaquetar para el servidor de extracción, quite la <Module version> carpeta para que la ruta de acceso se convierta en <Module Folder>\DscResources\<DSC Resource Folder>\. Con este cambio, comprima la carpeta como se describe anteriormente y coloque estos archivos zip en la carpeta ModulePath .

Utilícelo New-DscChecksum <module zip file> para crear un archivo de suma de comprobación para el módulo recién agregado.

Configuración del formato MOF

Un archivo MOF de configuración debe emparejarse con un archivo de suma de comprobación para que un LCM en un nodo de destino pueda validar la configuración. Para crear una suma de comprobación, llame al cmdlet New-DscChecksum . El cmdlet toma un parámetro Path que especifica la carpeta en la que se encuentra el MOF de configuración. El cmdlet crea un archivo de suma de comprobación denominado ConfigurationMOFName.mof.checksum, donde ConfigurationMOFName es el nombre del archivo mof de configuración. Si hay más de un archivo MOF de configuración en la carpeta especificada, se crea una suma de comprobación para cada configuración de la carpeta. Coloque los archivos MOF y sus archivos de suma de comprobación asociados en la carpeta ConfigurationPath .

Nota:

Si cambia el archivo MOF de configuración de alguna manera, también debe volver a crear el archivo de suma de comprobación.

Fabricación de herramientas

Para configurar, validar y administrar el servidor de extracción, use las siguientes herramientas incluidas como ejemplos en la versión más reciente del módulo xPSDesiredStateConfiguration:

  1. Un módulo que ayudará a empaquetar módulos de recursos DSC y archivos de configuración para su uso en el servidor de extracción. PublishModulesAndMofsToPullServer.psm1. Ejemplos a continuación:

    # 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 que valida el servidor de extracción está configurado correctamente. PullServerSetupTests.ps1.

Soluciones comunitarias para el servicio de extracción

La comunidad de DSC ha creado varias soluciones para implementar el protocolo de servicio de extracción. En el caso de los entornos locales, estos ofrecen capacidades de servicio de extracción y la oportunidad de contribuir a la comunidad con mejoras incrementales.

Configuración del cliente de extracción

En los temas siguientes se describe en detalle la configuración de clientes de extracción:

Consulte también