правило политики структуры определения Политика Azure
Правило политики состоит из if
блоков и then
блоков. В блоке if
определяется одно или несколько условий, определяющих, когда политика применяется. В этих условиях можно использовать логические операторы, чтобы точно определить сценарии для использования политики.
Полные сведения о каждом эффекте, порядке оценки, свойств и примеров см. в Политика Azure основах влияния определений.
В блоке then
определяется эффект, который происходит при выполнении условий if
.
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | modify | denyAction | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
Дополнительные сведения о policyRule см. в схеме определения политики.
Логические операторы
Ниже перечислены поддерживаемые логические операторы.
"not": {condition or operator}
"allOf": [{condition or operator},{condition or operator}]
"anyOf": [{condition or operator},{condition or operator}]
Синтаксис not
преобразует результат условия. Синтаксис allOf
(аналогично логической and
операции) требует, чтобы все условия были верными. Для anyOf
синтаксиса (аналогичной логической or
операции) требуется одно или несколько условий.
Допускается вложение логических операторов. В следующем примере показана not
операция, вложенная в allOf
операцию.
"if": {
"allOf": [
{
"not": {
"field": "tags",
"containsKey": "application"
}
},
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
}
]
},
Условия
Условие определяет, соответствует ли значение определенным критериям. Поддерживаются такие условия:
"equals": "stringValue"
"notEquals": "stringValue"
"like": "stringValue"
"notLike": "stringValue"
"match": "stringValue"
"matchInsensitively": "stringValue"
"notMatch": "stringValue"
"notMatchInsensitively": "stringValue"
"contains": "stringValue"
"notContains": "stringValue"
"in": ["stringValue1","stringValue2"]
"notIn": ["stringValue1","stringValue2"]
"containsKey": "keyName"
"notContainsKey": "keyName"
"less": "dateValue"
|"less": "stringValue"
|"less": intValue
"lessOrEquals": "dateValue"
|"lessOrEquals": "stringValue"
|"lessOrEquals": intValue
"greater": "dateValue"
|"greater": "stringValue"
|"greater": intValue
"greaterOrEquals": "dateValue"
|"greaterOrEquals": "stringValue"
|"greaterOrEquals": intValue
"exists": "bool"
Для less
, greater
и greaterOrEquals
, lessOrEquals
если тип свойства не соответствует типу условия, возникает ошибка. Сравнение строк выполняется с помощью InvariantCultureIgnoreCase
.
При использовании условий like
notLike
в значении укажите подстановочный знак (*
). Значение не должно содержать более одного подстановочного знака.
При использовании match
условий notMatch
укажите хэштег (#
) для сопоставления цифры, вопросительного знака (?
) для буквы и точки (.
) для сопоставления любого символа и любого другого символа, соответствующего фактическому символу. Хотя match
и notMatch
учитывает регистр, все остальные условия, которые оценивают stringValue
регистр без учета регистра. Альтернативные варианты без учета регистра доступны в matchInsensitively
и notMatchInsensitively
.
Поля
Условия, которые оценивают, могут ли значения свойств в полезных данных запроса ресурса соответствовать определенным критериям, используя field
выражение. Поддерживаются следующие поля.
name
fullName
- Возвращает полное имя ресурса. Полное имя ресурса — это имя ресурса, заданное любыми родительскими именами ресурсов (например
myServer/myDatabase
).
- Возвращает полное имя ресурса. Полное имя ресурса — это имя ресурса, заданное любыми родительскими именами ресурсов (например
kind
type
location
- Поля расположений нормализуются для поддержки различных форматов. Например, значение
East US 2
считается эквивалентным значениюeastus2
. - Используйте global для ресурсов, которые зависят от расположения.
- Поля расположений нормализуются для поддержки различных форматов. Например, значение
id
- Возвращает ИД оцениваемого ресурса.
- Пример:
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type
- Возвращает тип управляемого удостоверения, включенный в ресурс.
tags
tags['<tagName>']
- Этот синтаксис в скобках поддерживает имена тегов, которые содержат такие знаки препинания, как дефис, точку или пробел.
tagName
— это имя тега, для которого проверяется условие.- Примеры:
tags['Acct.CostCenter']
гдеAcct.CostCenter
находится имя тега.
tags['''<tagName>''']
- Этот синтаксис в скобках поддерживает имена тегов, которые содержат апострофы благодаря использованию двойного апострофа.
tagName
— это имя тега, для которого проверяется условие.- Пример:
tags['''My.Apostrophe.Tag''']
где'My.Apostrophe.Tag'
находится имя тега.
Примечание.
tags.<tagName>
,tags[tagName]
иtags[tag.with.dots]
все еще являются приемлемыми способами объявления поля тегов. Однако предпочтительными являются выражения, указанные выше.Список псевдонимов свойств указан в разделе Псевдонимы.
Примечание.
В
field
выражениях, ссылающихся на псевдоним массива[*]
, каждый элемент в массиве вычисляется по отдельности с логическимand
между элементами. Дополнительные сведения см. в статье Ссылки на свойства ресурсов массива.
Условия, использующие field
выражения, могут заменить устаревший синтаксис "source": "action"
определения политики, который использовался для операций записи. Например, это больше не поддерживается:
{
"source": "action",
"like": "Microsoft.Network/publicIPAddresses/*"
}
Но требуемое поведение можно достичь с помощью field
логики:
{
"field": "type",
"equals": "Microsoft.Network/publicIPAddresses"
}
Использование тегов с параметрами
Значение параметра передается полю тега. Передача параметра полю тега повышает гибкость определения политики во время ее назначения.
В следующем примере concat
используется для создания подстановки полей тегов для тега tagName
с именем значения параметра. Если этот тег не существует, modify
эффект используется для добавления тега с использованием значения того же именованного тега, установленного в родительской группе ресурсов аудита, с помощью resourcegroup()
функции подстановки.
{
"if": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
},
"then": {
"effect": "modify",
"details": {
"operations": [
{
"operation": "add",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[resourcegroup().tags[parameters('tagName')]]"
}
],
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/4a9ae827-6dc8-4573-8ac7-8239d42aa03f"
]
}
}
}
Значение
Условия, которые оценивают, соответствует ли значение определенным критериям, может быть сформировано с помощью value
выражения. Значения могут быть литералами, значениями параметров или возвращаемыми значениями любых поддерживаемых функций шаблонов.
Предупреждение
Если результатом функции шаблона является ошибка, оценка политики завершится сбоем. Неудачная оценка является неявной deny
. Дополнительные сведения см. в разделе Аvoiding template failures (Предотвращение сбоев шаблонов). Используйте принудительное применениеmode , doNotEnforce
чтобы предотвратить влияние неудачной оценки на новые или обновленные ресурсы при тестировании и проверке нового определения политики.
Примеры значений
Этот пример правила политики используется value
для сравнения результата resourceGroup()
функции и возвращаемого name
like
свойства с условием *netrg
. Правило запрещает любой ресурс не Microsoft.Network/*
type
в какой-либо группе ресурсов, имя которой заканчивается *netrg
.
{
"if": {
"allOf": [
{
"value": "[resourceGroup().name]",
"like": "*netrg"
},
{
"field": "type",
"notLike": "Microsoft.Network/*"
}
]
},
"then": {
"effect": "deny"
}
}
Этот пример правила политики используется value
для проверки результата нескольких вложенных функций equals
true
. Это правило запрещает любой ресурс, в котором нет хотя бы трех тегов.
{
"mode": "indexed",
"policyRule": {
"if": {
"value": "[less(length(field('tags')), 3)]",
"equals": "true"
},
"then": {
"effect": "deny"
}
}
}
Предотвращение сбоев шаблонов
Использование функций шаблона позволяет value
выполнять множество сложных вложенных функций. Если результатом функции шаблона является ошибка, оценка политики завершится сбоем. Неудачная оценка является неявной deny
. Пример value
сбоя в определенных сценариях:
{
"policyRule": {
"if": {
"value": "[substring(field('name'), 0, 3)]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
В приведенном выше примере правила политики используется подстрока() для сравнения первых трех символов name
abc
. Если name
значение меньше трех символов, substring()
функция приводит к ошибке. Эта ошибка приводит к тому, что политика становится эффектом deny
.
Вместо этого используйте функцию if(), чтобы проверить, являются ли первые три символа равными name
abc
, не допуская name
более коротких трех символов, чтобы вызвать ошибку:
{
"policyRule": {
"if": {
"value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
При использовании измененного правила if()
политики проверяет длину name
перед попыткой получить substring()
значение с менее чем тремя символами. Если name
слишком короткий, вместо этого возвращается значение "не начиная с abc" и сравнивается abc
с . Ресурс с коротким именем, который не начинается с abc
неработоспособности правила политики, но больше не вызывает ошибку во время оценки.
Count
Условия, которые подсчитывают, сколько элементов массива соответствует определенным критериям, можно сформировать с помощью count
выражения. К распространенным сценариям относится проверка соответствия условию “по крайней мере один из”, “только один из”, “все” или “ни одного” для элементов массива. Вычисляет count
каждый элемент массива для выражения условия и суммирует истинные результаты, которые затем сравниваются с оператором выражения.
Field count
Подсчитывает, сколько элементов массива в полезных данных запроса соответствуют выражению условия. Структура выражений field count
:
{
"count": {
"field": "<[*] alias>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
Следующие свойства используются со следующими свойствами field count
:
count.field
(обязательно): содержит путь к массиву и должен быть псевдонимом массива.count.where
(необязательно): выражение условия для индивидуального вычисления для каждого элемента массива псевдонимов массиваcount.field
. Если это свойство не указано, то все элементы массива с путем field оцениваются как true. В этом свойстве можно использовать любое condition (условие). Внутри этого свойства можно использовать логические операторы для создания сложных требований к оценке.condition
(обязательное): значение сравнивается с количеством элементов, соответствующих выражению условияcount.where
. Следует использовать числовое condition.
Дополнительные сведения о работе со свойствами массива в Политика Azure, включая подробное описание field count
способа вычисления выражения, см. в разделе "Ссылки на свойства ресурса массива".
Value count
Подсчет количества элементов массива, отвечающих условию. Это может быть массив литералов или ссылка на параметр-массив. Структура выражений value count
:
{
"count": {
"value": "<literal array | array parameter reference>",
"name": "<index name>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
Следующие свойства используются со следующими свойствами value count
:
count.value
(обязательно): массив для вычисления.count.name
(обязательно): имя индекса, состоящее из английских букв и цифр. Определяет имя для значения элемента массива, оцениваемого в текущей итерации. Имя используется для ссылки на текущее значение в условииcount.where
. Необязательный, еслиcount
выражение не является дочерним элементом другогоcount
выражения. Если это свойство не указано, неявно задается имя индекса"default"
.count.where
(необязательно): выражение условия для индивидуального вычисления для каждого элемента массиваcount.value
. Если это свойство не указано, то все элементы массива оцениваются как true. В этом свойстве можно использовать любое condition (условие). Внутри этого свойства можно использовать логические операторы для создания сложных требований к оценке. Значение перечисляемого в данный момент элемента массива можно получить, вызвав функцию current.condition
(обязательное): значение сравнивается с количеством элементов, соответствующих выражению условияcount.where
. Следует использовать числовое condition.
Функция current
Функция current()
доступна только в условии count.where
. Он возвращает значение элемента массива, который в настоящее время перечисляется вычислением count
выражения.
Использование выражения value count
current(<index name defined in count.name>)
. Например:current('arrayMember')
.current()
. Допускается только в том случае, еслиvalue count
выражение не является дочерним элементом другогоcount
выражения. Возвращает то же значение, что и приведенное выше выражение.
Если значение, возвращаемое вызовом, представляет собой объект, поддерживаются методы доступа к свойствам. Например: current('objectArrayMember').property
.
Использование выражения field count
current(<the array alias defined in count.field>)
. Например,current('Microsoft.Test/resource/enumeratedArray[*]')
.current()
. Допускается только в том случае, еслиfield count
выражение не является дочерним элементом другогоcount
выражения. Возвращает то же значение, что и приведенное выше выражение.current(<alias of a property of the array member>)
. Например,current('Microsoft.Test/resource/enumeratedArray[*].property')
.
Примеры использования выражения field count
Пример 1. Проверка пустости массива
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
},
"equals": 0
}
Пример 2. Проверка наличия только одного члена массива для соответствия выражению условия
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My unique description"
}
},
"equals": 1
}
Пример 3. Проверка наличия по крайней мере одного члена массива для соответствия выражению условия
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My common description"
}
},
"greaterOrEquals": 1
}
Пример 4. Убедитесь, что все члены массива объектов соответствуют выражению условия
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "description"
}
},
"equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}
Пример 5. Проверка того, соответствует ли хотя бы один элемент массива нескольким свойствам в выражении условия.
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
"equals": "Inbound"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
"equals": "Allow"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
"equals": "3389"
}
]
}
},
"greater": 0
}
Пример 6. Использование функции current()
внутри условий where
для доступа к значению перечисляемого в данный момент элемента массива в функции шаблона. Это условие проверяет, есть ли в виртуальной сети префикс адреса, не входящий в диапазон CIDR 10.0.0.0/24.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": false
}
},
"greater": 0
}
Пример 7. Использование функции field()
внутри условий where
для доступа к значению перечисляемого в данный момент элемента массива. Это условие проверяет, есть ли в виртуальной сети префикс адреса, не входящий в диапазон CIDR 10.0.0.0/24.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', first(field(('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]')))]",
"equals": false
}
},
"greater": 0
}
Примеры использования выражения value count
Пример 1. Проверка соответствия имени ресурса любому из заданных шаблонов имен.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Пример 2. Проверка соответствия имени ресурса любому из заданных шаблонов имен. В функции current()
не указывается имя индекса. Результат будет таким же, как в предыдущем примере.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Пример 3. Проверка соответствия имени ресурса любым указанным шаблонам имен, указанным параметром массива.
{
"count": {
"value": "[parameters('namePatterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Пример 4. Проверка того, отсутствуют ли какие-либо префиксы адресов виртуальной сети в списке утвержденных префиксов.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"count": {
"value": "[parameters('approvedPrefixes')]",
"name": "approvedPrefix",
"where": {
"value": "[ipRangeContains(current('approvedPrefix'), current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": true
},
},
"equals": 0
}
},
"greater": 0
}
Пример 5. Проверка того, определены ли все зарезервированные правила в группе безопасности сети. Свойства зарезервированных правил группы безопасности сети определяются в параметре массива, содержащем объекты.
Значение параметра:
[
{
"priority": 101,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 22
},
{
"priority": 102,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 3389
}
]
Политика:
{
"count": {
"value": "[parameters('reservedNsgRules')]",
"name": "reservedNsgRule",
"where": {
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority",
"equals": "[current('reservedNsgRule').priority]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
"equals": "[current('reservedNsgRule').access]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
"equals": "[current('reservedNsgRule').direction]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
"equals": "[current('reservedNsgRule').destinationPortRange]"
}
]
}
},
"equals": 1
}
},
"equals": "[length(parameters('reservedNsgRules'))]"
}
Функции политики
Функции можно использовать для привнесения дополнительной логики в правило политики. Они разрешаются в правиле политики определения политики и в значениях параметров, назначенных определениям политик в инициативе.
В рамках правила политики можно использовать все функции шаблона Resource Manager, кроме функций, определяемых пользователем и следующих.
copyIndex()
dateTimeAdd()
dateTimeFromEpoch
dateTimeToEpoch
deployment()
environment()
extensionResourceId()
lambda()
Дополнительные сведения см. в лямбда-listAccountSas()
listKeys()
listSecrets()
list*
managementGroup()
newGuid()
pickZones()
providers()
reference()
resourceId()
subscriptionResourceId()
tenantResourceId()
tenant()
variables()
Примечание.
Эти функции по-прежнему доступны в details.deployment.properties.template
рамках развертывания шаблона в deployIfNotExists
определении политики.
Следующая функция доступна для использования в правиле политики, но такое применение отличается от использования в шаблоне Azure Resource Manager (ARM):
utcNow()
: в отличие от шаблона ARM, это свойство можно использовать за пределами defaultValue.- Возвращает строку с текущими датой и временем в универсальном формате даты и времени ISO 8601:
yyyy-MM-ddTHH:mm:ss.fffffffZ
.
- Возвращает строку с текущими датой и временем в универсальном формате даты и времени ISO 8601:
Следующие функции доступны только в правилах политик.
addDays(dateTime, numberOfDaysToAdd)
dateTime
: [Обязательный] строка — строка в формате DateTime универсального формата ISO 8601 DateTime y-MM-ddTHH:mm:ss. FFFFFFFZ'numberOfDaysToAdd
: [обязательно] целое число — количество дней для добавления
field(fieldName)
fieldName
: [обязательный] строка — имя поля для извлечения- Возвращает значение этого поля из ресурса, оцениваемого условием If.
field
в основном используется сauditIfNotExists
полями, которые вычисляются, иdeployIfNotExists
ссылаться на них. Это можно увидеть на примере DeployIfNotExists.
requestContext().apiVersion
- Возвращает версию API запроса, который активировал оценку политики (пример:
2021-09-01
). Это значение указывает версию API, которая использовалась в запросе PUT/PATCH для оценки при создании или обновлении ресурсов. Последняя версия API всегда используется во время оценки соответствия для существующих ресурсов.
- Возвращает версию API запроса, который активировал оценку политики (пример:
policy()
Возвращает перечисленные ниже сведения об оцениваемой политике. Доступ к свойствам можно получить из возвращенного объекта (пример:
[policy().assignmentId]
).{ "assignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/policyAssignments/myAssignment", "definitionId": "/providers/Microsoft.Authorization/policyDefinitions/34c877ad-507e-4c82-993e-3452a6e0ad3c", "setDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/42a694ed-f65e-42b2-aa9e-8052e9740a92", "definitionReferenceId": "StorageAccountNetworkACLs" }
ipRangeContains(range, targetRange)
range
: [обязательный] строка — строка, указывающая диапазон IP-адресов, чтобы проверить, находится ли targetRange в пределах.targetRange
: [обязательный] строка — строка, указывающая диапазон IP-адресов для проверки как включенных в диапазон.- Возвращает логическое значение, указывающее, содержится ли диапазон IP-адресов targetRange в диапазоне range. Пустые диапазоны и сочетания семейств IP-адресов не принимаются и приводят к ошибке оценивания.
Поддерживаемые форматы:
- отдельные IP-адреса (примеры:
10.0.0.0
,2001:0DB8::3:FFFE
); - диапазон CIDR (примеры:
10.0.0.0/24
,2001:0DB8::/110
); - диапазон, определенный начальным и конечным IP-адресами (примеры:
192.168.0.1-192.168.0.9
,2001:0DB8::-2001:0DB8::3:FFFF
);
current(indexName)
- специальная функция, которую можно использовать только в выражениях count.
Пример функции политики
Этот пример правила политики использует resourceGroup
функцию ресурса для получения name
свойства, в сочетании с concat
функцией массива и объекта для создания like
условия, которое применяет имя ресурса для начала с имени группы ресурсов.
{
"if": {
"not": {
"field": "name",
"like": "[concat(resourceGroup().name,'*')]"
}
},
"then": {
"effect": "deny"
}
}
Ограничения правил политики
Ограничения, принудительно применяемые во время разработки
Ограничения на структуру правил политики применяются во время разработки или назначения политики. Попытки создать или назначить определения политик, превышающие эти ограничения, завершатся неудачей.
Ограничение | Значение | Дополнительные сведения |
---|---|---|
Выражения условий в условии if |
4096 | |
Выражения условий в блоке then |
128 | Применимо к политикам и deployIfNotExists политикам existenceCondition auditIfNotExists |
Число функций политики на правило политики | 2048 | |
Число параметров в функции политики | 128 | Пример: [function('parameter1', 'parameter2', ...)] |
Глубина вложенных функций политики | 64 | Пример: [function(nested1(nested2(...)))] |
Длина строки выражения для функций политики | 81920 | Пример: длина "[function(....)]" |
Field count выражения для каждого массива |
5 | |
Value count выражения для правила политики |
10 | |
Value count Число итерации выражений |
100 | Для вложенных Value count выражений это также включает число итерации родительского выражения. |
Ограничения, принудительно применяемые во время оценки
Ограничения на размер объектов, обрабатываемых функциями политики во время оценки политики. Эти ограничения не всегда могут быть применены во время разработки, так как они зависят от оцененного содержимого. Например:
{
"field": "name",
"equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}
Длина строки, созданной concat()
функцией, зависит от значения свойств в вычисляемом ресурсе.
Ограничение | Значение | Пример |
---|---|---|
Длина строки, возвращаемой функцией | 131072 | [concat(field('longString1'), field('longString2'))] |
Глубина cоставных объектов, предоставляемых функции в качестве параметра или возвращаемых ею | 128 | [union(field('largeObject1'), field('largeObject2'))] |
Количество узлов cоставных объектов, предоставляемых функции в качестве параметра или возвращаемых ею | 32768 | [concat(field('largeArray1'), field('largeArray2'))] |
Предупреждение
Политика, превышающая указанные выше ограничения во время оценки, фактически станет политикой deny
и может блокировать входящие запросы.
При написании политик со сложными функциями следует учитывать эти ограничения и протестировать политики для тех ресурсов, которые могут их превышать.
Следующие шаги
- Дополнительные сведения о структуре определения политики см. в основах, параметрах и псевдонимах.
- Для инициатив перейдите к структуре определения инициативы.
- Изучите примеры на странице примеров Политики Azure.
- Изучите сведения о действии политик.
- Узнайте о программном создании политик.
- Узнайте, как получать данные о соответствии.
- Узнайте, как исправлять несоответствующие ресурсы.
- Дополнительные сведения о группе управления см. в статье Упорядочивание ресурсов с помощью групп управления Azure.