Melhorias na DSC (Configuração de Estado Desejado) no WMF 5.1Improvements in Desired State Configuration (DSC) in WMF 5.1

Melhorias de recursos de classe da DSCDSC class resource improvements

No 5.1 WMF, corrigimos os seguintes problemas conhecidos:In WMF 5.1, we have fixed the following known issues:

  • O Get-DscConfiguration poderá retornar valores vazios (nulos) ou erros se um tipo complexo/de tabela de hash for retornado pela função Get() de um recurso DSC baseado em classe.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.
  • O Get-DscConfiguration retornará um erro se a credencial RunAs for usada na configuração DSC.Get-DscConfiguration returns error if RunAs credential is used in DSC configuration.
  • Os recursos baseados em classe não podem ser usados em uma configuração de composição.Class-based resource cannot be used in a composite configuration.
  • O Start-DscConfiguration será suspenso se o recurso baseado em classe tiver uma propriedade de seu próprio tipo.Start-DscConfiguration hangs if class-based resource has a property of its own type.
  • O recurso baseado em classe não pode ser usado como um recurso exclusivo.Class-based resource cannot be used as an exclusive resource.

Melhorias de depuração de recursos da DSCDSC resource debugging improvements

No WMF 5.0, o depurador do PowerShell não interrompeu o método de recurso baseado em classe (Get/Set/Test) diretamente.In WMF 5.0, the PowerShell debugger did not stop at the class-based resource method (Get/Set/Test) directly. No WMF 5.1, o depurador interrompe o método de recurso baseado em classe da mesma forma que faz com os métodos de recursos baseados em MOF.In WMF 5.1, the debugger stops at the class-based resource method in the same way as for MOF-based resources methods.

O cliente pull da DSC dá suporte para TLS 1.1 e para TLS 1.2DSC pull client supports TLS 1.1 and TLS 1.2

Anteriormente, o cliente pull da DSC dava suporte apenas para SSL3.0 e TLS1.0 por meio de conexões HTTPS.Previously, the DSC pull client only supported SSL3.0 and TLS1.0 over HTTPS connections. Se fosse forçado a usar protocolos mais seguros, o cliente pull pararia de funcionar.When forced to use more secure protocols, the pull client would stop functioning. No WMF 5.1, o cliente pull da DSC não dá mais suporte a SSL 3.0 e adiciona suporte a protocolos mais seguros TLS 1.1 e TLS 1.2.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 do servidor de pull aprimoradoImproved pull server registration

Nas versões anteriores do WMF, as solicitações simultâneas de registros/relatórios em um servidor de pull da DSC durante o uso do banco de dados ESENT provocavam uma falha de registro e/ou relatório do LCM.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. Nesses casos, os logs de eventos no servidor de pull têm o erro "O nome da instância já está em uso."In such cases, the event logs on the pull server has the error "Instance Name already in use." Isso ocorria porque um padrão incorreto era usado para acessar o banco de dados ESENT em um cenário Multi-Threaded.This was due to an incorrect pattern being used to access the ESENT database in a multi-threaded scenario. No WMF 5.1, esse problema foi corrigido.In WMF 5.1, this issue has been fixed. Os registros ou relatórios simultâneos (que envolvem o banco de dados ESENT) funcionam bem no WMF 5.1.Concurrent registrations or reporting (involving ESENT database) works fine in WMF 5.1. Esse problema é aplicável somente ao banco de dados ESENT e não se aplica ao banco de dados OLEDB.This issue is applicable only to the ESENT database and does not apply to the OLEDB database.

Habilitar o log Circular na instância do banco de dados ESENTEnable Circular log on ESENT database instance

Na versão anterior da DSC-PullServer, os arquivos de log do banco de dados ESENT preenchiam o espaço em disco do pullserver porque a instância do banco de dados estava sendo criada sem log 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. Nesta versão, você tem a opção de controlar o comportamento de log circular da instância usando o web.config do pullserver.In this release, you have the option to control the circular logging behavior of the instance using the web.config of the pullserver. Por padrão, o CircularLogging está definido como VERDADEIRO.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>

Convenção de nomenclatura de configuração parcial de pullPull partial configuration naming convention

Na versão anterior, a convenção de nomenclatura para uma configuração parcial era que o nome do arquivo MOF no servidor de pull/serviço deveria ser compatível com o nome de configuração parcial especificado nas configurações do gerenciador de configuração local que, por sua vez, deve ser compatível com o nome de configuração inserido no arquivo 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.

Confira os instantâneos abaixo:See the snapshots below:

• Definições da configuração local, que determina uma configuração parcial que um nó está autorizado a receber.• Local configuration settings which defines a partial configuration that a node is allowed to receive.

Metaconfiguração de exemplo

• Definição da configuração parcial de exemplo• Sample partial configuration definition

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

• “ConfigurationName” inserido no arquivo MOF gerado.• 'ConfigurationName' embedded in the generated MOF file.

Arquivo mof de exemplo gerado

• FileName no repositório de configuração de pull• FileName in the pull configuration repository

FileName no Repositório de Configuração

O nome do serviço da Automação do Azure gerou arquivos MOF como <ConfigurationName>.<NodeName>.mof.Azure Automation service name generated MOF files as <ConfigurationName>.<NodeName>.mof. Portanto, a configuração abaixo é compilada para PartialOne.localhost.mof.So the configuration below compiles to PartialOne.localhost.mof.

Ela tornou impossível a extração de uma de suas configurações parciais do serviço da Automação do 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

No WMF 5.1, uma configuração parcial no servidor de pull/serviço pode ser nomeada <ConfigurationName>.<NodeName>.mof.In WMF 5.1, a partial configuration in the pull server/service can be named as <ConfigurationName>.<NodeName>.mof. Além disso, se um computador estiver extraindo uma única configuração de um servidor de pull/serviço, então, o arquivo de configuração no repositório de configuração do servidor de pull poderá ter qualquer nome de arquivo.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 flexibilidade de nomenclatura permite que você gerencie seus nós parcialmente pelo serviço da Automação do Azure, no qual algumas configurações do nó chegarão da DSC de Automação do Azure e uma configuração parcial gerenciada localmente.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.

A metaconfiguração abaixo configura um nó para ser gerenciado tanto localmente quanto pelo serviço da Automação do Azure.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

Usando a PsDscRunAsCredential com os recursos de composição da DSCUsing PsDscRunAsCredential with DSC composite resources

Adicionamos um suporte para usar a PsDscRunAsCredential com os recursos de Composição da DSC.We have added support for using PsDscRunAsCredential with DSC Composite resources.

Agora, você pode especificar o valor para a PsDscRunAsCredential ao usar recursos de composição nas configurações.You can now specify a value for PsDscRunAsCredential when using composite resources inside configurations. Quando especificado, todos os recursos serão executados em um recurso de composição como um usuário RunAs.When specified, all resources run inside a composite resource as a RunAs user. Se o recurso de composição chamar outro recurso de composição, todos os seus recursos também serão executados como usuário RunAs.If a composite resource calls another composite resource, all of its resources are also executed as RunAs user. As credenciais RunAs são propagadas para qualquer nível da hierarquia do recurso de composição.RunAs credentials are propagated to any level of the composite resource hierarchy. Se qualquer recurso dentro de um recurso de composição especificar seu próprio valor para a PsDscRunAsCredential, ocorrerá um erro de mesclagem durante a compilação da configuração.If any resource inside a composite resource specifies its own value for PsDscRunAsCredential, a merge error results during configuration compilation.

Este exemplo mostra o uso com o recurso de composição WindowsFeatureSet incluído no 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 

Validações do módulo de DSC e da assinatura de configuraçãoDSC module and configuration signing validations

Na DSC, as configurações e os módulos são distribuídos para computadores gerenciados do servidor de pull.In DSC, configurations and modules are distributed to managed computers from the pull server. Se o servidor de pull estiver comprometido, um invasor possivelmente poderá modificar as configurações e os módulos no servidor de pull e distribuí-los para todos os nós gerenciados, comprometendo todos eles.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.

No WMF 5.1, a DSC dá suporte para a validação de assinaturas digitais no catálogo e nos arquivos de configuração (.MOF).In WMF 5.1, DSC supports validating the digital signatures on catalog and configuration (.MOF) files. Este recurso evita que os nós executem as configurações ou os arquivos de módulo que não são assinados por um signatário confiável ou que foram violados depois de assinados por um signatário confiável.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.

Como assinar a configuração e o móduloHow to sign configuration and module


  • Arquivos de Configuração (.MOFs): o cmdlet Set-AuthenticodeSignature existente do PowerShell é estendido para dar suporte à assinatura de arquivos MOF.Configuration Files (.MOFs): The existing PowerShell cmdlet Set-AuthenticodeSignature is extended to support signing of MOF files.
  • Módulos: a assinatura dos módulos é feita com a assinatura do catálogo do módulo correspondente por meio das seguintes etapas:Modules: Signing of modules is done by signing the corresponding module catalog using the following steps:
    1. Crie um arquivo de catálogo: um arquivo de catálogo contém uma coleção de hashes criptográficos ou impressões digitais.Create a catalog file: A catalog file contains a collection of cryptographic hashes or thumbprints. Cada impressão digital corresponde a um arquivo que está incluído no módulo.Each thumbprint corresponds to a file that is included in the module. O novo cmdlet New-FileCatalog foi adicionado para permitir que os usuários criem um arquivo de catálogo para seu módulo.The new cmdlet New-FileCatalog, has been added to enable users to create a catalog file for their module.
    2. Assine o arquivo de catálogo: use a Set-AuthenticodeSignature para assinar o arquivo de catálogo.Sign the catalog file: Use Set-AuthenticodeSignature to sign the catalog file.
    3. Coloque o arquivo de catálogo dentro da pasta do módulo.Place the catalog file inside the module folder. Por convenção, o arquivo de catálogo do módulo deve ser colocado na pasta do módulo, com o mesmo nome do módulo.By convention, module catalog file should be placed under the module folder with the same name as the module.

Configurações de LocalConfigurationManager para habilitar as validações de assinaturaLocalConfigurationManager settings to enable signing validations

RecepçãoPull

O LocalConfigurationManager de um nó executa a validação da assinatura dos módulos e das configurações com base em suas configurações atuais.The LocalConfigurationManager of a node performs signing validation of modules and configurations based on its current settings. Por padrão, a validação da assinatura está desabilitada.By default, signature validation is disabled. A validação da assinatura pode ser habilitada adicionando o bloco “SignatureValidation” à definição de metaconfiguração do nó, conforme mostrado abaixo: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{
        # By default, LCM uses the default Windows trusted publisher store to validate the certificate chain. If TrustedStorePath property is specified, LCM uses this custom store for retrieving the trusted publishers to validate the content.
        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 

A definição da metaconfiguração acima em um nó habilita a validação da assinatura nas configurações e nos módulos baixados.Setting the above metaconfiguration on a node enables signature validation on downloaded configurations and modules. O Gerenciador de Configurações Local executa as seguintes etapas para verificar as assinaturas digitais.The Local Configuration Manager performs the following steps to verify the digital signatures.

  1. Verifique se a assinatura em um arquivo de configuração (. MOF) é válida.Verify the signature on a configuration file (.MOF) is valid. Ela usa o cmdlet Get-AuthenticodeSignature do PowerShell, que é estendido na versão 5.1 para dar suporte à validação de assinatura do MOF.It uses the PowerShell cmdlet Get-AuthenticodeSignature, which is extended in 5.1 to support MOF signature validation.
  2. Verifique se a autoridade de certificação que autorizou o signatário é confiável.Verify the certificate authority that authorized the signer is trusted.
  3. Baixe as dependências de módulo/recurso da configuração para uma localização temporária.Download module/resource dependencies of the configuration to a temp location.
  4. Verifique se a assinatura do catálogo foi incluída dentro do módulo.Verify the signature of the catalog included inside the module.
    • Encontre um arquivo <moduleName>.cat e verifique sua assinatura usando o cmdlet Get-AuthenticodeSignature.Find a <moduleName>.cat file and verify its signature using the cmdlet Get-AuthenticodeSignature.
    • Verifique se a autoridade de certificação que autenticou o signatário é confiável.Verify the certification authority that authenticated the signer is trusted.
    • Verifique se o conteúdo dos módulos não foi violado usando o novo cmdlet Test-FileCatalog.Verify the content of the modules has not been tampered using the new cmdlet Test-FileCatalog.
  5. Install-Module para $env:ProgramFiles\WindowsPowerShell\Modules\Install-Module to $env:ProgramFiles\WindowsPowerShell\Modules\
  6. Configuração do processoProcess configuration

Observação: a validação da assinatura no catálogo de módulo e na configuração é realizada somente quando a configuração é aplicada ao sistema pela primeira vez ou quando o módulo é baixado e instalado.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. As execuções de consistência não validam a assinatura de Current.mof ou de suas dependências de módulo.Consistency runs do not validate the signature of Current.mof or its module dependencies. Se a verificação tiver falhado em qualquer estágio, por exemplo, se a configuração extraída do servidor de pull não estiver assinada, o processamento da configuração será encerrado com o erro mostrado abaixo e todos os arquivos temporários serão excluídos.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.

Configuração de Saída de Erro de Exemplo

Da mesma forma, a extração de um módulo cujo catálogo não está assinado resulta no seguinte erro:Similarly, pulling a module whose catalog is not signed results in the following error:

Módulo de Saída de Erro de Exemplo

PushPush

Uma configuração entregue com o uso de push pode ser violada em sua origem antes de ser entregue para o nó.A configuration delivered by using push might be tampered with at its source before it delivered to the node. O Gerenciador de Configurações Local executa etapas semelhantes de validação de assinatura para as configurações enviadas por push ou publicadas.The Local Configuration Manager performs similar signature validation steps for pushed or published configuration(s). Veja abaixo um exemplo completo de validação de assinatura para envio por push.Below is a complete example of signature validation for push.

  • Habilite a validação da assinatura no nó.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
  • Crie um arquivo de configuração de exemplo.Create a sample configuration file.
# Sample configuration
Configuration Test
{

    File foo
    {
        DestinationPath =  "$env:TEMP\signingTest.txt"
        Contents = "ABC"
    }
}
Test
  • Tente enviar o arquivo de configuração não assinado por push para o nó.Try pushing the unsigned configuration file in to the node.
Start-DscConfiguration -Path .\Test -Wait -Verbose -Force

ErrorUnsignedMofPushed

  • Assine o arquivo de configuração usando um certificado de assinatura de código.Sign the configuration file using code-signing certificate.

SignMofFile

  • Tente enviar o arquivo MOF assinado por push.Try pushing the signed MOF file.

SignMofFile