Padrão do Azure Policy: marcas
As marcas são uma parte importante do gerenciamento, da organização e do controle de seus recursos do Azure. O Azure Policy possibilita configurar marcas em seus recursos novos e existentes em escala com o efeito modificar e as tarefas de correção.
Exemplo 1: Parametrizar marcas
Essa definição de política usa dois parâmetros, tagName e tagValue, para definir o que a atribuição de política está procurando em grupos de recursos. Esse formato permite que a definição de política seja usada para qualquer número de combinações de nome e valor de marca, mas mantém apenas uma única definição de política.
Observação
Embora este padrão de definição de política seja semelhante ao Pattern: Parameters - Sample #1, este exemplo utiliza modo Todos e tem como alvo 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, modo está definido como Todos, pois ele se destina a um grupo de recursos. Na maioria dos casos, o modo deve ser definido como Indexado ao trabalhar com marcas. Para obter mais informações, confira modos.
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"notEquals": "[parameters('tagValue')]"
}
]
},
Nessa parte da definição de política, concat
combina o parâmetro tagName com parâmetros e o formato tags['name']
para instruir o campo a avaliar essa marca para o parâmetro tagValue.
Como notEquals é usado, se tags[tagName] não for igual a tagValue, o efeito modificar será disparado.
"operations": [{
"operation": "addOrReplace",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[parameters('tagValue')]"
}]
Aqui, o mesmo formato para usar os valores de marca com parâmetros é usado pela operação addOrReplace para criar ou atualizar a marca para o valor desejado no grupo de recursos avaliado.
Exemplo 2: Herdar o valor da marca do grupo de recursos
Essa definição de política usa o parâmetro tagName para determinar qual valor da marca deve ser herdado do grupo de recursos pai.
{
"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 é definido como Indexado, pois não tem como destino um grupo de recursos ou uma assinatura, embora obtenha o valor de um grupo de recursos. Para obter mais informações, confira modos.
"if": {
"allOf": [{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"notEquals": "[resourceGroup().tags[parameters('tagName')]]"
},
{
"value": "[resourceGroup().tags[parameters('tagName')]]",
"notEquals": ""
}
]
},
A policyRule.if usa concat
, assim como o Exemplo #1, para avaliar o valor de tagName, mas usa a função resourceGroup()
para compará-lo com o valor da mesma marca no grupo de recursos pai. A segunda cláusula aqui verifica se a marca 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á sendo atribuído à marca tagName no recurso também usa a função resourceGroup()
para obter o valor do grupo de recursos pai. Dessa forma, você pode herdar marcas de grupos de recursos pai. Se você já criou o recurso, mas não adicionou a marca, essa mesma definição de política e uma tarefa de correção poderão atualizar os recursos existentes.
Próximas etapas
- Revise outros padrões e definições internas.
- Revise a estrutura de definição do Azure Policy.
- Revisar Compreendendo os efeitos da política.