Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Определенное условие — это дополнительная проверка, которую можно дополнительно добавить к назначению роли, чтобы обеспечить более детализированный контроль доступа. Например, можно добавить условие, которое требует наличия у объекта конкретного тега для чтения объекта. В этой статье описываются формат и синтаксис условий назначения ролей.
Формат условия
Чтобы лучше понять условия назначения ролей, полезно обращать внимание на формат.
Простое условие
Наиболее простое условие состоит из целевого действия и выражения. Действие — это операция, которую пользователь может выполнять с типом ресурса. Выражение — это оператор, который возвращает значение 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
данных содержит подоперацию "Список объектов blob". Условия с субоперациями имеют следующий формат.
(
(
!(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 для хранилища объектов Azure Blob
- Действия и атрибуты для условий назначения ролей Azure для Azure Queue Storage.
Атрибуты
В зависимости от выбранных действий атрибут может находиться в разных местах. При выборе нескольких действий для одного условия может быть меньше атрибутов, так как атрибуты должны быть доступны во всех выбранных действиях. Чтобы указать атрибут, необходимо включить источник в качестве префикса.
Источник атрибута | Описание | Код |
---|---|---|
Среда | Атрибут связан с средой запроса, например сетевым источником запроса или текущей датой и временем. |
@Environment |
Основной | Атрибут — это настраиваемый атрибут безопасности, назначенный субъекту, например пользователю или корпоративному приложению (субъекту-службе). | @Principal |
Запросить | Атрибут является частью запроса на действие, например, установка тега индекса блоба. | @Request |
Ресурс | Атрибут — это свойство ресурса, например имя контейнера. | @Resource |
Полный список атрибутов хранилища, которые можно использовать в условиях, см. в следующих разделах:
Атрибуты среды
Атрибуты среды связаны с обстоятельствами, при которых выполняется запрос на доступ, например дату и время дня или сетевую среду. Сетевая среда может подразумевать доступ через определенный закрытый конечный узел, подсеть виртуальной сети или, возможно, через любое частное соединение.
В следующей таблице перечислены поддерживаемые атрибуты среды для условий.
отображаемое имя | Описание | Атрибут | Тип |
---|---|---|---|
Приватная ссылка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
- Разрешить доступ на чтение больших двоичных объектов на основе тегов и настраиваемых атрибутов безопасности
- Субъект не отображается в источнике атрибутов
Атрибуты запроса
Атрибуты запроса связаны с критериями, указанными в запросе доступа, например, с указанным префиксом BLOB, которые должны быть включены в список.
Атрибуты ресурсов
Атрибуты ресурсов связаны с объектом, к которому запрашивается доступ, например имя учетной записи хранения, имя контейнера или включено ли иерархическое пространство имен для учетной записи хранения.
Операторы функций
В этом разделе перечислены операторы функций, доступные для создания условий.
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'} |
Существует
Свойство | Значение |
---|---|
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 && |
Description | Оператор и. |
Примеры | !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) |
Или
Свойство | Значение |
---|---|
Операторы | OR || |
Description | Оператор ИЛИ. |
Примеры | @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 ! |
Description | Оператор "Not" или оператор отрицания. |
Примеры | 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 StringStartsWithIgnoreCase |
Description | Сопоставление с учетом регистра (или без учета регистра). Значения начинаются со строки. |
СтрокаНеНачинаетсяС
Имущество | Значение |
---|---|
Операторы | 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: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 , тогда истинно.{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'} true {'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'} ложь |
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'} ложный |
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} истина |
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} ложь {10, 20} ForAllOfAllValues:NumericLessThan {25, 30} истина {10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30} ложный |
Специальные символы
Персонаж | Описание |
---|---|
* |
Символ звездочки (*) представляет собой подстановочный знак для сопоставления нескольких символов, который можно использовать с операторами Like . При необходимости можно экранировать звездочку, добавив обратный слэш \* . |
? |
Вопросительный знак (?) представляет собой сопоставление одного символа с подстановочным знаком, которое можно использовать с операторами Like . При необходимости можно экранировать вопросительный знак, добавив обратную косую черту \? . |
$ |
Знак доллара ($) используется для обозначения ключей тегов. В Azure PowerShell, если строка, заключенная в двойные кавычки (") включает знак доллара, необходимо префиксировать его с помощью обратной символики ('). Например: tags:Project<`$key_case_sensitive`$> . |
Группирование и приоритет
Если у вас есть три или более выражений для целевого действия с разными операторами между выражениями, порядок оценки является неоднозначным. Скобки ()
используются для группирования выражений и указания порядка вычисления выражений. Выражения, взятые в скобки, имеют самый высокий приоритет. Например, предположим, что имеется следующее выражение:
a AND b OR c
Добавлять скобки необходимо одним из следующих способов.
(a AND b) OR c
a AND (b OR c)