Mejoras en la configuración de estado deseado (DSC) en WMF 5.1Improvements in Desired State Configuration (DSC) in WMF 5.1

Mejoras en los recursos de la clase DSCDSC class resource improvements

En WMF 5.1, hemos corregido los siguientes problemas conocidos:In WMF 5.1, we have fixed the following known issues:

  • Get-DscConfiguration puede devolver valores vacíos (NULL) o errores si la función Get() de un recurso de DSC basado en clases devuelve un tipo complejo o de tabla hash.Get-DscConfiguration may return empty values (null) or errors if a complex/hash table type is returned by Get() function of a class-based DSC resource.
  • Get-DscConfiguration devuelve un error si se usa la credencial RunAs en la configuración de DSC.Get-DscConfiguration returns error if RunAs credential is used in DSC configuration.
  • Un recurso basado en clases no se puede usar en una configuración compuesta.Class-based resource cannot be used in a composite configuration.
  • Start-DscConfiguration se bloquea si el recurso basado en clases tiene una propiedad de un tipo propio.Start-DscConfiguration hangs if class-based resource has a property of its own type.
  • Los recursos basados en clases no se pueden utilizar como recursos exclusivos.Class-based resource cannot be used as an exclusive resource.

Mejoras en la depuración de recursos de DSCDSC resource debugging improvements

En WMF 5.0, el depurador de PowerShell no se detenía directamente en el método de recursos basados en clases (Get/Set/Test).In WMF 5.0, the PowerShell debugger did not stop at the class-based resource method (Get/Set/Test) directly. En WMF 5.1, el depurador se detiene en el método de recursos basados en clases de la misma manera que con los métodos de recursos basados en MOF.In WMF 5.1, the debugger stops at the class-based resource method in the same way as for MOF-based resources methods.

El cliente de extracción de DSC es compatible con TLS 1.1 y TLS 1.2DSC pull client supports TLS 1.1 and TLS 1.2

Anteriormente, el cliente de extracción de DSC solo era compatible con SSL3.0 y TLS1.0 a través de conexiones HTTPS.Previously, the DSC pull client only supported SSL3.0 and TLS1.0 over HTTPS connections. Cuando se le obligaba a usar protocolos más seguros, el cliente de extracción dejaba de funcionar.When forced to use more secure protocols, the pull client would stop functioning. En WMF 5.1, el cliente de extracción de DSC ya no es compatible con SSL 3.0 y, en cambio, ya es compatible con los protocolos TLS 1.1 y TLS 1.2 que son más seguros.In WMF 5.1, the DSC pull client no longer supports SSL 3.0 and adds support for the more secure TLS 1.1 and TLS 1.2 protocols.

Registro de servidor de extracción mejoradoImproved pull server registration

En las versiones anteriores de WMF, si se realizaban solicitudes de informes y registros concurrentes al servidor de extracción de DSC mientras se usaba la base de datos ESENT, LCM no podía registrarlas ni informar al respecto.In the earlier versions of WMF, simultaneous registrations/reporting requests to a DSC pull server while using the ESENT database would lead to LCM failing to register and/or report. En tales casos, los registros de eventos del servidor de extracción tienen el error "El nombre de instancia ya está en uso".In such cases, the event logs on the pull server has the error "Instance Name already in use." Esto se debe a que se usa un patrón incorrecto para acceder a la base de datos ESENT en un escenario de varios subprocesos.This was due to an incorrect pattern being used to access the ESENT database in a multi-threaded scenario. En WMF 5.1, este problema se ha corregido.In WMF 5.1, this issue has been fixed. Los informes o registros simultáneos (que implican la base de datos ESENT) funcionan correctamente en WMF 5.1.Concurrent registrations or reporting (involving ESENT database) works fine in WMF 5.1. Este problema solo concierne a la base de datos ESENT, no se aplica a la base de datos OLEDB.This issue is applicable only to the ESENT database and does not apply to the OLEDB database.

Habilitación del registro circular en la instancia de base de datos ESENTEnable Circular log on ESENT database instance

En versiones anteriores de DSC-PullServer, los archivos de registro de la base de datos ESENT llenaban el espacio en disco del servidor de extracción, porque la instancia de la base de datos se creó sin el registro circular.In eariler version of DSC-PullServer, the ESENT database log files were filling up the disk space of the pullserver becouse the database instance was being created without circular logging. En esta versión, tiene la opción de controlar el comportamiento del registro circular de la instancia mediante el archivo web.config del servidor de extracción.In this release, you have the option to control the circular logging behavior of the instance using the web.config of the pullserver. De forma predeterminada, CircularLogging se establece en TRUE.By default CircularLogging is set to TRUE.

<appSettings>
    <add key="dbprovider" value="ESENT" />
    <add key="dbconnectionstr" value="C:\Program Files\WindowsPowerShell\DscService\Devices.edb" />
    <add key="CheckpointDepthMaxKB" value="512" />
    <add key="UseCircularESENTLogs" value="TRUE" />
  </appSettings>

Convención de nomenclatura de configuración parcial de extracciónPull partial configuration naming convention

En la versión anterior, la convención de nomenclatura de una configuración parcial consistía en que el nombre de archivo MOF en el servidor o servicio de extracción debía coincidir con el nombre de configuración parcial especificado en la configuración del administrador de configuración local, que a su vez debe coincidir con el nombre de configuración insertado en el archivo MOF.In the previous release, the naming convention for a partial configuration was that the MOF file name in the pull server/service should match the partial configuration name specified in the local configuration manager settings that in turn must match the configuration name embedded in the MOF file.

Vea las instantáneas siguientes:See the snapshots below:

  • Opciones de configuración local que definen una configuración parcial que puede recibir un nodo.Local configuration settings which defines a partial configuration that a node is allowed to receive.

Metaconfiguración de ejemplo

  • Definición de configuración parcial de ejemplo.Sample partial configuration definition
Configuration PartialOne
{
    Node('localhost')
    {
        File test
        {
            DestinationPath = "$env:TEMP\partialconfigexample.txt"
            Contents = 'Partial Config Example'
        }
    }
}
PartialOne
  • "ConfigurationName" insertado en el archivo MOF generado.'ConfigurationName' embedded in the generated MOF file.

Archivo MOF de ejemplo generado

  • FileName en el repositorio de configuración de extracciónFileName in the pull configuration repository

FileName en el repositorio de configuración

El nombre del servicio Automatización de Azure generó archivos MOF como <ConfigurationName>.<NodeName>.mof.Azure Automation service name generated MOF files as <ConfigurationName>.<NodeName>.mof. Por tanto, la configuración siguiente se compila como PartialOne.localhost.mof.So the configuration below compiles to PartialOne.localhost.mof.

Esto hizo imposible extraer una de las configuraciones parciales del servicio Automatización de Azure.This made it impossible to pull one of your partial configuration from Azure Automation service.

Configuration PartialOne
{
    Node('localhost')
    {
        File test
        {
            DestinationPath = "$env:TEMP\partialconfigexample.txt"
            Contents = 'Partial Config Example'
        }
    }
}
PartialOne

En WMF 5.1, la configuración parcial del servidor o servicio de extracción se puede denominar <ConfigurationName>.<NodeName>.mof.In WMF 5.1, a partial configuration in the pull server/service can be named as <ConfigurationName>.<NodeName>.mof. Además, si una máquina extrae una sola configuración del servidor o servicio de extracción, el archivo de configuración del repositorio de configuración del servidor de extracción puede tener cualquier nombre de archivo.Moreover, if a machine is pulling a single configuration from a pull server/service then the configuration file on the pull server configuration repository can have any file name. Esta flexibilidad de nomenclatura le permite administrar los nodos parcialmente mediante el servicio Azure Automation, donde cierta configuración del nodo proviene del DSC de Azure Automation y con una configuración parcial que administra de forma local.This naming flexibility allows you to manage your nodes partially by Azure Automation service, where some configuration for your node is coming from Azure Automation DSC and with a partial configuration that you manage locally.

La metaconfiguración siguiente configura un nodo que se debe administrar tanto localmente como mediante el servicio Azure Automation.The metaconfiguration below sets up a node to be managed both locally as well as by Azure Automation service.

[DscLocalConfigurationManager()]
Configuration RegistrationMetaConfig
{
    Settings
    {
        RefreshFrequencyMins = 30
        RefreshMode = "PULL"
    }

    ConfigurationRepositoryWeb web
    {
        ServerURL =  $endPoint
        RegistrationKey = $registrationKey
        ConfigurationNames = $configurationName
    }

    # Partial configuration managed by Azure Automation service.
    PartialConfiguration PartialConfigurationManagedByAzureAutomation
    {
        ConfigurationSource = "[ConfigurationRepositoryWeb]Web"
    }

    # This partial configuration is managed locally.
    PartialConfiguration OnPremisesConfig
    {
        RefreshMode = "PUSH"
        ExclusiveResources = @("Script")
    }

}

RegistrationMetaConfig
Set-DscLocalConfigurationManager -Path .\RegistrationMetaConfig -Verbose

Uso de PsDscRunAsCredential con recursos compuestos de DSCUsing PsDscRunAsCredential with DSC composite resources

Hemos agregado compatibilidad para usar PsDscRunAsCredential con recursos compuestos de DSC.We have added support for using PsDscRunAsCredential with DSC Composite resources.

Ahora puede especificar el valor de PsDscRunAsCredential al usar recursos compuestos dentro de las configuraciones.You can now specify a value for PsDscRunAsCredential when using composite resources inside configurations. Si se especifica así, todos los recursos se ejecutarán dentro de un recurso compuesto como un usuario RunAs.When specified, all resources run inside a composite resource as a RunAs user. Si el recurso compuesto llama a otro recurso compuesto, todos los recursos se ejecutarán también como usuario RunAs.If a composite resource calls another composite resource, all of its resources are also executed as RunAs user. Las credenciales de RunAs se propagan a todos los niveles de la jerarquía del recurso compuesto.RunAs credentials are propagated to any level of the composite resource hierarchy. Si cualquier recurso de un recurso compuesto especifica su propio valor para PsDscRunAsCredential, aparece un error de combinación durante la compilación de la configuración.If any resource inside a composite resource specifies its own value for PsDscRunAsCredential, a merge error results during configuration compilation.

En este ejemplo se muestra el uso con el recurso compuesto WindowsFeatureSet que se incluye en el módulo PSDesiredStateConfiguration.This example shows usage with WindowsFeatureSet composite resource included in PSDesiredStateConfiguration module.

Configuration InstallWindowsFeature
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration

    Node $AllNodes.NodeName
    {
        WindowsFeatureSet features
        {
            Name = @("Telnet-Client","SNMP-Service")
            Ensure = "Present"
            IncludeAllSubFeature = $true
            PsDscRunAsCredential = Get-Credential
        }
    }
}

$configData = @{
    AllNodes = @(
        @{
            NodeName             = 'localhost'
            PSDscAllowDomainUser = $true
            CertificateFile      = 'C:\publicKeys\targetNode.cer'
            Thumbprint           = '7ee7f09d-4be0-41aa-a47f-96b9e3bdec25'
        }
    )
}

InstallWindowsFeature -ConfigurationData $configData

Validaciones de firmas de configuraciones y módulos de DSCDSC module and configuration signing validations

En DSC, las configuraciones y los módulos se distribuyen a los equipos administrados desde el servidor de extracción.In DSC, configurations and modules are distributed to managed computers from the pull server. Si el servidor de extracción está en peligro, un atacante puede modificar las configuraciones y los módulos del servidor de extracción y propagarlos a todos los nodos administrados, poniéndolos todos en peligro.If the pull server is compromised, an attacker can potentially modify the configurations and modules on the pull server and have it distributed to all managed nodes, compromising all of them.

En WMF 5.1, DSC admite la validación de las firmas digitales en los archivos del catálogo y de configuración (.MOF).In WMF 5.1, DSC supports validating the digital signatures on catalog and configuration (.MOF) files. Esta característica evita que los nodos ejecuten archivos de módulos o de configuración que no están firmados por un firmante de confianza o que se han alterado después de que los haya firmado un firmante de confianza.This feature prevents nodes from executing configurations or module files which are not signed by a trusted signer or which have been tampered with after they have been signed by trusted signer.

Cómo firmar un módulo y una configuraciónHow to sign configuration and module


  • Archivos de configuración (.MOF): el cmdlet de PowerShell existente Set-AuthenticodeSignature se amplía para admitir la firma de archivos MOF.Configuration Files (.MOFs): The existing PowerShell cmdlet Set-AuthenticodeSignature is extended to support signing of MOF files.
  • Módulos: la firma de módulos se realiza mediante la firma del catálogo de módulos correspondiente mediante los siguientes pasos:Modules: Signing of modules is done by signing the corresponding module catalog using the following steps:
    1. Creación de un archivo de catálogo: un archivo de catálogo contiene una colección de algoritmos hash criptográficos o huellas digitales.Create a catalog file: A catalog file contains a collection of cryptographic hashes or thumbprints. Cada huella digital corresponde a un archivo que se incluye en el módulo.Each thumbprint corresponds to a file that is included in the module. Se ha agregado un nuevo cmdlet, New-FileCatalog, para que los usuarios puedan crear un archivo de catálogo para su módulo.The new cmdlet New-FileCatalog, has been added to enable users to create a catalog file for their module.
    2. Firma del archivo de catálogo: use el cmdlet Set-AuthenticodeSignature para firmar el archivo de catálogo.Sign the catalog file: Use Set-AuthenticodeSignature to sign the catalog file.
    3. Coloque el archivo de catálogo dentro de la carpeta del módulo.Place the catalog file inside the module folder. Por convención, el archivo de catálogo del módulo debe colocarse en la carpeta del módulo y debe tener el mismo nombre que este.By convention, module catalog file should be placed under the module folder with the same name as the module.

Configuración de LocalConfigurationManager para habilitar las validaciones de las firmasLocalConfigurationManager settings to enable signing validations

ExtracciónPull

En un nodo, LocalConfigurationManager realiza la validación de las firmas de módulos y las configuraciones en función de su configuración actual.The LocalConfigurationManager of a node performs signing validation of modules and configurations based on its current settings. De forma predeterminada, la validación de firmas está deshabilitada.By default, signature validation is disabled. La validación de firmas se puede habilitar agregando un bloque "SignatureValidation" a la definición de metaconfiguración del nodo, tal como se muestra aquí:Signature validation can enabled by adding the ‘SignatureValidation’ block to the meta-configuration definition of the node as shown below:

[DSCLocalConfigurationManager()]
Configuration EnableSignatureValidation
{
    Settings
    {
        RefreshMode = 'PULL'
    }

    ConfigurationRepositoryWeb pullserver{
      ConfigurationNames = 'sql'
      ServerURL = 'http://localhost:8080/PSDSCPullServer/PSDSCPullServer.svc'
      AllowUnsecureConnection = $true
      RegistrationKey = 'd6750ff1-d8dd-49f7-8caf-7471ea9793fc' # Replace this with correct registration key.
    }
    SignatureValidation validations{
        # If the TrustedStorePath property is provided then LCM will use the custom path. Otherwise, the LCM will use default trusted store path (Cert:\LocalMachine\DSCStore) to find the signing certificate.
        TrustedStorePath = 'Cert:\LocalMachine\DSCStore'
        SignedItemType = 'Configuration','Module'         # This is a list of DSC artifacts, for which LCM need to verify their digital signature before executing them on the node.
    }

}
EnableSignatureValidation
Set-DscLocalConfigurationManager -Path .\EnableSignatureValidation -Verbose

El establecimiento de la metaconfiguración anterior en un nodo habilita la validación de firmas de los módulos y las configuraciones descargados.Setting the above metaconfiguration on a node enables signature validation on downloaded configurations and modules. LocalConfigurationManager lleva a cabo los pasos siguientes para comprobar las firmas digitales.The Local Configuration Manager performs the following steps to verify the digital signatures.

  1. Compruebe que la firma de un archivo de configuración (. MOF) es válida.Verify the signature on a configuration file (.MOF) is valid. Usa el cmdlet de PowerShell Get-AuthenticodeSignature, que se amplía en la versión 5.1 para admitir la validación de la firma de MOF.It uses the PowerShell cmdlet Get-AuthenticodeSignature, which is extended in 5.1 to support MOF signature validation.
  2. Compruebe que la entidad de certificación que autorizó al firmante es de confianza.Verify the certificate authority that authorized the signer is trusted.
  3. Descargue las dependencias de los módulos o recursos de la configuración en una ubicación temporal.Download module/resource dependencies of the configuration to a temp location.
  4. Compruebe la firma del catálogo incluida dentro del módulo.Verify the signature of the catalog included inside the module.
    • Busque un archivo <moduleName>.cat y compruebe su firma mediante el cmdlet Get-AuthenticodeSignature.Find a <moduleName>.cat file and verify its signature using the cmdlet Get-AuthenticodeSignature.
    • Compruebe que la entidad de certificación que autenticó al firmante es de confianza.Verify the certification authority that authenticated the signer is trusted.
    • Compruebe que el contenido de los módulos no se ha alterado, para lo que debe usar el cmdlet nuevo Test-FileCatalog.Verify the content of the modules has not been tampered using the new cmdlet Test-FileCatalog.
  5. Install-Module en $env:ProgramFiles\WindowsPowerShell\Modules\Install-Module to $env:ProgramFiles\WindowsPowerShell\Modules\
  6. Configuración de procesoProcess configuration

Nota: La validación de la firma en el catálogo de módulo y la configuración solo se realizan la primera vez que se aplica la configuración al sistema o cuando el módulo se descarga e instala.Note: Signature validation on module-catalog and configuration is only performed when the configuration is applied to the system for the first time or when the module is downloaded and installed. Las ejecuciones de coherencia no validan la firma de Current.mof ni sus dependencias de módulo.Consistency runs do not validate the signature of Current.mof or its module dependencies. Si se ha producido un error en cualquier etapa de la comprobación, por ejemplo, si la configuración extraída del servidor de extracción no tiene firma, el procesamiento de la configuración termina con el error que se muestra más adelante y se eliminan todos los archivos temporales.If verification has failed at any stage, for instance, if the configuration pulled from the pull server is unsigned, then processing of the configuration terminates with the error shown below and all temporary files are deleted.

Configuración de salida de error de ejemplo

De forma similar, la extracción de un módulo cuyo catálogo no esté firmado provoca el siguiente error:Similarly, pulling a module whose catalog is not signed results in the following error:

Módulo de salida de error de ejemplo

PushPush

Una configuración entregada mediante inserción puede alterarse en su origen antes de que se entregue al nodo.A configuration delivered by using push might be tampered with at its source before it delivered to the node. El administrador de configuración local lleva a cabo pasos de validación de firmas similares para las configuraciones insertadas o publicadas.The Local Configuration Manager performs similar signature validation steps for pushed or published configuration(s). A continuación, se muestra un ejemplo completo de validación de firma para la inserción.Below is a complete example of signature validation for push.

  • Habilite la validación de firma en el nodo.Enable signature validation on the node.
[DSCLocalConfigurationManager()]
Configuration EnableSignatureValidation
{
    Settings
    {
        RefreshMode = 'PUSH'
    }
    SignatureValidation validations{
        TrustedStorePath = 'Cert:\LocalMachine\DSCStore'
        SignedItemType =  'Configuration','Module'
    }

}
EnableSignatureValidation
Set-DscLocalConfigurationManager -Path .\EnableSignatureValidation -Verbose
  • Cree un archivo de configuración de ejemplo.Create a sample configuration file.
# Sample configuration
Configuration Test
{

    File foo
    {
        DestinationPath =  "$env:TEMP\signingTest.txt"
        Contents = "ABC"
    }
}
Test
  • Intente insertar el archivo de configuración sin firmar en el nodo.Try pushing the unsigned configuration file in to the node.
Start-DscConfiguration -Path .\Test -Wait -Verbose -Force

ErrorUnsignedMofPushed

  • Firme el archivo configuración mediante el certificado de firma de código.Sign the configuration file using code-signing certificate.

SignMofFile

  • Intente insertar el archivo MOF firmado.Try pushing the signed MOF file.

SignMofFile