Modello di Criteri di Azure: tag

I tag rappresentano una parte importante della gestione, dell'organizzazione e del controllo delle risorse di Azure. Criteri di Azure consente di configurare i tag per le risorse nuove ed esistenti su larga scala con l'effetto modifica e le attività di correzione.

Esempio 1. Parametrizzare i tag

Questa definizione di criteri usa due parametri, tagName e tagValue, per impostare gli elementi da cercare nei gruppi di risorse con l'assegnazione di criteri. Questo formato consente di usare la definizione dei criteri per un numero qualsiasi di combinazioni di nomi e valori di tag, ma di mantenere una singola definizione di criteri.

Nota

Anche se questo modello di definizione dei criteri è simile a quello in Pattern: Parameters - Sample #1, questo esempio usa la modalitàTutti e i gruppi di risorse di destinazione.

{
    "properties": {
        "displayName": "Add or replace a tag on resource groups",
        "mode": "All",
        "description": "Adds or replaces the specified tag and value when any resource group is created or updated. Existing resource groups can be remediated by triggering a remediation task.",
        "metadata": {
            "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'), ']')]",
                        "notEquals": "[parameters('tagValue')]"
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "addOrReplace",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[parameters('tagValue')]"
                    }]
                }
            }
        }
    }
}

Esempio 1. Spiegazione

"properties": {
    "displayName": "Add or replace a tag on resource groups",
    "mode": "All",
    "description": "Adds or replaces the specified tag and value when any resource group is created or updated. Existing resource groups can be remediated by triggering a remediation task.",
    "metadata": {
        "category": "Tags"
    },

In questo esempio, la modalità è impostata su All poiché è destinata a un gruppo di risorse. Nella maggior parte dei casi, è consigliabile impostare la modalità su Indexed quando si usano i tag. Per altre informazioni, vedere le modalità.

"if": {
    "allOf": [{
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "notEquals": "[parameters('tagValue')]"
        }
    ]
},

In questa parte della definizione dei criteri, concat combina il parametro tagName con parametri e il formato tags['name'] per indicare a field di valutare tale tag per il parametro tagValue. Come notEquals viene usato, se tags[tagName] non è uguale a tagValue, viene attivato l'effetto modify .

"operations": [{
    "operation": "addOrReplace",
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "value": "[parameters('tagValue')]"
}]

In questo caso, lo stesso formato per l'uso dei valori dei tag con parametri viene usato dall'operazione addOrReplace per creare o aggiornare il tag al valore desiderato nel gruppo di risorse valutato.

Esempio 2: Ereditare il valore del tag dal gruppo di risorse

Questa definizione di criteri usa il parametro tagName per determinare il valore del tag da ereditare dal gruppo di risorse padre.

{
    "properties": {
        "displayName": "Inherit a tag from the resource group",
        "mode": "Indexed",
        "description": "Adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.",
        "metadata": {
            "category": "Tags"
        },
        "parameters": {
            "tagName": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Name",
                    "description": "Name of the tag, such as 'environment'"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "notEquals": "[resourceGroup().tags[parameters('tagName')]]"
                    },
                    {
                        "value": "[resourceGroup().tags[parameters('tagName')]]",
                        "notEquals": ""
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "addOrReplace",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[resourceGroup().tags[parameters('tagName')]]"
                    }]
                }
            }
        }
    }
}

Esempio 2: Spiegazione

"properties": {
    "displayName": "Inherit a tag from the resource group",
    "mode": "Indexed",
    "description": "Adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.",
    "metadata": {
        "category": "Tags"
    },

In questo esempio, la modalità è impostata su Indexed perché non è destinata a un gruppo di risorse o a una sottoscrizione, anche se ottiene il valore da un gruppo di risorse. Per altre informazioni, vedere le modalità.

"if": {
    "allOf": [{
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "notEquals": "[resourceGroup().tags[parameters('tagName')]]"
        },
        {
            "value": "[resourceGroup().tags[parameters('tagName')]]",
            "notEquals": ""
        }
    ]
},

policyRule.if usa concat come Esempio n. 1 per valutare il valore di tagName, ma usa la funzione resourceGroup() per confrontarlo con il valore dello stesso tag nel gruppo di risorse padre. La seconda clausola verifica che il tag nel gruppo di risorse abbia un valore e non sia Null.

"operations": [{
    "operation": "addOrReplace",
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "value": "[resourceGroup().tags[parameters('tagName')]]"
}]

In questo caso, il valore assegnato al tag tagName nella risorsa usa anche la funzione resourceGroup() per ottenere il valore dal gruppo di risorse padre. In questo modo, è possibile ereditare i tag dai gruppi di risorse padre. Se la risorsa è già stata creata ma non è stato aggiunto il tag, questa stessa definizione di criteri e un'attività di correzione possono aggiornare le risorse esistenti.

Passaggi successivi