padrão de Azure Policy: parâmetros

Uma definição de política pode ser dinâmica para reduzir o número de definições de política que são necessárias através da utilização de parâmetros. O parâmetro é definido durante a atribuição de políticas. Os parâmetros têm um conjunto de propriedades predefinidas que descrevem o parâmetro e como é utilizado.

Exemplo 1: Parâmetros de cadeia

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 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

Para obter um exemplo de etiqueta que utiliza o modoTudo e funciona com um grupo de recursos, veja Padrão: Etiquetas - Exemplo 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 cadeia e é fornecida uma descrição para a sua utilização.

Em seguida, o parâmetro é utilizado no bloco policyRule.if para tornar a política dinâmica. Aqui, é utilizado para definir o campo que é avaliado, que é uma etiqueta com o valor de tagName.

"if": {
    "not": {
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "equals": "[parameters('tagValue')]"
    }
},

Exemplo 2: Parâmetros de matriz

Esta definição de política utiliza um único parâmetro, listOfBandwidthinMbps, para verificar se o recurso do Circuito do Express Route configurou a definiçã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 é fornecida uma descrição para a sua utilização. Como uma matriz, tem vários valores para corresponder.

Em seguida, o parâmetro é utilizado no bloco policyRule.if . Como parâmetro de matriz, tem de ser utilizada uma condição de matrizem ou nãoIn. Aqui, é utilizado 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 utiliza um único parâmetro, efeito. A parametrização do efeito permite atribuir a mesma definição a diferentes âmbitos 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"
        }
    }
},

Nesta parte da definição de política, o parâmetro de efeito é definido como cadeia. A definição de política define o valor predefinido de uma atribuição para auditar e limita as outras opções a desativar e negar.

Em seguida, o parâmetro é utilizado no policyRule., em seguida, bloqueia para o efeito.

"then": {
    "effect": "[parameters('effect')]"
}

Passos seguintes