vzor Azure Policy: Nasazení prostředků

Účinek deployIfNotExists umožňuje nasadit šablonu Azure Resource Manager (šablonu ARM) při vytváření nebo aktualizaci prostředku, který nedodržuje předpisy. Tento přístup je možné upřednostňovat při vytváření prostředků pomocí efektu odepření , ale zajistí, aby byly změny provedeny, aby byly kompatibilní.

Ukázková definice zásad

Tato definice zásady používá operátor pole k vyhodnocení type vytvořeného nebo aktualizovaného zdroje. Pokud je tento prostředek Microsoft.Network/virtualNetworks, zásada hledá sledovací proces sítě v umístění nového nebo aktualizovaného prostředku. Pokud odpovídající sledovací proces sítě není umístěný, nasadí se šablona ARM pro vytvoření chybějícího prostředku.

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

Vysvětlení

existenceCondition

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

Blok properties.policyRule.then.details informuje Azure Policy, co má hledat související s vytvořeným nebo aktualizovaným prostředkem v bloku properties.policyRule.if. V tomto příkladu musí sledovací proces sítě ve skupině prostředků networkWatcherRG existovat s polemlocation , které odpovídá umístění nového nebo aktualizovaného prostředku. field() Použití funkce umožňuje existenceCondition přístup k vlastnostem v novém nebo aktualizovaném prostředku, konkrétně vlastnostlocation.

roleDefinitionIds

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

Vlastnost roleDefinitionIdsarray v bloku properties.policyRule.then.details říká definici zásady, která práva spravovaná identita potřebuje k nasazení zahrnuté šablony Resource Manager. Tato vlastnost musí být nastavená tak, aby zahrnovala role, které mají oprávnění potřebná nasazením šablony, ale měla by používat koncept "princip nejnižších oprávnění" a mít jenom potřebné operace a nic dalšího.

Šablona nasazení

Část definice zásad nasazení obsahuje blok vlastností , který definuje tři základní komponenty:

  • mode – Tato vlastnost nastaví režim nasazení šablony.

  • šablona – Tato vlastnost obsahuje samotnou šablonu. V tomto příkladu nastaví parametr šablony umístění umístění nový prostředek sledování sítě.

    "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 – Tato vlastnost definuje parametry, které jsou poskytovány šabloně. Názvy parametrů musí odpovídat tomu, co je definováno v šabloně. V tomto příkladu má parametr název umístění , které se má shodovat. Hodnota umístění znovu použije field() funkci k získání hodnoty vyhodnoceného prostředku, což je virtuální síť v bloku policyRule.if .

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

Další kroky