Verbeteringen in Desired State Configuration (DSC) in WMF 5.1Improvements in Desired State Configuration (DSC) in WMF 5.1

DSC-klasse resource verbeteringenDSC class resource improvements

In WMF 5.1, hebben we de volgende bekende problemen opgelost:In WMF 5.1, we have fixed the following known issues:

  • Get-DscConfiguration mogelijk lege waarden (null) of fouten als resultaat als een type complex/hash-tabel wordt geretourneerd door de functie Get() van een klasse op basis van DSC-resource.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 retourneert fout als de RunAs-referentie in DSC-configuratie wordt gebruikt.Get-DscConfiguration returns error if RunAs credential is used in DSC configuration.
  • Op basis van een klasse resource kan niet worden gebruikt in een samengestelde configuratie.Class-based resource cannot be used in a composite configuration.
  • Start-DscConfiguration loopt vast als bron op basis van een klasse een eigenschap van een eigen type heeft.Start-DscConfiguration hangs if class-based resource has a property of its own type.
  • Op basis van een klasse resource kan niet worden gebruikt als een exclusieve resource.Class-based resource cannot be used as an exclusive resource.

Verbeteringen in Foutopsporing voor DSC-resourceDSC resource debugging improvements

In WMF 5.0, is de PowerShell-foutopsporing niet gestopt op de resource op basis van een klasse, methode (Get/Set/Test) rechtstreeks.In WMF 5.0, the PowerShell debugger did not stop at the class-based resource method (Get/Set/Test) directly. In WMF 5.1 stopt het foutopsporingsprogramma op dezelfde manier als voor de resources op basis van MOF-methoden op de resource op basis van een klasse-methode.In WMF 5.1, the debugger stops at the class-based resource method in the same way as for MOF-based resources methods.

DSC-pull-client biedt ondersteuning voor TLS 1.1 en TLS 1.2DSC pull client supports TLS 1.1 and TLS 1.2

Voorheen was ondersteund de DSC-pull-client alleen SSL3.0 en TLS1.0 via HTTPS-verbindingen.Previously, the DSC pull client only supported SSL3.0 and TLS1.0 over HTTPS connections. Wanneer geforceerde veiliger protocollen gebruiken, dan werkt de pull-client niet.When forced to use more secure protocols, the pull client would stop functioning. In WMF 5.1, de DSC pull-client niet langer ondersteuning biedt voor SSL 3.0 en voegt ondersteuning toe voor de beter beveiligde TLS 1.1 en TLS 1.2-protocollen.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.

Verbeterde pull-server registrerenImproved pull server registration

In eerdere versies van WMF zou gelijktijdige registraties/reporting aanvragen voor een DSC-pull-server tijdens het gebruik van de database ESENT leiden tot LCM niet te registreren en/of rapport.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. In dergelijke gevallen de gebeurtenislogboeken op de pull-server heeft de fout 'Exemplaarnaam al in gebruik'.In such cases, the event logs on the pull server has the error "Instance Name already in use." Dit is vanwege een onjuiste patroon wordt gebruikt voor toegang tot de ESENT-database in een scenario met meerdere threads.This was due to an incorrect pattern being used to access the ESENT database in a multi-threaded scenario. In WMF 5.1, heeft dit probleem is opgelost.In WMF 5.1, this issue has been fixed. Gelijktijdige registraties of reporting (met inschakeling van ESENT-database) werkt prima in WMF 5.1.Concurrent registrations or reporting (involving ESENT database) works fine in WMF 5.1. Dit probleem geldt alleen voor de database ESENT en geldt niet voor de OLE DB-database.This issue is applicable only to the ESENT database and does not apply to the OLEDB database.

Permanente logboekbestand op ESENT-database-exemplaar inschakelenEnable Circular log on ESENT database instance

Eariler versie van DSC-PullServer, zijn de logboekbestanden van de ESENT-database de schijfruimte van de pullserver becouse die de database-instantie werd gemaakt zonder circulair vastleggen terechtkomen.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. In deze release hebt u de optie voor het beheren van het gedrag circulair vastleggen van het exemplaar met behulp van het bestand web.config van de pullserver.In this release, you have the option to control the circular logging behavior of the instance using the web.config of the pullserver. CircularLogging is standaard ingesteld op 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>

De naamconventie gedeeltelijke configuratie ophalenPull partial configuration naming convention

In de vorige versie, de naamconventie voor een gedeeltelijke configuratie is dat de naam van de MOF-bestand in de pull-server/service moet overeenkomen met de naam van de gedeeltelijke configuratie opgegeven in de lokale configuration manager-instellingen die op zijn beurt moeten overeenkomen met de naam van de configuratie is ingesloten in het MOF-bestand.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.

Zie de onderstaande momentopnamen:See the snapshots below:

  • Lokale configuratie-instellingen die u definieert een gedeeltelijke configuratie dat is toegestaan voor het ontvangen van een knooppunt.Local configuration settings which defines a partial configuration that a node is allowed to receive.

Voorbeeld metaconfiguration

  • De definitie van de voorbeeld-gedeeltelijke configuratieSample partial configuration definition
Configuration PartialOne
{
    Node('localhost')
    {
        File test
        {
            DestinationPath = "$env:TEMP\partialconfigexample.txt"
            Contents = 'Partial Config Example'
        }
    }
}
PartialOne
  • 'ConfigurationName' ingesloten in het gegenereerde MOF-bestand.'ConfigurationName' embedded in the generated MOF file.

Voorbeeld van gegenereerde mof-bestand

  • Bestandsnaam in de opslagplaats van de pull-configuratieFileName in the pull configuration repository

Bestandsnaam in de opslagplaats van configuratie

Azure Automation-servicenaam gegenereerd MOF-bestanden als <ConfigurationName>.<NodeName>.mof.Azure Automation service name generated MOF files as <ConfigurationName>.<NodeName>.mof. Dus de onderstaande configuratie worden gecompileerd naar PartialOne.localhost.mof.So the configuration below compiles to PartialOne.localhost.mof.

Dit werd het onmogelijk voor pull een van uw gedeeltelijke configuratie in Azure Automation-service.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

In WMF 5.1, een gedeeltelijke configuratie in de pull-server/service kan worden met de naam als <ConfigurationName>.<NodeName>.mof.In WMF 5.1, a partial configuration in the pull server/service can be named as <ConfigurationName>.<NodeName>.mof. Als een virtuele machine is een eenmalige configuratie van een pull binnenhalen kunt serverservice vervolgens het configuratiebestand op de opslagplaats van de pull-server-configuratie bovendien een bestandsnaam hebben.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. Deze naamgevingsconventie flexibiliteit kunt u uw knooppunten gedeeltelijk beheren met Azure Automation-service, waar een configuratie voor het knooppunt is binnenkort in Azure Automation DSC en waarbij een gedeeltelijke configuratie die u lokaal beheren.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.

De metaconfiguration hieronder ingesteld op een knooppunt om te worden beheerd zowel lokaal als door Azure Automation-service.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

Met behulp van PsDscRunAsCredential met samengestelde DSC-resourcesUsing PsDscRunAsCredential with DSC composite resources

Ondersteuning voor het gebruik van toegevoegd PsDscRunAsCredential met DSC samengestelde resources.We have added support for using PsDscRunAsCredential with DSC Composite resources.

U kunt nu een waarde opgeven voor PsDscRunAsCredential bij het gebruik van samengestelde resources binnen configuraties.You can now specify a value for PsDscRunAsCredential when using composite resources inside configurations. Wanneer is opgegeven, wordt alle resources binnen een samengestelde resource uitgevoerd als een RunAs-gebruiker.When specified, all resources run inside a composite resource as a RunAs user. Als een samengestelde resource aanroept die een andere samengestelde resource, worden alle bijbehorende resources ook uitgevoerd als RunAs-gebruiker.If a composite resource calls another composite resource, all of its resources are also executed as RunAs user. Run as-referenties worden doorgegeven aan een willekeurig niveau in de hiërarchie samengestelde resource.RunAs credentials are propagated to any level of the composite resource hierarchy. Als een resource binnen een samengestelde resource een eigen waarde voor PsDscRunAsCredential bevat, resulteert een merge-fout tijdens de compilatie van de configuratie.If any resource inside a composite resource specifies its own value for PsDscRunAsCredential, a merge error results during configuration compilation.

Dit voorbeeld laat zien voor gebruik met WindowsFeatureSet samengestelde resource opgenomen in de module 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

DSC-module en configuratie van validaties ondertekenenDSC module and configuration signing validations

DSC, worden configuraties en -modules gedistribueerd naar beheerde computers van de pull-server.In DSC, configurations and modules are distributed to managed computers from the pull server. Als de pull-server is geknoeid, kan mogelijk een aanvaller wijzigen van de configuraties en -modules op de pull-server en dat er mee worden gedistribueerd naar alle beheerde knooppunten, verlies van al deze.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.

In WMF 5.1, DSC biedt ondersteuning voor de digitale handtekeningen van catalogus en de configuratie valideren (. MOF)-bestanden.In WMF 5.1, DSC supports validating the digital signatures on catalog and configuration (.MOF) files. Deze functie wordt voorkomen dat knooppunten configuraties of module bestanden die niet zijn ondertekend door een vertrouwde ondertekenaar of waarmee is geknoeid nadat ze zijn ondertekend door vertrouwde ondertekenaar wordt uitgevoerd.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.

Het ondertekenen van de configuratie en -moduleHow to sign configuration and module


  • Configuratiebestanden (. MOF-bestanden): de bestaande PowerShell-cmdlet Set AuthenticodeSignature wordt uitgebreid met ondersteuning voor ondertekening van de MOF-bestanden.Configuration Files (.MOFs): The existing PowerShell cmdlet Set-AuthenticodeSignature is extended to support signing of MOF files.
  • Modules: Ondertekening van modules wordt uitgevoerd door het ondertekenen van de bijbehorende module-catalogus met behulp van de volgende stappen uit:Modules: Signing of modules is done by signing the corresponding module catalog using the following steps:
    1. Maken van een catalogusbestand: een catalogusbestand bevat een verzameling van cryptografische hashes of de vingerafdrukken.Create a catalog file: A catalog file contains a collection of cryptographic hashes or thumbprints. Elke vingerafdruk komt overeen met een bestand dat is opgenomen in de module.Each thumbprint corresponds to a file that is included in the module. De nieuwe cmdlet New-FileCatalog, zodat gebruikers kunnen maken van een catalogusbestand voor de module is toegevoegd.The new cmdlet New-FileCatalog, has been added to enable users to create a catalog file for their module.
    2. Meld u aan de catalogusbestand: Gebruik Set AuthenticodeSignature om de catalogusbestand te ondertekenen.Sign the catalog file: Use Set-AuthenticodeSignature to sign the catalog file.
    3. Plaats het catalogusbestand in de modulemap.Place the catalog file inside the module folder. Volgens de conventies wordt moet module catalogusbestand worden geplaatst in de modulemap met dezelfde naam als de module.By convention, module catalog file should be placed under the module folder with the same name as the module.

Instellingen voor LocalConfigurationManager ondertekenen validaties inschakelenLocalConfigurationManager settings to enable signing validations

PullPull

De LocalConfigurationManager van een knooppunt voert ondertekenen validatie van modules en configuraties op basis van de huidige instellingen.The LocalConfigurationManager of a node performs signing validation of modules and configurations based on its current settings. Handtekeningvalidatie is standaard uitgeschakeld.By default, signature validation is disabled. Handtekeningvalidatie kan worden ingeschakeld door het blok 'SignatureValidation' toe te voegen aan de definitie meta-configuratie van het knooppunt zoals hieronder: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

De bovenstaande metaconfiguration instellen op een knooppunt, kunt handtekeningvalidatie op gedownloade configuraties en -modules.Setting the above metaconfiguration on a node enables signature validation on downloaded configurations and modules. De Local Configuration Manager voert de volgende stappen uit om te controleren of de digitale handtekeningen.The Local Configuration Manager performs the following steps to verify the digital signatures.

  1. Controleer of de handtekening van een configuratiebestand (. MOF) is geldig.Verify the signature on a configuration file (.MOF) is valid. Het maakt gebruik van de PowerShell-cmdlet Get-AuthenticodeSignature, die in 5.1 ter ondersteuning van MOF handtekeningvalidatie is uitgebreid.It uses the PowerShell cmdlet Get-AuthenticodeSignature, which is extended in 5.1 to support MOF signature validation.
  2. Controleer of de certificeringsinstantie die de ondertekenaar gemachtigd wordt vertrouwd.Verify the certificate authority that authorized the signer is trusted.
  3. Afhankelijkheden van de configuratie van de module/resource naar een tijdelijke locatie downloaden.Download module/resource dependencies of the configuration to a temp location.
  4. Controleer of de handtekening van de catalogus die is opgenomen in de module.Verify the signature of the catalog included inside the module.
    • Zoek een <moduleName>.cat bestands- en controleer of de handtekening met behulp van de cmdlet Get-AuthenticodeSignature.Find a <moduleName>.cat file and verify its signature using the cmdlet Get-AuthenticodeSignature.
    • Controleer of de certificeringsinstantie (CA) die de ondertekenaar geverifieerd wordt vertrouwd.Verify the certification authority that authenticated the signer is trusted.
    • Controleer of de inhoud van de modules niet is geknoeid met de nieuwe cmdlet Test FileCatalog.Verify the content of the modules has not been tampered using the new cmdlet Test-FileCatalog.
  5. Install-Module voor $env: ProgramFiles\WindowsPowerShell\Modules\Install-Module to $env:ProgramFiles\WindowsPowerShell\Modules\
  6. Procesconfiguratie vanProcess configuration

Opmerking: Handtekeningvalidatie van module-catalogus en de configuratie wordt alleen uitgevoerd wanneer de configuratie wordt toegepast op het systeem voor de eerste keer of wanneer de module wordt gedownload en geïnstalleerd.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. Consistentiecontrole wordt uitgevoerd, wordt de handtekening van Current.mof of de module-afhankelijkheden niet gevalideerd.Consistency runs do not validate the signature of Current.mof or its module dependencies. Als verificatie is mislukt tijdens elke fase, bijvoorbeeld, als de configuratie die is opgehaald uit de pull-server is niet ondertekend, klikt u vervolgens verwerking van de configuratie wordt beëindigd met de fout die hieronder wordt weergegeven en alle tijdelijke bestanden worden verwijderd.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.

Uitvoer van de voorbeeldconfiguratie-fout

Binnenhalen van een module met-catalogus niet is ondertekend op dezelfde manier, resulteert dit in de volgende fout:Similarly, pulling a module whose catalog is not signed results in the following error:

Uitvoer van de voorbeeldmodule-fout

PushPush

Een configuratie die is geleverd met behulp van push kan worden geknoeid bij de bron voordat deze naar het knooppunt geleverd.A configuration delivered by using push might be tampered with at its source before it delivered to the node. De Local Configuration Manager voert gelijksoortige stappen van de handtekening validatie voor gepushte of gepubliceerd configuratie (s).The Local Configuration Manager performs similar signature validation steps for pushed or published configuration(s). Hieronder volgt een compleet voorbeeld van validatie van de handtekening voor pushmeldingen.Below is a complete example of signature validation for push.

  • Handtekeningvalidatie op het knooppunt inschakelen.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
  • Een voorbeeld-configuratiebestand maken.Create a sample configuration file.
# Sample configuration
Configuration Test
{

    File foo
    {
        DestinationPath =  "$env:TEMP\signingTest.txt"
        Contents = "ABC"
    }
}
Test
  • Probeer de niet-ondertekende configuratiebestand pushen naar het knooppunt.Try pushing the unsigned configuration file in to the node.
Start-DscConfiguration -Path .\Test -Wait -Verbose -Force

ErrorUnsignedMofPushed

  • Meld u aan het configuratiebestand met behulp van certificaat voor ondertekening van programmacode.Sign the configuration file using code-signing certificate.

SignMofFile

  • Probeer het pushen van de ondertekende MOF-bestand.Try pushing the signed MOF file.

SignMofFile