Padrão do Azure Policy: parâmetros
Uma definição de política pode ser dinamizada para reduzir o número de definições de política necessárias usando parâmetros. O parâmetro é definido durante a atribuição da política. Os parâmetros têm um conjunto de propriedades predefinidas que descrevem o parâmetro e como ele é usado.
Exemplo 1: Parâmetros de cadeia de caracteres
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 nos 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
Para ver um exemplo de marca que usa o modo Todos e funciona com um grupo de recursos, confira Padrão: Marcas – Amostra nº 1.
{
"properties": {
"displayName": "Require tag and its value",
"policyType": "BuiltIn",
"mode": "Indexed",
"description": "Enforces a required tag and its value. Does not apply to resource groups.",
"parameters": {
"tagName": {
"type": "String",
"metadata": {
"description": "Name of the tag, such as costCenter"
}
},
"tagValue": {
"type": "String",
"metadata": {
"description": "Value of the tag, such as headquarter"
}
}
},
"policyRule": {
"if": {
"not": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"equals": "[parameters('tagValue')]"
}
},
"then": {
"effect": "deny"
}
}
}
}
Exemplo 1: Explicação
"tagName": {
"type": "String",
"metadata": {
"description": "Name of the tag, such as costCenter"
}
},
Nesta parte da definição de política, o parâmetro tagName é definido como uma sequência e uma descrição é fornecida para seu uso.
O parâmetro é então usado no bloco policyRule.if para tornar a política dinâmica. Aqui, ele é usado para definir o campo que é avaliado, que é uma marca com o valor de tagName.
"if": {
"not": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"equals": "[parameters('tagValue')]"
}
},
Exemplo 2: Parâmetros de matriz
Essa definição de política usa um único parâmetro, listOfBandwidthinMbps, para verificar se o recurso Express Route Circuit configurou a configuração de largura de banda para um dos valores aprovados. Se não corresponder, a criação ou atualização do recurso será negada.
{
"properties": {
"displayName": "Allowed Express Route bandwidth",
"description": "This policy enables you to specify a set of express route bandwidths that your organization can deploy.",
"parameters": {
"listOfBandwidthinMbps": {
"type": "Array",
"metadata": {
"description": "The list of SKUs that can be specified for express route.",
"displayName": "Allowed Bandwidth"
}
}
},
"policyRule": {
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.Network/expressRouteCircuits"
},
{
"not": {
"field": "Microsoft.Network/expressRouteCircuits/serviceProvider.bandwidthInMbps",
"in": "[parameters('listOfBandwidthinMbps')]"
}
}
]
},
"then": {
"effect": "Deny"
}
}
}
}
Exemplo 2: Explicação
"listOfBandwidthinMbps": {
"type": "Array",
"metadata": {
"description": "The list of SKUs that can be specified for express route.",
"displayName": "Allowed Bandwidth"
}
}
Nesta parte da definição de política, o parâmetro listOfBandwidthinMbps é definido como uma matriz e uma descrição é fornecida para seu uso. Como uma matriz, ela tem vários valores para corresponder.
O parâmetro é então usado no bloco policyRule.if. Com um parâmetro de matriz, a condição de matrizin ou notIn deve ser usada. Aqui, é usado no alias serviceProvider.bandwidthInMbps como um dos valores definidos.
"not": {
"field": "Microsoft.Network/expressRouteCircuits/serviceProvider.bandwidthInMbps",
"in": "[parameters('listOfBandwidthinMbps')]"
}
Exemplo 3: Efeito parametrizado
Uma forma comum de tornar as definições de política reutilizáveis é parametrizar o próprio efeito. Este exemplo usa um só parâmetro, effect. A parametrização do efeito possibilita atribuir a mesma definição a escopos diferentes com efeitos diferentes.
{
"properties": {
"displayName": "All authorization rules except RootManageSharedAccessKey should be removed from Service Bus namespace",
"policyType": "BuiltIn",
"mode": "All",
"description": "Service Bus clients should not use a namespace level access policy that provides access to all queues and topics in a namespace. To align with the least privilege security model, you should create access policies at the entity level for queues and topics to provide access to only the specific entity",
"metadata": {
"version": "1.0.1",
"category": "Service Bus"
},
"parameters": {
"effect": {
"type": "string",
"defaultValue": "Audit",
"allowedValues": [
"Audit",
"Deny",
"Disabled"
],
"metadata": {
"displayName": "Effect",
"description": "The effect determines what happens when the policy rule is evaluated to match"
}
}
},
"policyRule": {
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.ServiceBus/namespaces/authorizationRules"
},
{
"field": "name",
"notEquals": "RootManageSharedAccessKey"
}
]
},
"then": {
"effect": "[parameters('effect')]"
}
}
}
}
Exemplo 3: Explicação
"parameters": {
"effect": {
"type": "string",
"defaultValue": "Audit",
"allowedValues": [
"Audit",
"Deny",
"Disabled"
],
"metadata": {
"displayName": "Effect",
"description": "The effect determines what happens when the policy rule is evaluated to match"
}
}
},
Nessa parte da definição da política, o parâmetro effect é definido como uma cadeia de caracteres. A definição da política define o valor padrão de uma atribuição como audit e limita as outras opções a disabled e deny.
O parâmetro, então, é usado no bloco policyRule.if para o effect.
"then": {
"effect": "[parameters('effect')]"
}
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.