Dela via


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 på dina nya och befintliga resurser i stor skala med ändringseffekten och reparationsuppgifterna.

Exempel 1: Parameterisera taggar

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

Kommentar

Det här principdefinitionsmönstret liknar det i Mönster: Parametrar – Exempel 1, men det här exemplet använder läget Alla 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 Indexerad 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 kombinerar parametern 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 i 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 mot 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 som Exempel #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.concat Den andra satsen här kontrollerar att taggen på 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 även det värde som tilldelas taggname-taggen på resursen resourceGroup() 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