Поделиться через


Формат и синтаксис условия назначения роли 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'
    )
)

Схема, показывающая доступ на чтение к объектам blob с конкретным названием контейнера.

Как оценивается условие

Если пользователь пытается выполнить действие в назначении роли, которое не равно <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-объектов или очередей. К ним относятся следующие встроенные роли:

См. список действий хранилища, которые можно использовать в условиях:

Атрибуты

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

Источник атрибута Описание Код
Среда Атрибут связан с средой запроса, например сетевым источником запроса или текущей датой и временем.
@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 атрибут только в том случае, если в настоящее время у вас есть по крайней мере одна подсеть виртуальной сети с помощью конечных точек служб, настроенных в вашей подписке.

Основные атрибуты

Основные атрибуты — это настраиваемые атрибуты безопасности, назначенные субъекту безопасности, запрашивающим доступ к ресурсу. Субъект безопасности может быть пользователем или корпоративным приложением (служебный субъект).

Чтобы использовать основные атрибуты, необходимо иметь следующее:

Дополнительные сведения о настраиваемых атрибутах безопасности см. в следующем разделе:

Атрибуты запроса

Атрибуты запроса связаны с критериями, указанными в запросе доступа, например, с указанным префиксом 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)

Следующие шаги