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
- Przejrzyj inne wzorce i wbudowane definicje.
- Przejrzyj temat Struktura definicji zasad Azure Policy.
- Przejrzyj wyjaśnienie działania zasad.