Azure-beleidspatroon: resources implementerenAzure Policy pattern: deploy resources

Met het effect deployIfNotExists u een Azure Resource Manager-sjabloon implementeren bij het maken of bijwerken van een resource die niet voldoet.The deployIfNotExists effect makes it possible to deploy an Azure Resource Manager template when creating or updating a resource that isn't compliant. Deze benadering kan de voorkeur krijgen boven het gebruik van het weigeringseffect, omdat resources hierdoor kunnen worden gemaakt, maar zorgt ervoor dat de wijzigingen worden aangebracht om ze compliant te maken.This approach can be preferred to using the deny effect as it lets resources continue to be created, but ensures the changes are made to make them compliant.

VoorbeeldbeleidsdefinitieSample policy definition

Met deze beleidsdefinitie wordt de type veldoperator gebruikt om de resource te evalueren die is gemaakt of bijgewerkt.This policy definition uses the field operator to evaluate the type of resource created or updated. Wanneer die bron een _Microsoft.Network/virtualNetworks_is, zoekt het beleid naar een netwerkwatcher in de locatie van de nieuwe of bijgewerkte bron.When that resource is a Microsoft.Network/virtualNetworks, the policy looks for a network watcher in the location of the new or updated resource. Als een overeenkomende netwerkwatcher zich niet bevindt, wordt de sjabloon Resourcebeheer geĆÆmplementeerd om de ontbrekende bron te maken.If a matching network watcher isn't located, the Resource Manager template is deployed to create the missing resource.

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

UitlegExplanation

bestaanVoorwaardeexistenceCondition

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

Het blok properties.policyRule.then.details vertelt Azure Policy waar u naar moet zoeken met betrekking tot de gemaakte of bijgewerkte bron in de eigenschappen.policyRule.if block.The properties.policyRule.then.details block tells Azure Policy what to look for related to the created or updated resource in the properties.policyRule.if block. In dit voorbeeld moet een netwerkwatcher in de resourcegroep networkWatcherRG bestaan met een veld location dat gelijk is aan de locatie van de nieuwe of bijgewerkte bron.In this example, a network watcher in the resource group networkWatcherRG must exist with field location equal to the location of the new or updated resource. Met field() behulp van de functie kan het bestaanVoorwaarde om location eigenschappen toegang te krijgen op de nieuwe of bijgewerkte bron, met name de eigenschap.Using the field() function allows the existenceCondition to access properties on the new or updated resource, specifically the location property.

rolDefinitieId'sroleDefinitionIds

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

De eigenschap roleDefinitionIds array in het blok properties.policyRule.then.details vertelt de beleidsdefinitie welke rechten de beheerde identiteit nodig heeft om de meegeleverde resourcemanagersjabloon te implementeren.The roleDefinitionIds array property in the properties.policyRule.then.details block tells the policy definition which rights the managed identity needs to deploy the included Resource Manager template. Deze eigenschap moet worden ingesteld op rollen die de machtigingen die nodig zijn door de sjabloon implementatie bevatten, maar moet gebruik maken van het concept van 'principe van de minste bevoegdheden' en alleen de benodigde bewerkingen en niets meer.This property must be set to include roles that have the permissions needed by the template deployment, but should use the concept of 'principle of least privilege' and only have the needed operations and nothing more.

ImplementatiesjabloonDeployment template

Het implementatiegedeelte van de beleidsdefinitie heeft een eigenschappenblok dat de drie kerncomponenten definieert:The deployment portion of the policy definition has a properties block that defines the three core components:

  • modus - Met deze eigenschap wordt de implementatiemodus van de sjabloon ingesteld.mode - This property sets the deployment mode of the template.

  • sjabloon - Deze eigenschap bevat de sjabloon zelf.template - This property includes the template itself. In dit voorbeeld stelt de parameter locatiesjabloon de locatie in van de nieuwe netwerkwatcherbron.In this example, the location template parameter sets the location of the new network watcher resource.

    "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 aan de sjabloonworden verstrekt.parameters - This property defines parameters that are provided to the template. De parameternamen moeten overeenkomen met wat in de sjabloonis gedefinieerd.The parameter names must match what are defined in template. In dit voorbeeld wordt de parameter de naam locatie genoemd die overeenkomt.In this example, the parameter is named location to match. De waarde van field() de locatie gebruikt de functie opnieuw om de waarde van de geĆ«valueerde resource te krijgen, het virtuele netwerk in het blok policyRule.if.The value of location uses the field() function again to get the value of the evaluated resource, which is the virtual network in the policyRule.if block.

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

Volgende stappenNext steps