padrão de Azure Policy: etiquetas

As etiquetas são uma parte importante da gestão, organização e governação dos seus recursos do Azure. Azure Policy permite configurar etiquetas nos seus recursos novos e existentes em escala com as tarefas de modificação e remediação.

Exemplo 1: Parametrizar etiquetas

Esta definição de política utiliza dois parâmetros, tagName e tagValue para definir o que a atribuição de política procura nos grupos de recursos. Este formato permite que a definição de política seja utilizada para qualquer número de combinações de nome de etiqueta e valor de etiqueta, mas manter apenas uma definição de política única.

Nota

Embora este padrão de definição de política seja semelhante ao padrão em Padrão: Parâmetros – Exemplo n.º 1, este exemplo utiliza o modoTodos e destina-se a grupos de recursos.

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

Exemplo 1: Explicação

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

Neste exemplo, o modo está definido como Tudo , uma vez que visa um grupo de recursos. Na maioria dos casos, o modo deve ser definido como Indexado ao trabalhar com etiquetas. Para obter mais informações, veja modos.

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

Nesta parte da definição de política, concat combina o parâmetro tagName parametrizado e o formato para indicar o tags['name']campo para avaliar essa etiqueta para o parâmetro tagValue. Como notEquals é utilizado, se tags[tagName] não for igual a tagValue, o efeito de modificação é acionado.

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

Aqui, o mesmo formato para utilizar os valores de etiquetas parametrizados é utilizado pela operação addOrReplace para criar ou atualizar a etiqueta para o valor pretendido no grupo de recursos avaliado.

Exemplo 2: Herdar o valor da etiqueta do grupo de recursos

Esta definição de política utiliza o parâmetro tagName para determinar qual o valor da etiqueta a herdar do grupo de recursos principal.

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

Exemplo 2: Explicação

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

Neste exemplo, o modo está definido como Indexado , uma vez que não visa um grupo de recursos ou subscrição, mesmo que obtenha o valor de um grupo de recursos. Para obter mais informações, veja modos.

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

O policyRule.if utiliza concat como Exemplo n.º 1 para avaliar o valor do tagName, mas utiliza a resourceGroup() função para compará-lo com o valor da mesma etiqueta no grupo de recursos principal. A segunda cláusula aqui verifica se a etiqueta no grupo de recursos tem um valor e não é nula.

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

Aqui, o valor que está a ser atribuído à etiqueta tagName no recurso também utiliza a resourceGroup() função para obter o valor do grupo de recursos principal. Desta forma, pode herdar etiquetas de grupos de recursos principais. Se já tiver criado o recurso, mas não tiver adicionado a etiqueta, esta mesma definição de política e uma tarefa de remediação podem atualizar os recursos existentes.

Passos seguintes