Шаблон Политики Azure: параметры

Определение политики можно сделать динамическим, чтобы уменьшить количество определений политик, необходимых для использования параметров. Параметр определяется во время назначения политики. Параметры имеют набор предварительно определенных свойств, описывающих параметр и его использование.

Пример 1 Параметры строки

Это определение политики использует два параметра: tagName и tagValue, чтобы задать, что именно будет искать назначение политики на ресурсах. Этот формат позволяет использовать определение политики для любого количества сочетаний имен тегов и значений тегов, но поддерживает только одно определение политики.

Примечание

Пример тега, в котором используется режимВсе и который работает с группой ресурсов, см. в разделе Шаблон: Теги — пример 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"
            }
        }
    }
}

Пример 1 Объяснение

"tagName": {
    "type": "String",
    "metadata": {
        "description": "Name of the tag, such as costCenter"
    }
},

В этой части определения политики параметр tagName определен как строковый и для его использования предоставляется описание.

Затем параметр используется в блоке policyRule.if, чтобы сделать политику динамической. Здесь оно используется для определения вычисляемого поля, которое представляет собой тег со значением tagName.

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

Пример 2 Параметры массива

Это определение политики использует один параметр, listOfBandwidthinMbps, чтобы проверить, настроено ли для ресурса контура Express Route параметр пропускной способности на одно из утвержденных значений. Если оно не совпадает, то создание или обновление ресурса отклоняется

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

Пример 2 Объяснение

"listOfBandwidthinMbps": {
    "type": "Array",
    "metadata": {
        "description": "The list of SKUs that can be specified for express route.",
        "displayName": "Allowed Bandwidth"
    }
}

В этой части определения политики параметр listOfBandwidthinMbps определяется как массив и для его использования предоставляется описание. В качестве массива он имеет несколько значений для сопоставления.

Затем параметр используется в блоке policyRule.if. В качестве параметра массива следует использовать условиямассиваin или notIn. Здесь он используется для псевдонима serviceProvider.bandwidthInMbps как одно из определенных значений.

"not": {
    "field": "Microsoft.Network/expressRouteCircuits/serviceProvider.bandwidthInMbps",
    "in": "[parameters('listOfBandwidthinMbps')]"
}

Пример 3. Параметризованный effect

Распространенным способом обеспечения многократного использования определений политики является параметризация самого effect. В этом примере используется один параметр, effect. Параметризация effect позволяет присвоить одно и то же определение разным областям с разными effect.

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

Пример 3. Объяснение

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

В этой части определения политики параметр effect определяется как строка. Определение политики устанавливает для назначения значение по умолчанию аудит и ограничивает остальные параметры значениями отключено и запретить.

Затем параметр используется в блоке policyRule.if для effect.

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

Дальнейшие действия