Формат и синтаксис условия назначения роли Azure
Определенное условие — это дополнительная проверка, которую можно дополнительно добавить к назначению роли, чтобы обеспечить более детализированный контроль доступа. Например, можно добавить условие, которое требует наличия у объекта конкретного тега, чтобы объект можно было считать. В этой статье описываются формат и синтаксис условий назначения ролей.
Формат условия
Чтобы лучше понять условия назначения ролей, полезно обращать внимание на формат.
Простое условие
Наиболее простое условие состоит из целевого действия и выражения. Действие — это операция, которую пользователь может выполнять с типом ресурса. Выражение — это оператор, который возвращает значение true или false, определяющее, разрешено ли выполнение действия.
Ниже представлен формат простого условия.
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
)
)
Следующее условие имеет действие "Чтение большого двоичного объекта". Выражение проверяет, равно ли имя контейнера значению blobs-example-container.
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
StringEquals 'blobs-example-container'
)
)
Оценка условия
Если пользователь пытается выполнить действие в назначении роли, которое не равно <action>
, !(ActionMatches)
возвращает значение true, и общее условие принимает значение true, чтобы разрешить выполнение действия.
Если пользователь пытается выполнить действие <action>
в назначении роли, !(ActionMatches)
принимает значение false, поэтому вычисляется значение выражения. Если результат выражения равен true, то общее условие принимает значение true, чтобы разрешить выполнение действия <action>
. В противном случае выполнение действия <action>
не допускается.
В следующем псевдокоде представлен еще один способ чтения этого условия.
if a user tries to perform an action in the role assignment that does not match <action>
{
Allow action to be performed
}
else
{
if <attribute> <operator> <value> is true
{
Allow <action> to be performed
}
else
{
Do not allow <action> to be performed
}
}
Субоперации
Некоторые действия имеют субоперации. Например, действие Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
данных содержит вложенные операции "Список больших двоичных объектов". Условия с субоперациями имеют следующий формат.
(
(
!(ActionMatches{'<action>'}
AND
SubOperationMatches{'<subOperation>'})
)
OR
(
<attribute> <operator> <value>
)
)
Множество действий
Условие может включать несколько действий, которые необходимо разрешить, если условие истинно. Если для одного условия выбрано несколько действий, набор атрибутов, которые можно выбрать для проверки условий, может сузиться, поскольку атрибуты должны быть доступны во всех выбранных действиях.
(
(
!(ActionMatches{'<action>'})
AND
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
)
)
Множество выражений
Условие может включать несколько выражений. В зависимости от оператора атрибуты можно проверять по нескольким значениям.
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> {<value>, <value>, <value>}
AND | OR
<attribute> <operator> <value>
)
)
Множество условий
Можно также сочетать условия для назначения нескольких действий.
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> {<value>, <value>, <value>}
AND | OR
<attribute> <operator> <value>
)
)
AND
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> <value>
)
)
Синтаксис условия
Ниже представлен синтаксис для условия назначения роли.
(
(
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
...
)
OR
(
<attribute> <operator> {<value, <value>, ...}
AND | OR
<attribute> <operator> {<value>, <value>, ...}
AND | OR
...
)
)
AND
(
(
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
...
)
OR
(
<attribute> <operator> {<value, <value>, ...}
AND | OR
<attribute> <operator> {<value>, <value>, ...}
AND | OR
...
)
)
AND
...
Действия
В настоящее время условия можно добавить в встроенные или пользовательские назначения ролей, которые имеют действия хранилища BLOB-объектов или данных хранилища очередей. К ним относятся следующие встроенные роли:
- участник данных BLOB-объектов хранилища;
- владелец данных BLOB-объектов хранилища;
- читатель данных больших двоичных объектов хранилища.
- Участник для данных очереди хранилища
- Обработчик сообщений данных в очереди хранилища
- Отправитель сообщений данных в очередь хранилища
- Читатель данных очереди хранилища
Список действий хранилища, которые можно использовать в условиях, см. в следующей статье:
- Действия и атрибуты условий назначения ролей Azure для Хранилище BLOB-объектов Azure
- Действия и атрибуты для условий назначения ролей Azure для хранилища очередей Azure.
Атрибуты
В зависимости от выбранных действий атрибут может находиться в разных местах. При выборе нескольких действий для одного условия может быть меньше атрибутов, так как атрибуты должны быть доступны во всех выбранных действиях. Чтобы указать атрибут, необходимо включить источник в качестве префикса.
Источник атрибута | Description | Код |
---|---|---|
Среда | Атрибут связан с средой запроса, например сетевым источником запроса или текущей датой и временем. |
@Environment |
Основной | Атрибут — это настраиваемый атрибут безопасности, назначенный субъекту, например пользователю или корпоративному приложению (субъекту-службе). | @Principal |
Запросить | Атрибут является частью запроса на действие, например задание тега индекса БОЛЬШОго двоичного объекта. | @Request |
Ресурс | Атрибут — это свойство ресурса, например имя контейнера. | @Resource |
Полный список атрибутов хранилища, которые можно использовать в условиях, см. в следующих разделах:
Атрибуты среды
Атрибуты среды связаны с обстоятельствами, при которых выполняется запрос на доступ, например дату и время дня или сетевую среду. Сетевая среда может быть связана с доступом через определенную частную конечную точку или подсеть виртуальной сети или, возможно, через любую приватную связь.
В следующей таблице перечислены поддерживаемые атрибуты среды для условий.
отображаемое имя; | Description | Атрибут | Тип |
---|---|---|---|
Приватный канал1 | Используйте этот атрибут в условиях, чтобы требовать доступа по любой приватной ссылке. | isPrivateLink |
Boolean |
Частная конечная точка1,2 | Используйте этот атрибут в условиях, чтобы ограничить доступ к определенной частной конечной точке. | Microsoft.Network/privateEndpoints |
String |
Подсеть1,3 | Используйте этот атрибут в условиях, чтобы ограничить доступ из определенной подсети. | Microsoft.Network/virtualNetworks/subnets |
String |
СЕЙЧАС в формате UTC | Используйте этот атрибут в условиях, чтобы ограничить доступ к объектам в течение определенных периодов времени. | UtcNow |
DateTime |
1 Для операций копирования, Is private link
Private endpoint
атрибуты и Subnet
атрибуты применяются только к назначению, например учетной записи хранения, а не источнику. Дополнительные сведения об операциях копирования, к которых применяется, выберите каждый атрибут в таблице, чтобы просмотреть дополнительные сведения.
2 Можно использовать Private endpoint
атрибут только в том случае, если в настоящее время в подписке настроена хотя бы одна частная конечная точка.
3 Можно использовать Subnet
атрибут только в том случае, если в настоящее время у вас есть по крайней мере одна подсеть виртуальной сети с помощью конечных точек служб, настроенных в вашей подписке.
Атрибуты субъекта
Основные атрибуты — это настраиваемые атрибуты безопасности, назначенные субъекту безопасности, запрашивающим доступ к ресурсу. Субъект безопасности может быть пользователем или корпоративным приложением (субъект-служба).
Чтобы использовать атрибуты субъекта, необходимо иметь следующее:
- Разрешения Microsoft Entra для пользователя, выполнившего вход, например роль администратора назначения атрибутов
- Настраиваемые атрибуты безопасности, определенные в идентификаторе Microsoft Entra
Дополнительные сведения о настраиваемых атрибутах безопасности см. в следующем разделе:
- Добавление или отключение настраиваемых атрибутов безопасности в идентификаторе Microsoft Entra
- Разрешить доступ на чтение больших двоичных объектов на основе тегов и настраиваемых атрибутов безопасности
- Субъект не отображается в источнике атрибутов
Атрибуты запроса
Атрибуты запроса связаны с критериями, указанными в запросе доступа, например указанным префиксом больших двоичных объектов, которые необходимо перечислить.
Атрибуты ресурсов
Атрибуты ресурсов связаны с объектом, к которому запрашивается доступ, например имя учетной записи хранения, имя контейнера или включено ли иерархическое пространство имен для учетной записи хранения.
Операторы функций
В этом разделе перечислены операторы функций, доступные для создания условий.
ActionMatches
Свойство | Значение |
---|---|
Operator | ActionMatches |
Description | Проверяет, соответствует ли текущее действие указанному шаблону действия. |
Примеры | ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} Если проверяемое действие равно "Microsoft.Storage/storageAccounts/blobServices/container/blobs/read", то значение true ActionMatches{'Microsoft.Authorization/roleAssignments/*'} Если проверяемое действие равно "Microsoft.Authorization/roleAssignments/write", то значение true ActionMatches{'Microsoft.Authorization/roleDefinitions/*'} Если проверяемое действие равно "Microsoft.Authorization/roleAssignments/write", то значение false |
SubOperationMatches
Свойство | Значение |
---|---|
Operator | SubOperationMatches |
Description | Проверяет, соответствует ли текущая подоперция указанному шаблону субоперации. |
Примеры | SubOperationMatches{'Blob.List'} |
Exists
Свойство | Значение |
---|---|
Operator | Exists |
Description | Проверяет, существует ли указанный атрибут. |
Примеры | Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot] |
Атрибуты поддерживают 1 | Имя области шифрования Моментальный снимок Идентификатор версии |
1 Оператор Exists
поддерживается только для этих атрибутов в визуальном построителе условий ABAC в портал Azure. Оператор можно добавить в Exists
любой атрибут с помощью других средств, таких как PowerShell, Azure CLI, REST API и редактор кода условий в портал Azure.
Логические операторы
В этом разделе перечислены логические операторы, доступные для создания условий.
And
Свойство | Значение |
---|---|
Операторы | AND && |
Description | Оператор and. |
Примеры | !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) |
Or
Свойство | Значение |
---|---|
Операторы | OR || |
Description | Оператор or. |
Примеры | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' OR NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId |
Not
Свойство | Значение |
---|---|
Операторы | NOT ! |
Description | Оператор отрицания. |
Примеры | NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] |
Логические операторы сравнения
В этом разделе перечислены логические операторы сравнения, доступные для создания условий.
Свойство | Значение |
---|---|
Операторы | BoolEquals BoolNotEquals |
Description | Логическое сравнение. |
Примеры | @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true |
Операторы сравнения строк
В этом разделе перечислены операторы сравнения строк, доступные для создания условий.
StringEquals
Свойство | Значение |
---|---|
Операторы | StringEquals StringEqualsIgnoreCase |
Description | Сопоставление с учетом регистра (или без учета регистра). Значения должны точно совпадать со строкой. |
Примеры | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' |
StringNotEquals
Свойство | Значение |
---|---|
Операторы | StringNotEquals StringNotEqualsIgnoreCase |
Description | Отрицание StringEquals оператора (или StringEqualsIgnoreCase ) |
StringStartsWith
Свойство | Значение |
---|---|
Операторы | StringStartsWith StringStartsWithIgnoreCase |
Description | Сопоставление с учетом регистра (или без учета регистра). Значения начинаются со строки. |
StringNotStartsWith
Свойство | Значение |
---|---|
Операторы | StringNotStartsWith StringNotStartsWithIgnoreCase |
Description | Отрицание StringStartsWith оператора (или StringStartsWithIgnoreCase ) |
StringLike
Свойство | Значение |
---|---|
Операторы | StringLike StringLikeIgnoreCase |
Description | Сопоставление с учетом регистра (или без учета регистра). Значения могут включать подстановочные знаки для одного символа (? ) или множества символов (* ) в любом месте строки. При необходимости эти символы можно экранировать, добавив обратную косую черту \* и \? . |
Примеры | @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*' Resource[name1] StringLike 'a*c?' Если Resource[name1] равно abcd, то true Resource[name1] StringLike 'A*C?' Если Resource[name1] равно abcd, то false Resource[name1] StringLike 'a*c' Если Resource[name1] равно abcd, то false |
StringNotLike
Свойство | Значение |
---|---|
Операторы | StringNotLike StringNotLikeIgnoreCase |
Description | Отрицание StringLike оператора (или StringLikeIgnoreCase ) |
Операторы числовых сравнений
В этом разделе перечислены числовые операторы сравнения, доступные для создания условий.
Свойство | Значение |
---|---|
Операторы | NumericEquals NumericNotEquals NumericGreaterThan NumericGreaterThanEquals NumericLessThan NumericLessThanEquals |
Description | Сопоставление чисел. Поддерживаются только целые числа. |
Операторы сравнения DateTime
В этом разделе перечислены операторы сравнения даты и времени, доступные для создания условий.
Свойство | Значение |
---|---|
Операторы | DateTimeEquals DateTimeNotEquals DateTimeGreaterThan DateTimeGreaterThanEquals DateTimeLessThan DateTimeLessThanEquals |
Description | Проверка полной точности с форматом: yyyy-mm-ddThh:mm:ss.mmmmmmmZ Используется для идентификатора версии BLOB-объектов, моментального снимка BLOB-объектов и UTC сейчас. |
Примеры | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' |
Операторы сравнения GUID
В этом разделе перечислены глобально уникальные операторы сравнения идентификаторов (GUID), доступные для создания условий.
Свойство | Значение |
---|---|
Операторы | GuidEquals GuidNotEquals |
Description | Без учета регистра в соответствии с форматом: 00000000-0000-0000-0000-000000000000 Используется для идентификации ресурса, например идентификатора субъекта или идентификатора определения роли. |
Примеры |
Перекрестные операторы сравнения продуктов
В этом разделе перечислены операторы сравнения продуктов, доступные для создания условий.
ForAnyOfAnyValues
Свойство | Значение |
---|---|
Операторы | ForAnyOfAnyValues:StringEquals ForAnyOfAnyValues:StringEqualsIgnoreCase ForAnyOfAnyValues:StringNotEquals ForAnyOfAnyValues:StringNotEqualsIgnoreCase ForAnyOfAnyValues:StringLike ForAnyOfAnyValues:StringLikeIgnoreCase ForAnyOfAnyValues:StringNotLike ForAnyOfAnyValues:StringNotLikeIgnoreCase ForAnyOfAnyValues:NumericEquals ForAnyOfAnyValues:NumericNotEquals ForAnyOfAnyValues:NumericGreaterThan ForAnyOfAnyValues:NumericGreaterThanEquals ForAnyOfAnyValues:NumericLessThan ForAnyOfAnyValues:NumericLessThanEquals ForAnyOfAnyValues:GuidEquals ForAnyOfAnyValues:GuidNotEquals |
Description | Если хотя бы одно значение слева удовлетворяет сравнению по крайней мере с одним значением справа, выражение принимает значение true. Имеет следующий формат: ForAnyOfAnyValues:<BooleanFunction> . Поддерживает несколько строк и чисел. |
Примеры | @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'} Если имя области шифрования равно validScope1 или validScope2 значение true.{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'} true {'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'} false |
ForAllOfAnyValues
Свойство | Значение |
---|---|
Операторы | ForAllOfAnyValues:StringEquals ForAllOfAnyValues:StringEqualsIgnoreCase ForAllOfAnyValues:StringNotEquals ForAllOfAnyValues:StringNotEqualsIgnoreCase ForAllOfAnyValues:StringLike ForAllOfAnyValues:StringLikeIgnoreCase ForAllOfAnyValues:StringNotLike ForAllOfAnyValues:StringNotLikeIgnoreCase ForAllOfAnyValues:NumericEquals ForAllOfAnyValues:NumericNotEquals ForAllOfAnyValues:NumericGreaterThan ForAllOfAnyValues:NumericGreaterThanEquals ForAllOfAnyValues:NumericLessThan ForAllOfAnyValues:NumericLessThanEquals ForAllOfAnyValues:GuidEquals ForAllOfAnyValues:GuidNotEquals |
Description | Если каждое значение слева удовлетворяет сравнению по крайней мере с одним значением справа, выражение принимает значение true. Имеет следующий формат: ForAllOfAnyValues:<BooleanFunction> . Поддерживает несколько строк и чисел. |
Примеры | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'} {'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'} true {'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'} false |
ForAnyOfAllValues
Свойство | Значение |
---|---|
Операторы | ForAnyOfAllValues:StringEquals ForAnyOfAllValues:StringEqualsIgnoreCase ForAnyOfAllValues:StringNotEquals ForAnyOfAllValues:StringNotEqualsIgnoreCase ForAnyOfAllValues:StringLike ForAnyOfAllValues:StringLikeIgnoreCase ForAnyOfAllValues:StringNotLike ForAnyOfAllValues:StringNotLikeIgnoreCase ForAnyOfAllValues:NumericEquals ForAnyOfAllValues:NumericNotEquals ForAnyOfAllValues:NumericGreaterThan ForAnyOfAllValues:NumericGreaterThanEquals ForAnyOfAllValues:NumericLessThan ForAnyOfAllValues:NumericLessThanEquals ForAnyOfAllValues:GuidEquals ForAnyOfAllValues:GuidNotEquals |
Description | Если по крайней мере одно значение слева удовлетворяет сравнению с каждым значением справа, выражение принимает значение true. Имеет следующий формат: ForAnyOfAllValues:<BooleanFunction> . Поддерживает несколько строк и чисел. |
Примеры | {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18} true |
ForAllOfAllValues
Свойство | Значение |
---|---|
Операторы | ForAllOfAllValues:StringEquals ForAllOfAllValues:StringEqualsIgnoreCase ForAllOfAllValues:StringNotEquals ForAllOfAllValues:StringNotEqualsIgnoreCase ForAllOfAllValues:StringLike ForAllOfAllValues:StringLikeIgnoreCase ForAllOfAllValues:StringNotLike ForAllOfAllValues:StringNotLikeIgnoreCase ForAllOfAllValues:NumericEquals ForAllOfAllValues:NumericNotEquals ForAllOfAllValues:NumericGreaterThan ForAllOfAllValues:NumericGreaterThanEquals ForAllOfAllValues:NumericLessThan ForAllOfAllValues:NumericLessThanEquals ForAllOfAllValues:GuidEquals ForAllOfAllValues:GuidNotEquals |
Description | Если каждое значение слева удовлетворяет сравнению с каждым значением справа, выражение принимает значение true. Имеет следующий формат: ForAllOfAllValues:<BooleanFunction> . Поддерживает несколько строк и чисел. |
Примеры | {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18} false {10, 20} ForAllOfAllValues:NumericLessThan {25, 30} true {10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30} false |
Специальные символы
Символ | Description |
---|---|
* |
Звездочка (*) представляет собой сопоставление нескольких символов с подстановочным знаком, которое можно использовать с операторами Like . При необходимости можно экранировать звездочку, добавив обратную косую черту \* . |
? |
Вопросительный знак (?) представляет собой сопоставление одного символа с подстановочным знаком, которое можно использовать с операторами Like . При необходимости можно экранировать вопросительный знак, добавив обратную косую черту \? . |
$ |
Знак доллара ($) используется для обозначения ключей тегов. В Azure PowerShell, если строка, заключенная в двойные кавычки (") включает знак доллара, необходимо префиксировать его с помощью обратной символики ('). Например: tags:Project<`$key_case_sensitive`$> . |
Группирование и приоритет
Если у вас есть три или более выражений для целевого действия с разными операторами между выражениями, порядок оценки является неоднозначным. Скобки ()
используются для группирования выражений и указания порядка вычисления выражений. Выражения, взятые в скобки, имеют самый высокий приоритет. Например, предположим, что имеется следующее выражение:
a AND b OR c
Добавлять скобки необходимо одним из следующих способов.
(a AND b) OR c
a AND (b OR c)