Wzorzec usługi 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 usługą Microsoft.Network/virtualNetworks, zasady szukają 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 usługi 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 usługę Azure Policy o tym, 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 polem location
równym lokalizacji nowego lub zaktualizowanego zasobu. field()
Użycie funkcji umożliwia istnienieCondition 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ść tablicy roleDefinitionIds w bloku properties.policyRule.then.details informuje definicję zasad, która ma uprawnienia tożsamości zarządzanej do wdrożenia dołączonego szablonu usługi 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 , który definiuje 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
- Przejrzyj inne wzorce i wbudowane definicje.
- Przejrzyj temat Struktura definicji zasad Azure Policy.
- Przejrzyj wyjaśnienie działania zasad.