Udostępnij za pośrednictwem


Wzorzec usługi Azure Policy: tagi

Tagi są ważną częścią zarządzania zasobami platformy Azure, organizowania ich i zarządzania nimi. Usługa Azure Policy umożliwia konfigurowanie tagów na nowych i istniejących zasobach na dużą skalę przy użyciu efektu modyfikacji i zadań korygowania.

Przykład 1. Parametryzowanie tagów

Ta definicja zasad używa dwóch parametrów, tagName i tagValue , aby ustawić, czego szuka przypisanie zasad w grupach zasobów. Ten format umożliwia używanie definicji zasad dla dowolnej liczby kombinacji nazwy tagu i wartości tagu, ale tylko jedna definicja zasad.

Uwaga

Chociaż ten wzorzec definicji zasad jest podobny do wzorca: parametry — przykład #1, w tym przykładzie jest używany tryb Wszystkie i docelowe grupy zasobów.

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

Przykład 1: Wyjaśnienie

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

W tym przykładzie tryb jest ustawiony na Wartość Wszystkie, ponieważ jest przeznaczony dla grupy zasobów. W większości przypadków tryb powinien być ustawiony na Indeksowany podczas pracy z tagami. Aby uzyskać więcej informacji, zobacz tryby.

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

W tej części definicji concat zasad łączy sparametryzowany parametr tagName i tags['name'] format, aby poinformować pole o ocenie tego tagu dla parametru tagValue. Ponieważ parametr notEquals jest używany, jeśli tagi[tagName] nie są równe tagValue, efekt modyfikacji jest wyzwalany.

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

W tym miejscu ten sam format użycia sparametryzowanych wartości tagów jest używany przez operację addOrReplace w celu utworzenia lub zaktualizowania tagu do żądanej wartości w ocenianej grupie zasobów.

Przykład 2. Dziedziczenie wartości tagu z grupy zasobów

Ta definicja zasad używa parametru tagName , aby określić, która wartość tagu ma dziedziczyć z nadrzędnej grupy zasobów.

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

Przykład 2. Wyjaśnienie

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

W tym przykładzie tryb jest ustawiony na Indeksowane, ponieważ nie jest przeznaczony dla grupy zasobów ani subskrypcji, mimo że pobiera wartość z grupy zasobów. Aby uzyskać więcej informacji, zobacz tryby.

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

PolicyRule.if używa metody , takiej jak Sample #1, aby ocenić wartość tagName, ale używa resourceGroup() funkcji do porównania jej z wartością tego samego tagu w nadrzędnej grupie zasobów.concat Druga klauzula sprawdza, czy tag w grupie zasobów ma wartość i nie ma wartości null.

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

W tym miejscu wartość przypisana do tagu tagName zasobu używa resourceGroup() również funkcji w celu pobrania wartości z nadrzędnej grupy zasobów. W ten sposób można dziedziczyć tagi z nadrzędnych grup zasobów. Jeśli zasób został już utworzony, ale nie został dodany tag, ta sama definicja zasad i zadanie korygowania może zaktualizować istniejące zasoby.

Następne kroki