Dela via


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 ser till 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 letar 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 den resurs som saknas.

Kommentar

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 properties.policyRule.if-blocket . I det här exemplet måste en nätverksbevakare i resursgruppens nätverkWatcherRG finnas med fältet location 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 egenskapenlocation.

roleDefinitionIds

"roleDefinitionIds": [
    "/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],

Egenskapen roleDefinitionIds-matrisen i blocket properties.policyRule.then.details anger 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 som ska använda begreppet "principen om minsta behörighet" och bara ha nödvändiga åtgärder 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 platsmallsparametern 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 platsen använder field() funktionen igen för att hämta värdet för den utvärderade resursen, som är det virtuella nätverket i policyRule.if-blocket .

    "parameters": {
        "location": {
            "value": "[field('location')]"
        }
    }
    

Nästa steg