Azure Policy-Muster: Auswirkungen

Azure Policy verfügt zahlreiche Auswirkungen, die bestimmen, wie der Dienst auf nicht kompatible Ressourcen reagiert. Einige Auswirkungen sind einfach und erfordern keine weiteren Eigenschaften in der Richtliniendefinition. Für andere sind dagegen mehrere Eigenschaften erforderlich.

Beispiel 1: Einfache Auswirkung

Mit der folgenden Richtliniendefinition wird überprüft, ob das im Parameter tagName definierte Tag in der ausgewerteten Ressource vorhanden ist. Ist das Tag noch nicht vorhanden, wird die Auswirkung modify ausgelöst, um das Tag mit dem Wert aus dem Parameter tagValue hinzuzufügen.

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

Beispiel 1: Erklärung

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

Für die Auswirkung modify ist der Block policyRule.then.details erforderlich, in dem Rollendefinitions-IDs (roleDefinitionIds) und Vorgänge (operations) definiert werden. Mithilfe dieser Parameter wird Azure Policy mitgeteilt, welche Rollen erforderlich sind, um das Tag hinzuzufügen und die Ressource zu korrigieren, und welcher Vorgang vom Typ modify verwendet werden soll. In diesem Beispiel wird der Vorgangadd verwendet. Die Parameter dienen zum Festlegen des Tags und des zugehörigen Werts.

Beispiel 2: Komplexe Auswirkung

Mit der folgenden Richtliniendefinition wird jeder virtuelle Computer daraufhin überprüft, ob eine in den Parametern publisher und type definierte Erweiterung vorhanden ist. Mithilfe von auditIfNotExists wird eine mit dem virtuellen Computer zusammenhängende Ressource überprüft, um zu ermitteln, ob eine den definierten Parametern entsprechende Instanz vorhanden ist. In diesem Beispiel wird der Typ extensions überprüft.

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

Beispiel 2: Erklärung

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

Für die Auswirkung auditIfNotExists ist der Block policyRule.then.details erforderlich, um sowohl einen Typ (type) als auch die gewünschte Existenzbedingung (existenceCondition) zu definieren. Für die Existenzbedingung (existenceCondition) werden Elemente der Richtliniensprache wie etwa logische Operatoren verwendet, um zu bestimmen, ob eine passende zugehörige Ressource vorhanden ist. In diesem Beispiel werden die Werte, die für jeden Alias überprüft werden, in Parametern definiert.

Nächste Schritte