Azure Policy minta: erőforrások üzembe helyezése

A deployIfNotExists effektus lehetővé teszi egy Azure Resource Manager-sablon (ARM-sablon) üzembe helyezését egy nem megfelelő erőforrás létrehozásakor vagy frissítésekor. Ez a megközelítés előnyben részesíthető a megtagadási effektussal, mivel lehetővé teszi az erőforrások létrehozását, de biztosítja, hogy a módosítások megfelelőek legyenek.

Mintaszabályzat-definíció

Ez a szabályzatdefiníció a mező operátorral értékeli ki a type létrehozott vagy frissített erőforrást. Ha az erőforrás Microsoft.Network/virtualNetworks, a szabályzat egy network watchert keres az új vagy frissített erőforrás helyén. Ha nem található egyező network watcher, az ARM-sablon üzembe lesz helyezve a hiányzó erőforrás létrehozásához.

Megjegyzés

Ehhez a szabályzathoz egy NetworkWatcherRG nevű erőforráscsoportra van szükség az előfizetésben. Az Azure létrehozza a NetworkWatcherRG erőforráscsoportot, amikor engedélyezi Network Watcher egy régióban.

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

Magyarázat

existenceCondition

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

A properties.policyRule.then.details blokk közli Azure Policy, hogy mit kell keresni a properties.policyRule.if blokkban létrehozott vagy frissített erőforráshoz kapcsolódóan. Ebben a példában a networkWatcherRG erőforráscsoport egyik hálózati figyelőjének olyan mezővellocation kell rendelkeznie, amely megegyezik az új vagy frissített erőforrás helyével. A függvény használatával a field()existenceCondition hozzáférhet az új vagy frissített erőforrás tulajdonságaihoz, különösen a location tulajdonsághoz.

roleDefinitionIds

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

A properties.policyRule.then.details blokk roleDefinitionIdstömbtulajdonsága jelzi a szabályzatdefiníciónak, hogy a felügyelt identitásnak mely jogosultságokkal kell üzembe helyeznie a belefoglalt Resource Manager sablont. Ennek a tulajdonságnak olyan szerepköröket kell tartalmaznia, amelyek rendelkeznek a sablon üzembe helyezéséhez szükséges engedélyekkel, de a "minimális jogosultság elve" fogalmát kell használniuk, és csak a szükséges műveletekkel és semmi többvel kell rendelkezniük.

Üzembehelyezési sablon

A szabályzatdefiníció üzembehelyezési része rendelkezik egy tulajdonságblokktal , amely a három alapvető összetevőt határozza meg:

  • mode – Ez a tulajdonság beállítja a sablon üzembehelyezési módját .

  • template – Ez a tulajdonság magában foglalja magát a sablont. Ebben a példában a helysablon paramétere beállítja az új Network Watcher-erőforrás helyé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 – Ez a tulajdonság a sablonhoz megadott paramétereket határozza meg. A paraméterneveknek meg kell egyeznie a sablonban definiált névvel. Ebben a példában a paraméter neve location to match . A hely értéke ismét a field() függvényt használja a kiértékelt erőforrás értékének lekéréséhez, amely a policyRule.if blokkban található virtuális hálózat.

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

Következő lépések