Azure Policy mönster: taggar

Taggar är en viktig del av att hantera, organisera och styra dina Azure-resurser. Azure Policy gör det möjligt att konfigurera taggar för dina nya och befintliga resurser i stor skala med åtgärder för ändringseffekt och reparation.

Exempel 1: Parameterisera taggar

Den här principdefinitionen använder två parametrar, tagName och tagValue , för att ange vad principtilldelningen letar efter i resursgrupper. Det här formatet gör att principdefinitionen kan användas för valfritt antal kombinationer av taggnamn och taggvärden, men endast upprätthålla en enda principdefinition.

Anteckning

Även om det här principdefinitionsmönstret liknar det i Mönster: Parametrar – exempel 1 använder det här exemplet lägetAlla och riktar sig till resursgrupper.

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

Exempel 1: Förklaring

"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"
    },

I det här exemplet är läget inställt på Alla eftersom det riktar sig till en resursgrupp. I de flesta fall bör läget anges till Indexerat när du arbetar med taggar. Mer information finns i lägen.

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

I den här delen av principdefinitionen concat kombineras parametern tagName och tags['name'] formatet för att instruera fältet att utvärdera taggen för parametern tagValue. Eftersom notEquals används utlöses ändringseffekten om taggar[tagName] inte är lika med tagValue.

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

Här används samma format för att använda parameteriserade taggvärden av åtgärden addOrReplace för att skapa eller uppdatera taggen till önskat värde för den utvärderade resursgruppen.

Exempel 2: Ärv taggvärde från resursgrupp

Den här principdefinitionen använder parametern tagName för att avgöra vilken taggs värde som ska ärva från den överordnade resursgruppen.

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

Exempel 2: Förklaring

"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"
    },

I det här exemplet är läget inställt på Indexerat eftersom det inte riktar sig till en resursgrupp eller prenumeration trots att det hämtar värdet från en resursgrupp. Mer information finns i lägen.

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

PolicyRule.if använder concat som exempel nr 1 för att utvärdera tagName-värdet, men använder resourceGroup() funktionen för att jämföra den med värdet för samma tagg i den överordnade resursgruppen. Den andra satsen här kontrollerar att taggen i resursgruppen har ett värde och inte är null.

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

Här använder värdet som tilldelas taggname-taggen på resursen resourceGroup() även funktionen för att hämta värdet från den överordnade resursgruppen. På så sätt kan du ärva taggar från överordnade resursgrupper. Om du redan har skapat resursen men inte lagt till taggen kan samma principdefinition och en reparationsaktivitet uppdatera befintliga resurser.

Nästa steg