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