Формат и синтаксис условия назначения роли 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 данных содержит вложенные операции "Список больших двоичных объектов". Условия с субоперациями имеют следующий формат.

Формат для действия с субоперацией.

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

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

Атрибуты

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

Источник атрибута 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 linkPrivate endpointатрибуты и Subnet атрибуты применяются только к назначению, например учетной записи хранения, а не источнику. Дополнительные сведения об операциях копирования, к которых применяется, выберите каждый атрибут в таблице, чтобы просмотреть дополнительные сведения.
2 Можно использовать Private endpoint атрибут только в том случае, если в настоящее время в подписке настроена хотя бы одна частная конечная точка.
3 Можно использовать Subnet атрибут только в том случае, если в настоящее время у вас есть по крайней мере одна подсеть виртуальной сети с помощью конечных точек служб, настроенных в вашей подписке.

Атрибуты субъекта

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

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

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

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

Атрибуты запроса связаны с критериями, указанными в запросе доступа, например указанным префиксом больших двоичных объектов, которые необходимо перечислить.

Атрибуты ресурсов

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

Операторы функций

В этом разделе перечислены операторы функций, доступные для создания условий.

ActionMatches

Свойство Значение
Operator ActionMatches
Description Проверяет, соответствует ли текущее действие указанному шаблону действия.
Примеры ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Если действие проверка равно "Microsoft.служба хранилища/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'}
Значение true, 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)

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