Azure Policy-patroon: resources implementeren
Met het effect deployIfNotExists kunt u een ARM-sjabloon (Azure Resource Manager) implementeren wanneer u een resource maakt of bijwerkt die niet compatibel is. U kunt de voorkeur geven aan deze methode, boven het gebruik van het effect weigeren, omdat er nog steeds resources worden gemaakt, maar de wijzigingen in deze resources altijd compatibel zijn.
Voorbeeld van beleidsdefinitie
Deze beleidsdefinitie maakt gebruik van de operator veld om de type
van de gemaakte of bijgewerkte resource te evalueren. Als deze resource een Microsoft.Network/virtualNetworks is, zoekt het beleid naar een network watcher op de locatie van de nieuwe of bijgewerkte resource. Als er geen overeenkomende network watcher is gevonden, wordt de ARM-sjabloon geïmplementeerd om de ontbrekende resource te maken.
Notitie
Dit beleid vereist dat u een resourcegroep hebt met de naam NetworkWatcherRG in uw abonnement. Azure maakt de NetworkWatcherRG-resourcegroep wanneer u Network Watcher inschakelt in een regio.
{
"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')]"
}
}
}
}
}
}
}
}
}
Uitleg
existenceCondition
"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
"field": "location",
"equals": "[field('location')]"
},
Het blok properties.policyRule.then.details geeft aan waar met Azure Policy naar moet worden gezocht, gerelateerd aan de gemaakte of bijgewerkte resource in het blok properties.policyRule.if. In dit voorbeeld moet een network watcher bestaan in de resourcegroep networkWatcherRG, waarbij veld location
gelijk is aan de locatie van de nieuwe of bijgewerkte resource. Met de functie field()
kan existenceCondition toegang krijgen tot eigenschappen van de nieuwe of bijgewerkte resource, met name de eigenschap location
.
roleDefinitionIds
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
De matrixeigenschap roleDefinitionIds in het blok properties.policyRule.then.details geeft aan de beleidsdefinitie door welke rechten de beheerde identiteit nodig heeft om de opgenomen Resource Manager-sjabloon te implementeren. Deze eigenschap moet zijn ingesteld om rollen te omvatten die machtigingen hebben die nodig zijn voor de sjabloonimplementatie, maar moet gebruikmaken van het concept ‘principe van minste machtigingen’, en mag alleen de benodigde bewerkingen hebben en niets meer.
Implementatiesjabloon
Het implementatiegedeelte van de beleidsdefinitie heeft een blok eigenschappen waarmee drie kernonderdelen worden gedefinieerd:
modus: met deze eigenschap wordt de implementatiemodus van de sjabloon ingesteld.
sjabloon: deze eigenschap bevat de sjabloon zelf. In dit voorbeeld wordt met de sjabloonparameter locatie de locatie van de nieuwe network watcher-resource ingesteld.
"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: deze eigenschap definieert parameters die worden opgegeven voor de sjabloon. De parameternamen moeten overeenkomen met de namen die zijn gedefinieerd voor sjabloon. In dit voorbeeld heet de parameter locatie zodat deze overeenkomt. De waarde van locatie maakt opnieuw gebruik van de functie
field()
om de waarde van de geëvalueerde resource op te halen, wat het virtuele netwerk in het blok policyRule.if is."parameters": { "location": { "value": "[field('location')]" } }
Volgende stappen
- Bekijk andere patronen en ingebouwde definities.
- Lees over de structuur van Azure Policy-definities.
- Lees Informatie over de effecten van het beleid.