Azure Policy-patroon: effectenAzure Policy pattern: effects

Azure Policy heeft veel effecten die bepalen hoe de service reageert op niet-compatibele resources.Azure Policy has many effects that determine how the service reacts to non-compliant resources. Een aantal effecten is eenvoudig; hiervoor zijn geen aanvullende eigenschappen in de beleidsdefinitie vereist. Voor andere effecten zijn verschillende eigenschappen vereist.Some effects are simple and require no additional properties in the policy definition while others require several properties.

Voorbeeld 1: Eenvoudig effectSample 1: Simple effect

Met deze beleidsdefinitie wordt gecontroleerd of de tag die is gedefinieerd in parameter tagName bestaat op de geƫvalueerde resource.This policy definition checks to see whether the tag defined in parameter tagName exists on the evaluated resource. Als de tag nog niet bestaat, wordt het effect aanpassen geactiveerd om de tag met de waarde in de parameter tagValue toe te voegen.If the tag doesn't yet exist, the modify effect is triggered to add the tag with the value in parameter tagValue.

{
    "properties": {
        "displayName": "Add a tag to resource groups",
        "policyType": "BuiltIn",
        "mode": "All",
        "description": "Adds the specified tag and value when any resource group missing this tag is created or updated. Existing resource groups can be remediated by triggering a remediation task. If the tag exists with a different value it will not be changed.",
        "metadata": {
            "version": "1.0.0",
            "category": "Tags"
        },
        "parameters": {
            "tagName": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Name",
                    "description": "Name of the tag, such as 'environment'"
                }
            },
            "tagValue": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Value",
                    "description": "Value of the tag, such as 'production'"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Resources/subscriptions/resourceGroups"
                    },
                    {
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "exists": "false"
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "add",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[parameters('tagValue')]"
                    }]
                }
            }
        }
    }
}

Voorbeeld 1: UitlegSample 1: Explanation

"effect": "modify",
"details": {
    "roleDefinitionIds": [
        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "operations": [{
        "operation": "add",
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "value": "[parameters('tagValue')]"
    }]
}

Voor het effect aanpassen is het policyRule.then.details-blok vereist waarmee roleDefinitionIds en operations worden gedefinieerd.A modify effect requires the policyRule.then.details block that defines roleDefinitionIds and operations. Aan de hand van deze parameters weet Azure Policy welke rollen nodig zijn om de tag toe te voegen en de resource te herstellen en welke bewerking voor aanpassen moet worden gebruikt.These parameters inform Azure Policy what roles are needed to add the tag and remediate the resource and which modify operation to use. In dit voorbeeld worden de bewerking add en de parameters gebruikt om de tag en de waarde daarvan in te stellen.In this example, the add operation and the parameters are used to set the tag and its value.

Voorbeeld 2: Complex effectSample 2: Complex effect

Met deze beleidsdefinitie wordt elke virtuele machine gecontroleerd wanneer een extensie, die in de parameters publisher en type is gedefinieerd, niet bestaat.This policy definition audits each virtual machine for when an extension, defined in parameters publisher and type, doesn't exist. Er wordt gebruikgemaakt van auditIfNotExists om een resource te controleren die is gerelateerd aan de virtuele machine om te zien of er een exemplaar bestaat dat overeenkomt met de gedefinieerde parameters.It uses auditIfNotExists to check a resource related to the virtual machine to see whether an instance exists that matches the defined parameters. In dit voorbeeld wordt het type extensions gecontroleerd.This example checks the extensions type.

{
    "type": "Microsoft.Authorization/policyDefinitions",
    "name": "audit-vm-extension",
    "properties": {
        "displayName": "Audit if extension does not exist",
        "description": "This policy audits if a required extension doesn't exist.",
        "parameters": {
            "publisher": {
                "type": "String",
                "metadata": {
                    "description": "The publisher of the extension",
                    "displayName": "Extension Publisher"
                }
            },
            "type": {
                "type": "String",
                "metadata": {
                    "description": "The type of the extension",
                    "displayName": "Extension Type"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Compute/virtualMachines"
                    },
                    {
                        "field": "Microsoft.Compute/imagePublisher",
                        "in": [
                            "MicrosoftWindowsServer"
                        ]
                    },
                    {
                        "field": "Microsoft.Compute/imageOffer",
                        "in": [
                            "WindowsServer"
                        ]
                    }
                ]
            },
            "then": {
                "effect": "auditIfNotExists",
                "details": {
                    "type": "Microsoft.Compute/virtualMachines/extensions",
                    "existenceCondition": {
                        "allOf": [{
                                "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                                "equals": "[parameters('publisher')]"
                            },
                            {
                                "field": "Microsoft.Compute/virtualMachines/extensions/type",
                                "equals": "[parameters('type')]"
                            }
                        ]
                    }
                }
            }
        }
    }
}

Voorbeeld 2: UitlegSample 2: Explanation

"details": {
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "existenceCondition": {
        "allOf": [{
                "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                "equals": "[parameters('publisher')]"
            },
            {
                "field": "Microsoft.Compute/virtualMachines/extensions/type",
                "equals": "[parameters('type')]"
            }
        ]
    }
}

Voor het effect auditIfNotExists is vereist dat in het policyRule.then.details-blok zowel een type als de existenceCondition waarnaar moet worden gezocht, wordt gedefinieerd.An auditIfNotExists effect requires the policyRule.then.details block to define both a type and the existenceCondition to look for. De existenceCondition maakt gebruik van elementen van de beleidstaal, zoals logische operators, om te bepalen of er een overeenkomende gerelateerde resource bestaat.The existenceCondition uses policy language elements, such as logical operators, to determine whether a matching related resource exists. In dit voorbeeld zijn de waarden die bij elke alias zijn gecontroleerd, gedefinieerd in parameters.In this example, the values checked against each alias are defined in parameters.

Volgende stappenNext steps