Azure Policy-Muster: Tags
Tags sind ein wichtiger Bestandteil der Verwaltung, Organisation und Steuerung Ihrer Azure-Ressourcen. Azure Policy bietet Ihnen die Möglichkeit, Tags für Ihre neuen und bestehenden Ressourcen mit der Auswirkung Modify (Ändern) und mithilfe von Wartungstasks im gewünschten Umfang zu konfigurieren.
Beispiel 1: Parametrisieren von Tags
In dieser Richtliniendefinition werden zwei Parameter (tagName und tagValue) verwendet, um festzulegen, wonach die Richtlinienzuweisung in Ressourcengruppen suchen soll. Mit diesem Format kann die Richtliniendefinition für beliebig viele Kombinationen aus Tagname und Tagwert verwendet werden, ohne mehrere Richtliniendefinitionen verwalten zu müssen.
Hinweis
Dieses Richtliniendefinitionsmuster ähnelt dem unter Muster: Parameter – Beispiel 1 aufgeführten Muster. Doch in diesem Beispiel ist der Modus auf Alle festgelegt, und als Ziel werden Ressourcengruppen verwendet.
{
"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')]"
}]
}
}
}
}
}
Beispiel 1: Erklärung
"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 diesem Beispiel ist mode auf All festgelegt, weil eine Ressourcengruppe als Ziel verwendet wird. In den meisten Fällen sollte mode beim Arbeiten mit Tags auf Indexed (Indiziert) festgelegt werden. Weitere Informationen finden Sie unter Modi.
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"notEquals": "[parameters('tagValue')]"
}
]
},
In diesem Teil der Richtliniendefinition kombiniert concat
den parametrisierten Parameter tagName und das Format tags['name']
, um field anzuweisen, dieses Tag für den Parameter tagValue auszuwerten.
Da notEquals verwendet wird, wenn tags[tagName] nicht gleich tagValue ist, wird die Auswirkung modify ausgelöst.
"operations": [{
"operation": "addOrReplace",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[parameters('tagValue')]"
}]
Hier wird vom Vorgang addOrReplace das gleiche Format für die Verwendung der parametrisierten Tagwerte verwendet, um das Tag mit dem gewünschten Wert für die ausgewertete Ressourcengruppe zu erstellen oder zu aktualisieren.
Beispiel 2: Erben des Tagwerts der Ressourcengruppe
In dieser Richtliniendefinition wird der Parameter tagName verwendet, um zu bestimmen, welcher Tagwert von der übergeordneten Ressourcengruppe geerbt werden soll.
{
"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')]]"
}]
}
}
}
}
}
Beispiel 2: Erklärung
"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 diesem Beispiel ist mode auf Indexed festgelegt, weil keine Ressourcengruppe oder kein Abonnement als Ziel verwendet wird, obwohl der Wert aus einer Ressourcengruppe abgerufen wird. Weitere Informationen finden Sie unter Modi.
"if": {
"allOf": [{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"notEquals": "[resourceGroup().tags[parameters('tagName')]]"
},
{
"value": "[resourceGroup().tags[parameters('tagName')]]",
"notEquals": ""
}
]
},
policyRule.if verwendet concat
wie Beispiel 1, um den Wert von tagName auszuwerten. Es wird jedoch die Funktion resourceGroup()
verwendet, um den Wert mit dem Wert desselben Tags für die übergeordnete Ressourcengruppe zu vergleichen. In der zweiten Klausel wird überprüft, ob das Tag für die Ressourcengruppe einen Wert aufweist und nicht NULL ist.
"operations": [{
"operation": "addOrReplace",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[resourceGroup().tags[parameters('tagName')]]"
}]
Hier verwendet der Wert, der dem Tag tagName für die Ressource zugewiesen wird, auch die Funktion resourceGroup()
, um den Wert aus der übergeordneten Ressourcengruppe abzurufen. Auf diese Weise können Tags von übergeordneten Ressourcengruppen geerbt werden. Wenn Sie bereits die Ressource erstellt, aber das Tag nicht hinzugefügt haben, können Sie mit dieser Richtliniendefinition und einem Wartungstask vorhandene Ressourcen aktualisieren.
Nächste Schritte
- Sehen Sie sich andere Muster und integrierte Definitionen an.
- Lesen Sie die Informationen unter Struktur von Azure Policy-Definitionen.
- Lesen Sie Grundlegendes zu Richtlinienauswirkungen.