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å DeployIfNotExists
må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. Ange inte den här parametern som sökväg till en lokal kopia av paketet.
- 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 ärAudit
. - Tagg: Lägger till ett eller flera taggfilter i principdefinitionen.
- Kategori: Anger fältet kategorimetadata i principdefinitionen.
-
LocalContentPath: Sökvägen till den lokala kopian
.zip
av paketfilen Machine Configuration. Den här parametern krävs om du använder en användartilldelad hanterad identitet för att ge åtkomst till en Azure Storage-blob. -
ManagedIdentityResourceId: Den
resourceId
användartilldelade hanterade identiteten som har läsbehörighet till Azure Storage-bloben som innehåller.zip
paketfilen Machine Configuration. Den här parametern krävs om du använder en användartilldelad hanterad identitet för att ge åtkomst till en Azure Storage-blob. - ExcludeArcMachines: Anger att principdefinitionen ska undanta Arc-datorer. Den här parametern krävs om du använder en användartilldelad hanterad identitet för att ge åtkomst till en Azure Storage-blob.
Viktigt!
Till skillnad från virtuella Azure-datorer stöder Arc-anslutna datorer för närvarande inte användartilldelade hanterade identiteter. Därför -ExcludeArcMachines
krävs flaggan för att säkerställa att dessa datorer undantas från principdefinitionen. För att den virtuella Azure-datorn ska kunna ladda ned det tilldelade paketet och tillämpa principen måste gästkonfigurationsagenten vara version 1.29.82.0
eller högre för Windows och version 1.26.76.0
eller högre för Linux.
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 framtvingar 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
Skapa en principdefinition som tillämpar ett anpassat konfigurationspaket med hjälp av en användartilldelad hanterad identitet:
$PolicyConfig3 = @{
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'
LocalContentPath = "C:\Local\Path\To\Package" # Required parameter for managed identity
ManagedIdentityResourceId = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}" # Required parameter for managed identity
}
New-GuestConfigurationPolicy @PolicyConfig3 -ExcludeArcMachines
Kommentar
Du kan hämta resourceId för en hanterad identitet med hjälp av PowerShell-cmdleten Get-AzUserAssignedIdentity
.
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-GuestConfigurationPackage
anger 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 avNew-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
- Tilldela din anpassade principdefinition med hjälp av Azure-portalen.
- Lär dig hur du visar efterlevnadsinformation för tilldelningar av datorkonfigurationsprinciper .