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

We hebben de volgende bekende problemen opgelost in WMF 5.1: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 gebaseerde 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 RunAs-referentie wordt gebruikt in DSC-configuratie.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 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.

DSC-resource verbeteringen foutopsporingDSC resource debugging improvements

In WMF 5.0 is de PowerShell-foutopsporing niet gestopt op de resource op basis van klasse-methode (Set-Get/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 bij de methode op basis van een klasse resource op dezelfde manier als voor bronnen op basis van het MOF-methoden.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 ondersteunt TLS 1.1 en TLS 1.2DSC pull client supports TLS 1.1 and TLS 1.2

Voorheen 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, zou de pull-client niet meer werkt.When forced to use more secure protocols, the pull client would stop functioning. In WMF 5.1, de DSC pull-client niet langer biedt ondersteuning voor SSL 3.0 en voegt ondersteuning toe voor de veiliger 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 te rapporteren.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 onjuist 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, is dit probleem opgelost.In WMF 5.1, this issue has been fixed. Werkt probleemloos in WMF 5.1 gelijktijdige registraties of reporting (met betrekking tot ESENT database).Concurrent registrations or reporting (involving ESENT database) works fine in WMF 5.1. Dit probleem is alleen van toepassing op de ESENT-database en niet van toepassing op de OLEDB-database.This issue is applicable only to the ESENT database and does not apply to the OLEDB database.

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

Eariler versie van DSC-PullServer, zijn de schijfruimte van de pullserver becouse die is de database-instantie wordt gemaakt zonder circulair vastleggen invullen van de logboekbestanden van de ESENT-database.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. U hebt de optie om te bepalen het gedrag circulair vastleggen van het exemplaar met behulp van web.config van de pullserver in deze release.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>

Pull-naamconventie gedeeltelijke configuratiePull partial configuration naming convention

In de vorige release de naamconventie voor een gedeeltelijke configuratie is dat het MOF-bestandsnaam in de pull-server/service moet overeenkomen met de configuratienaam van de van gedeeltelijke 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 waarmee een gedeeltelijke configuratie dat is toegestaan voor het ontvangen van een knooppunt zijn gedefinieerd.Local configuration settings which defines a partial configuration that a node is allowed to receive.

Voorbeeld metaconfiguratie

  • 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 gegenereerde mof-bestand

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

Bestandsnaam in de opslagplaats voor configuratie

Naam van de service Azure Automation gegenereerd MOF-bestanden als <ConfigurationName>.<NodeName>.mof.Azure Automation service name generated MOF files as <ConfigurationName>.<NodeName>.mof. De onderstaande configuratie compileert dus naar PartialOne.localhost.mof.So the configuration below compiles to PartialOne.localhost.mof.

Hierdoor was het niet mogelijk in pull een van de configuratie van uw gedeeltelijke van 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 de naam <ConfigurationName>.<NodeName>.mof.In WMF 5.1, a partial configuration in the pull server/service can be named as <ConfigurationName>.<NodeName>.mof. Bovendien, als een machine is binnenhalen van een configuratie voor één uit een pull serverservice vervolgens in het configuratiebestand op de pull-server configuration opslagplaats hebben een willekeurige bestandsnaam.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 flexibiliteit naming kunt u voor het beheren van uw knooppunten gedeeltelijk door Azure Automation-service, waarbij een bepaalde configuratie voor uw knooppunt afkomstig is uit Azure Automation DSC en met 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 metaconfiguratie hieronder ingesteld op een knooppunt als niet-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 gebruik van samengestelde bronnen binnen configuraties.You can now specify a value for PsDscRunAsCredential when using composite resources inside configurations. Als u opgeeft, wordt alle resources binnen een samengestelde bron uitgevoerd als een RunAs-gebruiker.When specified, all resources run inside a composite resource as a RunAs user. Als een samengestelde bron een andere samengestelde bron aanroept, zijn 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 niveau van de samengestelde bron-hiërarchie.RunAs credentials are propagated to any level of the composite resource hierarchy. Als een bron binnen een samengestelde bron wordt een eigen waarde voor PsDscRunAsCredential opgegeven, resulteert een merge-fout tijdens het compileren 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 ziet u informatie over het gebruik met WindowsFeatureSet samengestelde bron 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 validaties ondertekeningDSC module and configuration signing validations

In 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 aangetast, kan mogelijk een aanvaller de modules die zich in de pull-server en de configuraties aanpassen en laat het gedistribueerd naar alle beheerde knooppunten, inbreuk op 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 ondersteunt 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 het 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 de ondertekening van de corresponderende 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. Een catalogusbestand maken: een catalogusbestand bevat een verzameling van cryptografische hashes of vingerafdrukken.Create a catalog file: A catalog file contains a collection of cryptographic hashes or thumbprints. Elke vingerafdruk overeenkomt met een bestand dat is opgenomen in de module.Each thumbprint corresponds to a file that is included in the module. De nieuwe cmdlet nieuw 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 het 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 worden catalogusbestand module onder de modulemap met dezelfde naam als de module geplaatst.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

Pull-Pull

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. Validatie van handtekening is standaard uitgeschakeld.By default, signature validation is disabled. Validatie van handtekening kan worden ingeschakeld door het blok 'SignatureValidation' toe te voegen aan de definitie van de 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

Het instellen van de bovenstaande metaconfiguratie toe 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 lokale 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 ongeldig.Verify the signature on a configuration file (.MOF) is valid. Dit maakt gebruik van de PowerShell-cmdlet Get-AuthenticodeSignature, die wordt uitgebreid in 5.1 ter ondersteuning van de handtekeningvalidatie MOF.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. Module of systeembronnen afhankelijkheden van de configuratie 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.
    • Zoeken naar een <moduleName>.cat bestands- en controleer of de handtekening met 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. Installatie-Module voor $env: ProgramFiles\WindowsPowerShell\Modules\Install-Module to $env:ProgramFiles\WindowsPowerShell\Modules\
  6. ProcesconfiguratieProcess configuration

Opmerking: De handtekeningvalidatie van module-catalogus en -configuratie wordt alleen uitgevoerd wanneer de configuratie wordt toegepast op het systeem voor het eerst 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. De handtekening van Current.mof of de afhankelijkheden van de module wordt niet gevalideerd door consistentiecontrole wordt uitgevoerd.Consistency runs do not validate the signature of Current.mof or its module dependencies. Verificatie is mislukt in elk stadium, bijvoorbeeld als de configuratie die is opgehaald uit de pull-server is niet ondertekend, vervolgens verwerking van de configuratie wordt beëindigd met de fout hieronder wordt weergegeven als 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 waarvan catalogus niet is ondertekend op dezelfde manier resulteert in de volgende fout:Similarly, pulling a module whose catalog is not signed results in the following error:

Voorbeeld uitvoer Foutenmodule

PushPush

Een configuratie met behulp van push geleverd kan op de bron geknoeid voordat deze naar het knooppunt afgeleverd.A configuration delivered by using push might be tampered with at its source before it delivered to the node. De lokale Configuration Manager voert vergelijkbare handtekening Validatiestappen voor configuratie (pushed of gepubliceerd s).The Local Configuration Manager performs similar signature validation steps for pushed or published configuration(s). Hieronder vindt u een compleet voorbeeld van validatie van handtekening voor de push.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
  • Maak een voorbeeldconfiguratiebestand.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 code signing-certificaat.Sign the configuration file using code-signing certificate.

SignMofFile

  • Probeer het ondertekende MOF-bestand worden gepusht.Try pushing the signed MOF file.

SignMofFile