Azure Policy-patroon: tagsAzure Policy pattern: tags

Tags zijn een belangrijk onderdeel van het beheren en ordenen van uw Azure-resources.Tags are an important part of managing, organizing, and governing your Azure resources. Met Azure Policy kunt u op grote schaal tags configureren voor uw nieuwe en bestaande resources voor het effect aanpassen en hersteltaken.Azure Policy makes it possible to configure tags on your new and existing resources at scale with the modify effect and remediation tasks.

Voorbeeld 1: Parameters toevoegen aan tagsSample 1: Parameterize tags

Deze beleidsdefinitie gebruikt twee parameters, tagName en tagValue, om in te stellen waar de beleidstoewijzing naar zoekt bij resourcegroepen.This policy definition uses two parameters, tagName and tagValue to set what the policy assignment is looking for on resource groups. Dankzij deze indeling kan de beleidsdefinitie worden gebruikt voor alle combinaties van tagnaam en tagwaarde, met behoud van één beleidsdefinitie.This format allows the policy definition to be used for any number of tag name and tag value combinations, but only maintain a single policy definition.

Notitie

Hoewel dit beleidsdefinitiepatroon vergelijkbaar is met dat in Patroon: Parameters - voorbeeld 1, worden in dit voorbeeld modus Alle gebruikt en zijn alle resourcegroep het doel.While this policy definition pattern is similar to the one in Pattern: Parameters - Sample #1, this sample uses mode All and targets resource groups.

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

Voorbeeld 1: UitlegSample 1: Explanation

"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 dit voorbeeld is modus ingesteld op Alle omdat het een resourcegroep als doel heeft.In this sample, mode is set to All since it targets a resource group. In de meeste gevallen moet modus zijn ingesteld op Geïndexeerd wanneer u met tags werkt.In most cases, mode should be set to Indexed when working with tags. Zie modi voor meer informatie.For more information, see modes.

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

In dit gedeelte van de beleidsdefinitie combineert concat de parameter tagName en de tags['name']-indeling om veld die tag te laten evalueren voor de parameter tagValue.In this portion of the policy definition, concat combines the parameterized tagName parameter and the tags['name'] format to tell field to evaluate that tag for the parameter tagValue. Omdat notEquals wordt gebruikt, wordt het effect aanpassen getriggerd als tags[tagName] niet overeenkomt met tagValue.As notEquals is used, if tags[tagName] doesn't equal tagValue, the modify effect is triggered.

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

Hier wordt de indeling voor het gebruik van tagwaarden met parameters ook gebruikt voor de bewerking addOrReplace, voor het maken of bijwerken van de tag naar de gewenste waarde voor de geëvalueerde resourcegroep.Here, the same format for using the parameterized tag values is used by the addOrReplace operation to create or update the tag to the desired value on the evaluated resource group.

Voorbeeld 2: Tagwaarde overnemen uit resourcegroepSample 2: Inherit tag value from resource group

Deze beleidsdefinitie gebruikt de parameter tagName om te bepalen van welke tag de waarde moet worden overgenomen uit de bovenliggende resourcegroep.This policy definition uses the parameter tagName to determine which tag's value to inherit from the parent resource group.

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

Voorbeeld 2: UitlegSample 2: Explanation

"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 dit voorbeeld is modus ingesteld op Geïndexeerd omdat het doel geen resourcegroep of abonnement is, ondanks dat de waarde afkomstig is uit een resourcegroep.In this sample, mode is set to Indexed since it doesn't target a resource group or subscription even though it gets the value from a resource group. Zie modi voor meer informatie.For more information, see modes.

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

De policyRule.if gebruikt concat zoals Voorbeeld 1 om de waarde van tagName te evalueren maar gebruikt de functie resourceGroup() om die te vergelijken met de waarde van dezelfde tag van de bovenliggende resourcegroep.The policyRule.if uses concat like Sample #1 to evaluate the tagName's value, but uses the resourceGroup() function to compare it to the value of the same tag on the parent resource group. Het tweede component controleert of de tag van de resourcegroep een waarde heeft en niet null is.The second clause here checks that the tag on the resource group has a value and isn't null.

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

Hier gebruikt de waarde die wordt toegewezen aan de tag tagName van de resource ook de functie resourceGroup() om de waarde op te halen van de bovenliggende resourcegroep.Here, the value being assigned to the tagName tag on the resource also uses the resourceGroup() function to get the value from the parent resource group. Op die manier kunt u tags overnemen van bovenliggende resourcegroepen.In this way, you can inherit tags from parent resource groups. Als u de resource al hebt gemaakt maar de tag niet hebt toegevoegd, kunt u met dezelfde beleidsdefinitie en een hersteltaak bestaande resources bijwerken.If you already created the resource but didn't add the tag, this same policy definition and a remediation task can update existing resources.

Volgende stappenNext steps