Modello di Criteri di Azure: effetti

Criteri di Azure ha molti effetti che determinano il modo in cui il servizio reagisce alle risorse non conformi. Alcuni effetti sono semplici e non richiedono proprietà aggiuntive nella definizione di criteri, mentre altri richiedono diverse proprietà.

Esempio 1. Effetto semplice

Questa definizione di criteri verifica se il tag definito nel parametro tagName esiste nella risorsa valutata. Se il tag non esiste ancora, viene attivato l'effetto modify per aggiungere il tag con il valore nel parametro 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')]"
                    }]
                }
            }
        }
    }
}

Esempio 1. Spiegazione

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

Un effetto modify richiede il blocco policyRule.then.details che definisce roleDefinitionIds e operations. Questi parametri indicano a Criteri di Azure quali ruoli sono necessari per aggiungere il tag e correggere la risorsa e quale operazione modify usare. In questo esempio, l'operazionedi aggiunta e i parametri vengono usati per impostare il tag e il relativo valore.

Esempio 2: Effetto complesso

Questa definizione di criteri controlla ogni macchina virtuale quando un'estensione, definita nei parametri publisher e type, non esiste. Usa auditIfNotExists per controllare una risorsa correlata alla macchina virtuale per verificare se esiste un'istanza corrispondente ai parametri definiti. Questo esempio controlla il tipo extensions.

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

Esempio 2: Spiegazione

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

Un effetto auditIfNotExists richiede il blocco policyRule.then.details per definire sia type che existenceCondition da cercare. ExistCondition usa elementi del linguaggio dei criteri, ad esempio gli operatori logici, per determinare se esiste una risorsa correlata corrispondente. In questo esempio i valori controllati per ogni alias sono definiti nei parametri.

Passaggi successivi