wzorzec Azure Policy: wdrażanie zasobów

Efekt deployIfNotExists umożliwia wdrożenie szablonu usługi Azure Resource Manager (szablonu usługi ARM) podczas tworzenia lub aktualizowania zasobu, który nie jest zgodny. Takie podejście może być preferowane do używania efektu odmowy , ponieważ umożliwia tworzenie zasobów, ale gwarantuje, że zmiany zostaną wprowadzone w celu zapewnienia ich zgodności.

Przykładowa definicja zasad

Ta definicja zasad używa operatora pola do oceny type zasobu utworzonego lub zaktualizowanego. Gdy ten zasób jest zasobem Microsoft.Network/virtualNetworks, zasady wyszukują obserwatora sieciowego w lokalizacji nowego lub zaktualizowanego zasobu. Jeśli pasujący obserwator sieci nie znajduje się, szablon usługi ARM zostanie wdrożony w celu utworzenia brakującego zasobu.

Uwaga

Te zasady wymagają grupy zasobów o nazwie NetworkWatcherRG w subskrypcji. Platforma Azure tworzy grupę zasobów NetworkWatcherRG po włączeniu Network Watcher w regionie.

{
    "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')]"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Wyjaśnienie

existenceCondition

"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
    "field": "location",
    "equals": "[field('location')]"
},

Blok properties.policyRule.then.details informuje Azure Policy, czego należy szukać w odniesieniu do utworzonego lub zaktualizowanego zasobu w bloku properties.policyRule.if. W tym przykładzie usługa Network Watcher w grupie zasobów networkWatcherRG musi istnieć z polemlocation równym lokalizacji nowego lub zaktualizowanego zasobu. field() Użycie funkcji umożliwia właściwościowi existenceCondition uzyskiwanie dostępu do właściwości nowego lub zaktualizowanego location zasobu, w szczególności właściwości .

roleDefinitionIds

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

Właściwość tablicyroleDefinitionIds w bloku properties.policyRule.then.details informuje definicję zasad, która ma uprawnienia tożsamości zarządzanej do wdrożenia dołączonego szablonu Resource Manager. Ta właściwość musi być ustawiona tak, aby zawierała role, które mają uprawnienia wymagane przez wdrożenie szablonu, ale należy użyć koncepcji "zasady najniższych uprawnień" i mieć tylko wymagane operacje i nic więcej.

Szablon wdrożenia

Część wdrożenia definicji zasad ma blok właściwości definiujący trzy podstawowe składniki:

  • mode — ta właściwość ustawia tryb wdrażania szablonu.

  • template — ta właściwość zawiera sam szablon. W tym przykładzie parametr szablonu lokalizacji ustawia lokalizację nowego zasobu usługi Network Watcher.

    "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 — ta właściwość definiuje parametry dostarczane do szablonu. Nazwy parametrów muszą być zgodne z definicją w szablonie. W tym przykładzie parametr ma nazwę location to match. Wartość lokalizacji ponownie używa field() funkcji, aby uzyskać wartość ocenianego zasobu, który jest siecią wirtualną w bloku policyRule.if .

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

Następne kroki