Definitionsstruktur för Azure Policy-initiativ
Med initiativ kan du gruppera flera relaterade principdefinitioner för att förenkla tilldelningar och hantering eftersom du arbetar med en grupp som ett enda objekt. Du kan till exempel gruppera relaterade taggningsprincipdefinitioner i ett enda initiativ. I stället för att tilldela varje princip individuellt använder du initiativet.
Du använder JSON för att skapa en principinitiativdefinition. Principinitiativdefinitionen innehåller element för:
- visningsnamn
- beskrivning
- metadata
- version
- parametrar
- principdefinitioner
- principgrupper (den här egenskapen är en del av funktionen Regelefterlevnad (förhandsversion)
I följande exempel visas hur du skapar ett initiativ för att hantera två taggar: costCenter
och productName
. Den använder två inbyggda principer för att tillämpa standardtaggens värde.
{
"properties": {
"displayName": "Billing Tags Policy",
"policyType": "Custom",
"description": "Specify cost Center tag and product name tag",
"version" : "1.0.0",
"metadata": {
"version": "1.0.0",
"category": "Tags"
},
"parameters": {
"costCenterValue": {
"type": "String",
"metadata": {
"description": "required value for Cost Center tag"
},
"defaultValue": "DefaultCostCenter"
},
"productNameValue": {
"type": "String",
"metadata": {
"description": "required value for product Name tag"
},
"defaultValue": "DefaultProduct"
}
},
"policyDefinitions": [{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"definitionVersion": "1.*.*"
"parameters": {
"tagName": {
"value": "costCenter"
},
"tagValue": {
"value": "[parameters('costCenterValue')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
"parameters": {
"tagName": {
"value": "costCenter"
},
"tagValue": {
"value": "[parameters('costCenterValue')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"parameters": {
"tagName": {
"value": "productName"
},
"tagValue": {
"value": "[parameters('productNameValue')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
"parameters": {
"tagName": {
"value": "productName"
},
"tagValue": {
"value": "[parameters('productNameValue')]"
}
}
}
]
}
}
Inbyggda Azure Policy-mönster finns i Azure Policy-exempel.
Metadata
Den valfria metadata
egenskapen lagrar information om principinitiativdefinitionen.
Kunder kan definiera alla egenskaper och värden som är användbara för organisationen i metadata
. Det finns dock några vanliga egenskaper som används av Azure Policy och i inbyggda.
Vanliga metadataegenskaper
version
(sträng): Spårar information om versionen av innehållet i en principinitiativdefinition. För inbyggda data följer den här metadataversionen versionsegenskapen för den inbyggda versionen. Vi rekommenderar att du använder versionsegenskapen över den här metadataversionen.category
(sträng): Avgör under vilken kategori i Azure Portal principdefinitionen visas.Kommentar
För ett initiativ för regelefterlevnad måste vara regelefterlevnad
category
.preview
(booleskt): Sant eller falskt flagga för om principinitiativdefinitionen är förhandsversion.deprecated
(booleskt): Sant eller falskt flagga för om principinitiativdefinitionen har markerats som inaktuell.
Version (förhandsversion)
Inbyggda principinitiativ kan vara värd för flera versioner med samma definitionID
. Om inget versionsnummer anges visar alla funktioner den senaste versionen av definitionen. Om du vill se en specifik version av en inbyggd version måste den anges i API, SDK eller användargränssnitt. Information om hur du refererar till en specifik version av en definition i en tilldelning finns i definitionsversion inom tilldelning
Azure Policy-tjänsten använder version
egenskaperna , preview
och deprecated
för att förmedla tillstånd och ändringsnivå till en inbyggd principdefinition eller ett initiativ. Formatet version
är: {Major}.{Minor}.{Patch}
. När en principdefinition är i förhandsversionstillstånd läggs förhandsgranskningen av suffixet till i version
egenskapen och behandlas som ett booleskt värde. När en principdefinition är inaktuell registreras utfasningen som ett booleskt värde i definitionens metadata med hjälp av "deprecated": "true"
.
- Huvudversion (exempel: 2.0.0): Introducera icke-bakåtkompatibla ändringar, till exempel större regellogikändringar, ta bort parametrar och lägga till en tillämpningseffekt som standard.
- Delversion (exempel: 2.1.0): introducera ändringar som mindre regellogikändringar, lägga till nya tillåtna parametervärden, ändra till rolldefinitionId, lägga till eller ta bort definitioner inom ett initiativ.
- Korrigeringsversion (exempel: 2.1.4): Introducera sträng- eller metadataändringar och säkerhetsscenarier för brytglas (sällsynta).
Inbyggda initiativ är versionshanterade och specifika versioner av inbyggda principdefinitioner kan också refereras till i inbyggda eller anpassade initiativ. Mer information finns i referensdefinition och versioner.
När du skapar ett initiativ via portalen i förhandsversionen kan du inte ange versioner för inbyggda principdefinitionsreferenser. Alla inbyggda principreferenser i anpassade initiativ som skapats via portalen är i stället standardvärdet för den senaste versionen av principdefinitionen.
Mer information om inbyggda Azure Policy-versioner finns i Inbyggd versionshantering. Mer information om vad det innebär för en princip att bli inaktuell eller i förhandsversion finns i Förhandsversion och inaktuella principer.
Parametrar
Parametrar underlättar hanteringen av principer genom att minska antalet principdefinitioner. Tänk på parametrar som fälten i ett formulär - name
, address
, city
, state
. Dessa parametrar förblir alltid desamma, men deras värden ändras baserat på att individen fyller i formuläret.
Parametrar fungerar på samma sätt när du skapar principinitiativ. Genom att inkludera parametrar i en principinitiativdefinition kan du återanvända den parametern i de inkluderade principerna.
Kommentar
När ett initiativ har tilldelats kan parametrar på initiativnivå inte ändras. På grund av detta är rekommendationen att ange ett defaultValue när du definierar parametern.
Parameteregenskaper
En parameter har följande egenskaper som används i principinitiativdefinitionen:
name
: Namnet på parametern. Används av distributionsfunktionenparameters
i principregeln. Mer information finns i använda ett parametervärde.type
: Avgör om parametern är en sträng, matris, objekt, boolesk, heltal, flyttal eller datetime.metadata
: Definierar underegenskaper som främst används av Azure Portal för att visa användarvänlig information:description
: (Valfritt) Förklaringen av vad parametern används till. Kan användas för att ge exempel på godtagbara värden.displayName
: Det egna namnet som visas i portalen för parametern.strongType
: (Valfritt) Används när du tilldelar principdefinitionen via portalen. Innehåller en sammanhangsmedveten lista. Mer information finns i strongType.
defaultValue
: (Valfritt) Anger värdet för parametern i en tilldelning om inget värde anges.allowedValues
: (Valfritt) Tillhandahåller en matris med värden som parametern accepterar under tilldelningen.
Du kan till exempel definiera en principinitiativdefinition för att begränsa resursernas platser i de olika inkluderade principdefinitionerna. En parameter för den principinitiativdefinitionen kan vara allowedLocations. Parametern är sedan tillgänglig för varje inkluderad principdefinition och definieras under tilldelningen av principinitiativet.
"parameters": {
"init_allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [ "westus2" ],
"allowedValues": [
"eastus2",
"westus2",
"westus"
]
}
}
Skicka ett parametervärde till en principdefinition
Du deklarerar vilka initiativparametrar som du skickar till vilka inkluderade principdefinitioner i matrisen policyDefinitions för initiativdefinitionen. Parameternamnet kan vara detsamma, men om du använder olika namn i initiativen än i principdefinitionerna förenklas kodens läsbarhet.
Till exempel kan den init_allowedLocations initiativparameter som definierats tidigare skickas till flera inkluderade principdefinitioner och deras parametrar, sql_locations och vm_locations, så här:
"policyDefinitions": [
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/0ec8fc28-d5b7-4603-8fec-39044f00a92b",
"policyDefinitionReferenceId": "allowedLocationsSQL",
"parameters": {
"sql_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/aa09bd0f-aa5f-4343-b6ab-a33a6a6304f3",
"policyDefinitionReferenceId": "allowedLocationsVMs",
"parameters": {
"vm_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
}
]
Det här exemplet refererar till parametern init_allowedLocations som visades i parameteregenskaper.
strongType
I egenskapen metadata
kan du använda strongType för att tillhandahålla en flervalslista med alternativ i Azure Portal. strongType kan vara en resurstyp som stöds eller ett tillåtet värde. Om du vill avgöra om en resurstyp är giltig för strongType använder du Get-AzResourceProvider.
Vissa resurstyper som inte returneras av Get-AzResourceProvider stöds. Dessa resurstyper är:
Microsoft.RecoveryServices/vaults/backupPolicies
Tillåtna värden för typen icke-resurs för strongType är:
location
resourceTypes
storageSkus
vmSKUs
existingResourceGroups
Principdefinitioner
Delen policyDefinitions
av initiativdefinitionen är en matris där befintliga principdefinitioner ingår i initiativet. Som nämnts i Skicka ett parametervärde till en principdefinition är den här egenskapen där initiativparametrar skickas till principdefinitionen.
Egenskaper för principdefinition
Varje matriselement som representerar en principdefinition har följande egenskaper:
policyDefinitionId
(sträng): ID:t för den anpassade eller inbyggda principdefinition som ska inkluderas.policyDefinitionReferenceId
(sträng): Ett kort namn för den inkluderade principdefinitionen.parameters
: (Valfritt) Namn/värde-par för att skicka en initiativparameter till den inkluderade principdefinitionen som en egenskap i den principdefinitionen. Mer information finns i Parametrar.definitionVersion
: (Valfritt) Den version av den inbyggda definitionen som ska refereras till. Om ingen anges refererar den till den senaste huvudversionen vid tilldelningstiden och autoingest eventuella mindre uppdateringar. Mer information finns i definitionsversiongroupNames
(matris med strängar): (Valfritt) Gruppen som principdefinitionen är medlem i. Mer information finns i Principgrupper.
Här är ett exempel på policyDefinitions
som har två inkluderade principdefinitioner som var och en har samma initiativparameter:
"policyDefinitions": [
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/0ec8fc28-d5b7-4603-8fec-39044f00a92b",
"policyDefinitionReferenceId": "allowedLocationsSQL",
"definitionVersion": "1.2.*"
"parameters": {
"sql_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/aa09bd0f-aa5f-4343-b6ab-a33a6a6304f3",
"policyDefinitionReferenceId": "allowedLocationsVMs",
"parameters": {
"vm_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
}
]
Principdefinitionsgrupper
Principdefinitioner i en initiativdefinition kan grupperas och kategoriseras. Azure Policys funktion för regelefterlevnad (förhandsversion) använder den här egenskapen för att gruppera definitioner i kontroller och efterlevnadsdomäner. Den här informationen definieras i matrisegenskapen policyDefinitionGroups
. Mer information om gruppering finns i ett policyMetadata-objekt som skapats av Microsoft. Mer information finns i metadataobjekt.
Parametrar för principdefinitionsgrupper
Varje matriselement i policyDefinitionGroups
måste ha båda följande egenskaper:
name
(sträng) [krävs]: Gruppens korta namn. I Regelefterlevnad kontrollerar du. Värdet för den här egenskapen används avgroupNames
ipolicyDefinitions
.category
(sträng): Hierarkin som gruppen tillhör. I Regelefterlevnad kontrollerar du kontrollens efterlevnadsdomän .displayName
(sträng): Det egna namnet på gruppen eller kontrollen. Används av portalen.description
(sträng): En beskrivning av vad gruppen eller kontrollen omfattar.additionalMetadataId
(sträng): Platsen för objektet policyMetadata som innehåller ytterligare information om kontroll- och efterlevnadsdomänen.Kommentar
Kunder kan peka på ett befintligt policyMetadata-objekt . Dessa objekt är dock skrivskyddade och skapas endast av Microsoft.
Ett exempel på policyDefinitionGroups
egenskapen från den inbyggda NIST-initiativdefinitionen ser ut så här:
"policyDefinitionGroups": [
{
"name": "NIST_SP_800-53_R4_AC-1",
"additionalMetadataId": "/providers/Microsoft.PolicyInsights/policyMetadata/NIST_SP_800-53_R4_AC-1"
}
]
Metadata-objekt
Inbyggda inbyggda regelefterlevnad som skapats av Microsoft har ytterligare information om varje kontroll. Den här informationen är:
- Visas i Azure Portal på översikten över en kontroll på ett initiativ för regelefterlevnad.
- Tillgänglig via REST API.
Microsoft.PolicyInsights
Se resursprovidern och åtgärdsgruppen policyMetadata. - Tillgänglig via Azure CLI. Se kommandot az policy metadata .
Viktigt!
Metadataobjekt för regelefterlevnad är skrivskyddade och kan inte skapas av kunder.
Metadata för en principgruppering har följande information i properties
noden:
metadataId
: Kontroll-ID som gruppering relaterar till.category
(krävs): Den efterlevnadsdomän som kontrollen tillhör.title
(krävs): Det egna namnet på kontroll-ID:t.owner
(krävs): Identifierar vem som har ansvar för kontrollen i Azure: Kund, Microsoft, Delad.description
: Ytterligare information om kontrollen.requirements
: Information om ansvaret för genomförandet av kontrollen.additionalContentUrl
: En länk till mer information om kontrollen. Den här egenskapen är vanligtvis en länk till avsnittet i dokumentationen som täcker den här kontrollen i efterlevnadsstandarden.
Nedan visas ett exempel på policyMetadata-objektet . Det här exemplets metadata tillhör KONTROLLEN NIST SP 800-53 R4 AC-1 .
{
"properties": {
"metadataId": "NIST SP 800-53 R4 AC-1",
"category": "Access Control",
"title": "Access Control Policy and Procedures",
"owner": "Shared",
"description": "**The organization:** \na. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: \n1. An access control policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and \n2. Procedures to facilitate the implementation of the access control policy and associated access controls; and \n
\nb. Reviews and updates the current: \n1. Access control policy [Assignment: organization-defined frequency]; and \n2. Access control procedures [Assignment: organization-defined frequency].",
"requirements": "**a.** The customer is responsible for developing, documenting, and disseminating access control policies and procedures. The customer access control policies and procedures address access to all customer-deployed resources and customer system access (e.g., access to customer-deployed virtual machines, access to customer-built applications). \n**b.** The customer is responsible for reviewing and updating access control policies and procedures in accordance with FedRAMP requirements.",
"additionalContentUrl": "https://nvd.nist.gov/800-53/Rev4/control/AC-1"
},
"id": "/providers/Microsoft.PolicyInsights/policyMetadata/NIST_SP_800-53_R4_AC-1",
"name": "NIST_SP_800-53_R4_AC-1",
"type": "Microsoft.PolicyInsights/policyMetadata"
}
Nästa steg
- Se definitionsstrukturen
- Granska exempel i Azure Policy-exempel.
- Granska Förstå policy-effekter.
- Förstå hur du programmatiskt skapar principer.
- Lär dig hur du hämtar efterlevnadsdata.
- Lär dig hur du åtgärdar icke-kompatibla resurser.
- Granska vad en hanteringsgrupp är med Organisera dina resurser med Azure-hanteringsgrupper.