Share via


Azure Policy-patroon: effecten

Azure Policy heeft veel effecten die bepalen hoe de service reageert op niet-compatibele resources. Een aantal effecten is eenvoudig; hiervoor zijn geen aanvullende eigenschappen in de beleidsdefinitie vereist. Voor andere effecten zijn verschillende eigenschappen vereist.

Voorbeeld 1: Eenvoudig effect

Met deze beleidsdefinitie wordt gecontroleerd of de tag die is gedefinieerd in parametertagName bestaat op de geƫvalueerde 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.

{
    "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: Uitleg

"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. 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. In dit voorbeeld worden de bewerking add en de parameters gebruikt om de tag en de waarde daarvan in te stellen.

Voorbeeld 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. 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. In dit voorbeeld wordt het type extensions gecontroleerd.

{
    "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: Uitleg

"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. De existenceCondition maakt gebruik van beleidstaalelementen, zoals logische operators, om te bepalen of er een overeenkomende gerelateerde resource bestaat. In dit voorbeeld zijn de waarden die bij elke alias zijn gecontroleerd, gedefinieerd in parameters.

Volgende stappen