Så här skapar du definitioner för konfigurationsprinciper för anpassade datorer

Innan du börjar är det en bra idé att läsa översiktssidan för datorkonfiguration och information om maskinkonfigurationens reparationsalternativ.

Viktigt!

Datorkonfigurationstillägget krävs för virtuella Azure-datorer. Om du vill distribuera tillägget i stor skala på alla datorer tilldelar du följande principinitiativ: Deploy prerequisites to enable machine configuration policies on virtual machines

Om du vill använda datorkonfigurationspaket som tillämpar konfigurationer krävs gästkonfigurationstillägget för virtuella Azure-datorer version 1.26.24 eller senare, eller Arc-agenten 1.10.0 eller senare.

Konfigurationsprincipdefinitioner för anpassade datorer med antingen AuditIfNotExists eller DeployIfNotExists har stödstatus för allmänt tillgängliga (GA).

Använd följande steg för att skapa egna principer som granskar efterlevnad eller hanterar tillståndet för Azure- eller Arc-aktiverade datorer.

Installera PowerShell 7 och nödvändiga PowerShell-moduler

Konfigurera först en datorkonfigurationsredigeringsmiljö för att installera den version av PowerShell som krävs för ditt operativsystem och modulen GuestConfiguration.

Skapa och publicera en artefakt för datorkonfigurationspaket

Om du inte redan har gjort det skapar och publicerar du ett anpassat datorkonfigurationspaket genom att följa stegen i Skapa artefakter för anpassade datorkonfigurationspaket. Verifiera sedan paketet i utvecklingsmiljön genom att följa stegen i Testa maskinkonfigurationspaketartefakter.

Kommentar

Exempelkoden i den här artikeln refererar till variabeln $contentUri . Om du använder samma PowerShell-session som de tidigare självstudierna för att skapa och testa paketartefakter kan variabeln redan ha URI:n till paketet.

Om du inte har variabeln $contentUri inställd på URI:n för ditt paket i PowerShell-sessionen måste du ange den. I det här exemplet används ett lagringskontos anslutningssträng och cmdleten New-AzStorageContext för att skapa en lagringskontext. Sedan hämtar den lagringsbloben för det publicerade paketet och använder objektets egenskaper för att hämta innehålls-URI:n.

$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

Principkrav för datorkonfiguration

Avsnittet metadata för principdefinition måste innehålla två egenskaper för datorkonfigurationstjänsten för att automatisera etablering och rapportering av gästkonfigurationstilldelningar. Kategoriegenskapen måste anges till Guest Configuration och ett avsnitt med namnet guestConfiguration måste innehålla information om datorkonfigurationstilldelningen. Cmdleten New-GuestConfigurationPolicy skapar den här texten automatiskt.

I följande exempel visas metadataavsnittet som skapas automatiskt av 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": {}
    }
}

Om definitionseffekten är inställd på DeployIfNotExistsmåste avsnittet innehålla distributionsinformation om en datorkonfigurationstilldelning. Cmdleten New-GuestConfigurationPolicy skapar den här texten automatiskt.

Skapa en Azure Policy-definition

När ett anpassat princippaket för datorkonfiguration har skapats och laddats upp skapar du definitionen av datorns konfigurationsprincip. Cmdleten New-GuestConfigurationPolicy tar ett anpassat princippaket och skapar en principdefinition.

Parametern New-GuestConfigurationPolicy PolicyId för kräver en unik sträng. En globalt unik identifierare (GUID) krävs. För nya definitioner genererar du ett nytt GUID med hjälp av cmdleten New-GUID . När du gör uppdateringar av definitionen använder du samma unika sträng för PolicyId för att säkerställa att rätt definition uppdateras.

Cmdletens New-GuestConfigurationPolicy parametrar:

  • PolicyId: Ett GUID.
  • ContentUri: Offentliga HTTP-URI:er för innehållspaketet för datorkonfiguration.
  • DisplayName: Principvisningsnamn.
  • Beskrivning: Principbeskrivning.
  • Parameter: Principparametrar som anges i en hash-tabell.
  • PolicyVersion: Principversion.
  • Sökväg: Målsökväg där principdefinitioner skapas.
  • Plattform: Målplattform (Windows/Linux) för datorkonfigurationsprincip och innehållspaket.
  • Läge: (skiftlägeskänslig: ApplyAndMonitor, ApplyAndAutoCorrect, Audit) väljer om principen ska granska eller distribuera konfigurationen. Standardvärdet är Audit.
  • Tagg lägger till ett eller flera taggfilter i principdefinitionen
  • Kategori anger kategorimetadatafältet i principdefinitionen

Mer information om parametern Läge finns på sidan Så här konfigurerar du reparationsalternativ för datorkonfiguration.

Skapa en principdefinition som granskar med hjälp av ett anpassat konfigurationspaket i en angiven sökväg:

$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

Skapa en principdefinition som distribuerar en konfiguration med ett anpassat konfigurationspaket i en angiven sökväg:

$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

Cmdlet-utdata returnerar ett objekt som innehåller definitionsvisningsnamnet och sökvägen för principfilerna. Definitions-JSON-filer som skapar granskningsprincipdefinitioner har namnet auditIfNotExists.json och filerna som skapar principdefinitioner för att tillämpa konfigurationer har namnet deployIfNotExists.json.

Filtrera datorkonfigurationsprinciper med hjälp av taggar

Principdefinitionerna som skapas av cmdletar i modulen GuestConfiguration kan också innehålla ett filter för taggar. Taggparametern för New-GuestConfigurationPolicy stöder en matris med hash-tabeller som innehåller enskilda taggposter. Taggarna läggs till i if-avsnittet i principdefinitionen och kan inte ändras av en principtilldelning.

Ett exempelfragment av en principdefinition som filtrerar efter taggar följer.

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

Använda parametrar i definitioner för konfigurationsprinciper för anpassade datorer

Datorkonfiguration stöder åsidosättande egenskaper för en DSC-konfiguration vid körning. Den här funktionen innebär att värdena i MOF-filen i paketet inte behöver betraktas som statiska. Åsidosättningsvärdena tillhandahålls via Azure Policy och ändrar inte hur DSC-konfigurationerna skapas eller kompileras.

Datorkonfiguration stöder följande värdetyper för parametrar:

  • String
  • Booleskt
  • Dubbel
  • Flyttal

Cmdletarna New-GuestConfigurationPolicy och Get-GuestConfigurationPackageComplianceStatus innehåller en parameter med namnet Parameter. Den här parametern tar en hashtabelldefinition med all information om varje parameter och skapar de nödvändiga avsnitten i varje fil som används för Azure Policy-definitionen.

I följande exempel skapas en principdefinition för granskning av en tjänst, där användaren väljer från en lista vid tidpunkten för principtilldelningen.

# 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

Publicera Azure Policy-definitionen

Slutligen kan du publicera principdefinitionerna med hjälp av cmdleten New-AzPolicyDefinition . Kommandona nedan publicerar din datorkonfigurationsprincip i principcentret.

Om du vill köra New-AzPolicyDefinition kommandot behöver du åtkomst för att skapa principdefinitioner i Azure. De specifika auktoriseringskraven dokumenteras på sidan Översikt över Azure Policy. Den rekommenderade inbyggda rollen är Resource Policy Contributor.

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

Om principen är en distribuerad om inte befintlig princip (DINE) använder du det här kommandot:

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

När principdefinitionen har skapats i Azure är det sista steget att tilldela definitionen. Se hur du tilldelar definitionen med Portal, Azure CLI och Azure PowerShell.

Policylivscykel

Om du vill släppa en uppdatering av principdefinitionen gör du ändringen för både gästkonfigurationspaketet och definitionsinformationen för Azure Policy.

Kommentar

Egenskapen version för datorkonfigurationstilldelningen påverkar endast paket som hanteras av Microsoft. Det bästa sättet att versionshantera anpassat innehåll är att inkludera versionen i filnamnet.

När du kör New-GuestConfigurationPackageanger du först ett namn för paketet som gör det unikt från tidigare versioner. Du kan inkludera ett versionsnummer i namnet, till exempel PackageName_1.0.0. Talet i det här exemplet används bara för att göra paketet unikt, inte för att ange att paketet ska betraktas som nyare eller äldre än andra paket.

För det andra uppdaterar du de parametrar som används med cmdleten New-GuestConfigurationPolicy enligt var och en av följande förklaringar.

  • Version: När du kör cmdleten New-GuestConfigurationPolicy måste du ange ett versionsnummer som är större än det som publiceras för närvarande.
  • contentUri: När du kör cmdleten New-GuestConfigurationPolicy måste du ange en URI till paketets plats. Om du inkluderar en paketversion i filnamnet ser du till att värdet för den här egenskapen ändras i varje version.
  • contentHash: Cmdleten New-GuestConfigurationPolicy uppdaterar den här egenskapen automatiskt. Det är ett hash-värde för paketet som skapats av New-GuestConfigurationPackage. Egenskapen måste vara korrekt för den .zip fil som du publicerar. Om endast egenskapen contentUri uppdateras avvisar tillägget innehållspaketet.

Det enklaste sättet att släppa ett uppdaterat paket är att upprepa processen som beskrivs i den här artikeln och ange ett uppdaterat versionsnummer. Den processen garanterar att alla egenskaper har uppdaterats korrekt.

Nästa steg