Azure Policy mönster: distribuera resurser
Effekten deployIfNotExists gör det möjligt att distribuera en Azure Resource Manager-mall (ARM-mall) när du skapar eller uppdaterar en resurs som inte är kompatibel. Den här metoden kan vara att föredra att använda neka-effekten eftersom den låter resurser fortsätta att skapas, men säkerställer att ändringarna görs för att göra dem kompatibla.
Exempel på principdefinition
Den här principdefinitionen använder fältoperatorn för att utvärdera resursen type
som skapats eller uppdaterats. När resursen är ett Microsoft.Network/virtualNetworks söker principen efter en nätverksbevakare på platsen för den nya eller uppdaterade resursen. Om en matchande nätverksbevakare inte finns distribueras ARM-mallen för att skapa resursen som saknas.
Anteckning
Den här principen kräver att du har en resursgrupp med namnet NetworkWatcherRG i din prenumeration. Azure skapar resursgruppen NetworkWatcherRG när du aktiverar Network Watcher i en region.
{
"properties": {
"displayName": "Deploy network watcher when virtual networks are created",
"mode": "Indexed",
"description": "This policy creates a network watcher resource in regions with virtual networks. You need to ensure existence of a resource group named networkWatcherRG, which will be used to deploy network watcher instances.",
"metadata": {
"category": "Network"
},
"parameters": {},
"policyRule": {
"if": {
"field": "type",
"equals": "Microsoft.Network/virtualNetworks"
},
"then": {
"effect": "DeployIfNotExists",
"details": {
"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
"field": "location",
"equals": "[field('location')]"
},
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
}
},
"resources": [{
"apiVersion": "2016-09-01",
"type": "Microsoft.Network/networkWatchers",
"name": "[concat('networkWacher_', parameters('location'))]",
"location": "[parameters('location')]"
}]
},
"parameters": {
"location": {
"value": "[field('location')]"
}
}
}
}
}
}
}
}
}
Förklaring
existenceCondition
"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
"field": "location",
"equals": "[field('location')]"
},
Blocket properties.policyRule.then.details talar om för Azure Policy vad som ska sökas efter relaterade till den skapade eller uppdaterade resursen i blocket properties.policyRule.if. I det här exemplet måste en nätverksbevakare i resursgruppen networkWatcherRG finnas med ett fältlocation
som är lika med platsen för den nya eller uppdaterade resursen. field()
Med funktionen kan existenceCondition komma åt egenskaper för den nya eller uppdaterade resursen, särskilt egenskapen location
.
roleDefinitionIds
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
Matrisegenskapen roleDefinitionIds i blocket properties.policyRule.then.details talar om för principdefinitionen vilka rättigheter den hanterade identiteten behöver för att distribuera den inkluderade Resource Manager mallen. Den här egenskapen måste anges så att den innehåller roller som har de behörigheter som krävs av malldistributionen, men bör använda begreppet "principen om minsta behörighet" och bara ha de åtgärder som behövs och inget mer.
Distributionsmall
Distributionsdelen av principdefinitionen har ett egenskapsblock som definierar de tre kärnkomponenterna:
mode – Den här egenskapen anger mallens distributionsläge .
template – Den här egenskapen innehåller själva mallen. I det här exemplet anger parametern för platsmallen platsen för den nya nätverksbevakarresursen.
"template": { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string" } }, "resources": [{ "apiVersion": "2016-09-01", "type": "Microsoft.Network/networkWatchers", "name": "[concat('networkWacher_', parameters('location'))]", "location": "[parameters('location')]" }] },
parameters – Den här egenskapen definierar parametrar som tillhandahålls till mallen. Parameternamnen måste matcha det som definieras i mallen. I det här exemplet heter parametern plats som ska matchas. Värdet för plats använder
field()
funktionen igen för att hämta värdet för den utvärderade resursen, vilket är det virtuella nätverket i policyRule.if-blocket ."parameters": { "location": { "value": "[field('location')]" } }
Nästa steg
- Granska andra mönster och inbyggda definitioner.
- Granska Azure Policy-definitionsstrukturen.
- Granska Förstå policy-effekter.