Aangepaste configuratiebeleidsdefinities voor machines maken

Voordat u begint, is het een goed idee om de overzichtspagina voor machineconfiguratie en de details over de herstelopties van de machineconfiguratie te lezen.

Belangrijk

De configuratie-extensie voor de machine is vereist voor virtuele Azure-machines. Als u de extensie op schaal op alle computers wilt implementeren, wijst u het volgende beleidsinitiatief toe: Deploy prerequisites to enable machine configuration policies on virtual machines

Als u machineconfiguratiepakketten wilt gebruiken die configuraties toepassen, is versie 1.26.24 of hoger van azure VM-gastconfiguratie, of Arc-agent 1.10.0 of hoger vereist.

Aangepaste beleidsdefinities voor computerconfiguratie met behulp van AuditIfNotExists of hebben de DeployIfNotExists ondersteuningsstatus Algemeen beschikbaar (GA).

Gebruik de volgende stappen om uw eigen beleid te maken waarmee naleving wordt gecontroleerd of de status van Azure- of Arc-machines wordt beheerd.

PowerShell 7 en vereiste PowerShell-modules installeren

Stel eerst een ontwerpomgeving voor machineconfiguratie in om de vereiste versie van PowerShell voor uw besturingssysteem en de GuestConfiguration-module te installeren.

Een apparaatconfiguratiepakketartefact maken en publiceren

Als u dat nog niet hebt gedaan, maakt en publiceert u een aangepast machineconfiguratiepakket door de stappen te volgen in Het maken van artefacten voor aangepaste machineconfiguratiepakketten. Valideer vervolgens het pakket in uw ontwikkelomgeving door de stappen te volgen in Het testen van artefacten voor machineconfiguratiepakketten.

Notitie

De voorbeeldcode in dit artikel verwijst naar de $contentUri variabele. Als u dezelfde PowerShell-sessie gebruikt als de eerdere zelfstudies voor het maken en testen van uw pakketartefacten, heeft die variabele mogelijk al de URI voor uw pakket.

Als u de $contentUri variabele niet hebt ingesteld op de URI voor uw pakket in uw PowerShell-sessie, moet u deze instellen. In dit voorbeeld worden de verbindingsreeks van een opslagaccount en de New-AzStorageContext cmdlet gebruikt om een opslagcontext te maken. Vervolgens wordt de opslag-blob voor het gepubliceerde pakket opgehaald en worden de eigenschappen van dat object gebruikt om de inhouds-URI op te halen.

$connectionString = '<storage-account-connection-string>'
$context = New-AzStorageContext -ConnectionString $connectionString
$getParams = @{
    Context   = $context
    Container = '<container-name>'
    Blob      = '<published-package-file-name>'
}
$blob = Get-AzStorageBlob @getParams
$contentUri = $blob.ICloudBlob.Uri.AbsoluteUri

Beleidsvereisten voor machineconfiguratie

De sectie metagegevens van de beleidsdefinitie moet twee eigenschappen bevatten voor de machineconfiguratieservice om het inrichten en rapporteren van gastconfiguratietoewijzingen te automatiseren. De categorie-eigenschap moet worden ingesteld op Guest Configuration en een sectie met de naam guestConfiguration moet informatie bevatten over de toewijzing van de machineconfiguratie. Met de New-GuestConfigurationPolicy cmdlet wordt deze tekst automatisch gemaakt.

In het volgende voorbeeld ziet u de sectie met metagegevens die automatisch wordt gemaakt door New-GuestConfigurationPolicy.

"metadata": {
    "category": "Guest Configuration",
    "guestConfiguration": {
        "name": "test",
        "version": "1.0.0",
        "contentType": "Custom",
        "contentUri": "CUSTOM-URI-HERE",
        "contentHash": "CUSTOM-HASH-VALUE-HERE",
        "configurationParameter": {}
    }
}

Als het definitie-effect is ingesteld opDeployIfNotExists, moet de sectie implementatiedetails over een machineconfiguratietoewijzing bevatten. Met de New-GuestConfigurationPolicy cmdlet wordt deze tekst automatisch gemaakt.

Een Azure Policy-definitie maken

Zodra een aangepast beleidspakket voor de machineconfiguratie is gemaakt en geüpload, maakt u de definitie van het configuratiebeleid voor de machine. De New-GuestConfigurationPolicy cmdlet gebruikt een aangepast beleidspakket en maakt een beleidsdefinitie.

De Parameter PolicyId van New-GuestConfigurationPolicy vereist een unieke tekenreeks. Er is een GUID (Globally Unique Identifier) vereist. Genereer voor nieuwe definities een nieuwe GUID met behulp van de New-GUID cmdlet. Wanneer u updates aan de definitie aanbrengt, gebruikt u dezelfde unieke tekenreeks voor PolicyId om ervoor te zorgen dat de juiste definitie wordt bijgewerkt.

Parameters van de New-GuestConfigurationPolicy cmdlet:

  • PolicyId: een GUID.
  • ContentUri: Openbare HTTP(s) URI van het inhoudspakket voor machineconfiguratie.
  • DisplayName: Weergavenaam van beleid.
  • Beschrijving: Beleidsbeschrijving.
  • Parameter: Beleidsparameters die zijn opgegeven in een hash-tabel.
  • PolicyVersion: beleidsversie.
  • Pad: doelpad waarin beleidsdefinities worden gemaakt.
  • Platform: Doelplatform (Windows/Linux) voor configuratiebeleid en inhoudspakket voor computers.
  • Modus: (hoofdlettergevoelig: ApplyAndMonitor, ApplyAndAutoCorrect, Audit) kiezen of het beleid de configuratie moet controleren of implementeren. De standaardwaarde is Audit.
  • Tag voegt een of meer tagfilters toe aan de beleidsdefinitie
  • Met categorie wordt het veld metagegevens van de categorie ingesteld in de beleidsdefinitie

Zie de pagina Herstelopties configureren voor computerconfiguratie voor meer informatie over de parameter Modus.

Maak een beleidsdefinitie die controleert met behulp van een aangepast configuratiepakket, in een opgegeven pad:

$PolicyConfig      = @{
  PolicyId      = '_My GUID_'
  ContentUri    = $contentUri
  DisplayName   = 'My audit policy'
  Description   = 'My audit policy'
  Path          = './policies/auditIfNotExists.json'
  Platform      = 'Windows'
  PolicyVersion = 1.0.0
}

New-GuestConfigurationPolicy @PolicyConfig

Maak een beleidsdefinitie waarmee een configuratie wordt geïmplementeerd met behulp van een aangepast configuratiepakket, in een opgegeven pad:

$PolicyConfig2      = @{
  PolicyId      = '_My GUID_'
  ContentUri    = $contentUri
  DisplayName   = 'My deployment policy'
  Description   = 'My deployment policy'
  Path          = './policies/deployIfNotExists.json'
  Platform      = 'Windows'
  PolicyVersion = 1.0.0
  Mode          = 'ApplyAndAutoCorrect'
}

New-GuestConfigurationPolicy @PolicyConfig2

De uitvoer van de cmdlet retourneert een object met de weergavenaam van de definitie en het pad van de beleidsbestanden. Definitie-JSON-bestanden die auditbeleidsdefinities maken, hebben de naam auditIfNotExists.json en bestanden die beleidsdefinities maken om configuraties toe te passen, hebben de naam deployIfNotExists.json.

Configuratiebeleid voor computers filteren met behulp van tags

De beleidsdefinities die zijn gemaakt door cmdlets in de Module GuestConfiguration kunnen eventueel een filter voor tags bevatten. De tagparameter ondersteunt New-GuestConfigurationPolicy een matrix van hash-tabellen die afzonderlijke tagvermeldingen bevatten. De tags worden toegevoegd aan de if-sectie van de beleidsdefinitie en kunnen niet worden gewijzigd door een beleidstoewijzing.

Een voorbeeldfragment van een beleidsdefinitie die filtert op tags volgt.

"if": {
  "allOf" : [
    {
      "allOf": [
        {
          "field": "tags.Owner",
          "equals": "BusinessUnit"
        },
        {
          "field": "tags.Role",
          "equals": "Web"
        }
      ]
    },
    {
      // Original machine configuration content
    }
  ]
}

Parameters gebruiken in aangepaste configuratiebeleidsdefinities voor machines

Machineconfiguratie ondersteunt het overschrijven van eigenschappen van een DSC-configuratie tijdens runtime. Deze functie betekent dat de waarden in het MOF-bestand in het pakket niet als statisch hoeven te worden beschouwd. De onderdrukkingswaarden worden geleverd via Azure Policy en wijzigen niet hoe de DSC-configuraties worden gemaakt of gecompileerd.

Machineconfiguratie ondersteunt de volgende waardetypen voor parameters:

  • String
  • Booleaanse waarde
  • Dubbel
  • Float

De cmdlets New-GuestConfigurationPolicy en Get-GuestConfigurationPackageComplianceStatus bevatten een parameter met de naam Parameter. Deze parameter gebruikt een hash-tabeldefinitie, inclusief alle details over elke parameter en maakt de vereiste secties van elk bestand dat wordt gebruikt voor de Azure Policy-definitie.

In het volgende voorbeeld wordt een beleidsdefinitie gemaakt om een service te controleren, waarbij de gebruiker een keuze maakt uit een lijst op het moment van beleidstoewijzing.

# This DSC resource definition...
Service 'UserSelectedNameExample' {
    Name   = 'ParameterValue'
    Ensure = 'Present'
    State  = 'Running'
}

# ...can be converted to a hash table:
$PolicyParameterInfo     = @(
  @{
    # Policy parameter name (mandatory)
    Name                 = 'ServiceName'
    # Policy parameter display name (mandatory)
    DisplayName          = 'windows service name.'
    # Policy parameter description (optional)
    Description          = 'Name of the windows service to be audited.'
    # DSC configuration resource type (mandatory)
    ResourceType         = 'Service'
    # DSC configuration resource id (mandatory)
    ResourceId           = 'UserSelectedNameExample'
    # DSC configuration resource property name (mandatory)
    ResourcePropertyName = 'Name'
    # Policy parameter default value (optional)
    DefaultValue         = 'winrm'
    # Policy parameter allowed values (optional)
    AllowedValues        = @('BDESVC','TermService','wuauserv','winrm')
  })

# ...and then passed into the `New-GuestConfigurationPolicy` cmdlet
$PolicyParam = @{
  PolicyId      = 'My GUID'
  ContentUri    = $contentUri
  DisplayName   = 'Audit Windows Service.'
  Description   = "Audit if a Windows Service isn't enabled on Windows machine."
  Path          = '.\policies\auditIfNotExists.json'
  Parameter     = $PolicyParameterInfo
  PolicyVersion = 1.0.0
}

New-GuestConfigurationPolicy @PolicyParam

De Azure Policy-definitie publiceren

Ten slotte kunt u de beleidsdefinities publiceren met behulp van de New-AzPolicyDefinition cmdlet. Met de onderstaande opdrachten publiceert u het configuratiebeleid voor uw computer naar het beleidscentrum.

Als u de New-AzPolicyDefinition opdracht wilt uitvoeren, hebt u toegang nodig om beleidsdefinities te maken in Azure. De specifieke autorisatievereisten worden beschreven op de overzichtspagina van Azure Policy . De aanbevolen ingebouwde rol is Resource Policy Contributor.

New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\auditIfNotExists.json'

Als het beleid een implementatie is als er geen beleid (DINE) bestaat, gebruikt u deze opdracht:

New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\deployIfNotExists.json'

Bij het maken van de beleidsdefinitie in Azure is de laatste stap het toewijzen van de definitie. Zie hoe u de definitie toewijst met Portal, Azure CLI en Azure PowerShell.

Levenscyclus van beleid

Als u een update voor de beleidsdefinitie wilt vrijgeven, moet u de wijziging aanbrengen voor zowel het gastconfiguratiepakket als de details van de Azure Policy-definitie.

Notitie

De version eigenschap van de toewijzing van de machineconfiguratie heeft alleen gevolgen voor pakketten die worden gehost door Microsoft. De aanbevolen procedure voor het versiebeheer van aangepaste inhoud is om de versie op te nemen in de bestandsnaam.

Geef bij het uitvoeren New-GuestConfigurationPackageeerst een naam op voor het pakket dat het uniek maakt in eerdere versies. U kunt een versienummer opnemen in de naam, zoals PackageName_1.0.0. Het nummer in dit voorbeeld wordt alleen gebruikt om het pakket uniek te maken, niet om op te geven dat het pakket moet worden beschouwd als nieuwer of ouder dan andere pakketten.

Werk ten tweede de parameters bij die worden gebruikt met de New-GuestConfigurationPolicy cmdlet volgens elk van de volgende uitleg.

  • Versie: Wanneer u de New-GuestConfigurationPolicy cmdlet uitvoert, moet u een versienummer opgeven dat groter is dan wat momenteel is gepubliceerd.
  • contentUri: Wanneer u de New-GuestConfigurationPolicy cmdlet uitvoert, moet u een URI opgeven op de locatie van het pakket. Als u een pakketversie in de bestandsnaam opgeeft, zorgt u ervoor dat de waarde van deze eigenschap in elke release wordt gewijzigd.
  • contentHash: De New-GuestConfigurationPolicy cmdlet werkt deze eigenschap automatisch bij. Het is een hashwaarde van het pakket dat is gemaakt door New-GuestConfigurationPackage. De eigenschap moet juist zijn voor het .zip bestand dat u publiceert. Als alleen de eigenschap contentUri wordt bijgewerkt, weigert de extensie het inhoudspakket.

De eenvoudigste manier om een bijgewerkt pakket vrij te geven, is door het proces dat in dit artikel wordt beschreven, te herhalen en een bijgewerkt versienummer op te geven. Dit proces garandeert dat alle eigenschappen correct zijn bijgewerkt.

Volgende stappen