Format et syntaxe des conditions d’attribution de rôle Azure

Une condition est une vérification supplémentaire que vous pouvez éventuellement ajouter à votre attribution de rôle pour fournir un contrôle d’accès plus précis. Par exemple, vous pouvez ajouter une condition qui oblige un objet à porter une étiquette spécifique pour être lu. Cet article décrit le format et la syntaxe des conditions d’attribution de rôle.

Format de condition

Pour mieux comprendre les conditions d’attribution de rôle, il est utile d’examiner le format.

Condition simple

La condition la plus simple se compose d’une action ciblée et d’une expression. Une action est une opération qu’un utilisateur peut effectuer sur un type de ressource. Une expression est une instruction dont la valeur est vraie ou fausse, ce qui détermine si l’action est autorisée à être exécutée.

L’exemple suivant illustre le format d’une condition simple.

Format of a simple condition with a single action and a single expression.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

La condition suivante a une action « Lire un blob ». L’expression vérifie si le nom du conteneur est blobs-example-container.

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
    )
    OR 
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
        StringEquals 'blobs-example-container'
    )
)

Diagram showing read access to blobs with particular container name.

Évaluation d’une condition

Si un utilisateur tente d’effectuer une action dans l’attribution de rôle qui n’est pas <action>, !(ActionMatches) prend la valeur true, et la condition globale prend la valeur true pour permettre l’exécution de l’action.

Si un utilisateur tente d’effectuer <action> dans l’attribution de rôle, !(ActionMatches) prend la valeur false, et l’expression est donc évaluée. Si l’expression prend la valeur true, la condition globale prend la valeur true pour permettre l’exécution de <action>. Dans le cas contraire, <action> n’est pas autorisé à être exécutée.

Le pseudo-code suivant montre une autre façon de lire cette condition.

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
    }
}

Sous-opérations

Certaines actions comportent des sous-opérations. Par exemple, l’action Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read de données a la sous-opération « Répertorier les objets blob ». Les conditions avec sous-opérations ont le format suivant.

Format for an action with a suboperation.

(
    (
        !(ActionMatches{'<action>'}
        AND
        SubOperationMatches{'<subOperation>'})

    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Actions multiples

Une condition peut inclure plusieurs actions que vous souhaitez autoriser si la condition est vraie. Si vous sélectionnez plusieurs actions pour une même condition, vous pouvez choisir moins d’attributs pour votre condition, car ceux-ci doivent être disponibles au sein des actions sélectionnées.

Format for multiple actions to allow if condition is true.

(
    (
        !(ActionMatches{'<action>'})
        AND
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Expressions multiples

Une condition peut inclure plusieurs expressions. Selon l’opérateur, les attributs peuvent être vérifiés par rapport à plusieurs valeurs.

Format for multiple expressions using Boolean operators and multiple values.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)

Plusieurs conditions

Vous pouvez également combiner des conditions pour cibler plusieurs actions.

Format for multiple conditions using Boolean operator.

(
    (
        !(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>
    )
)

Syntaxe de condition

L’exemple suivant illustre la syntaxe d’une condition d’attribution de rôle.

(
    (
        !(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
...

Actions

Actuellement, il est possible d’ajouter des conditions à des attributions de rôles intégrés ou personnalisés qui ont des actions de données Stockage Blob ou de Stockage File d’attente. Sont inclus les rôles intégrés suivants :

Pour obtenir la liste des actions de stockage que vous pouvez utiliser dans les conditions, consultez :

Attributs

En fonction des actions sélectionnées, l’attribut peut être trouvé à différents emplacements. Si vous sélectionnez plusieurs actions pour une même condition, il peut y avoir moins d’attributs à choisir pour votre condition, car les attributs doivent être disponibles pour toutes les actions sélectionnées. Pour spécifier un attribut, vous devez inclure la source en tant que préfixe.

Source de l’attribut Description Code
Environment L’attribut est associé à l’environnement de la requête, tel que l’origine réseau de la requête ou la date et l’heure actuelles.
(Les attributs d’environnement sont actuellement en préversion.)
@Environment
Principal L’attribut est un attribut de sécurité personnalisé attribué au principal, tel qu’un utilisateur ou une application d’entreprise (principal de service). @Principal
Requête L’attribut fait partie de la demande d’action, par exemple la définition de la balise d’index d’objet blob. @Request
Ressource L’attribut est une propriété de la ressource, telle qu’un nom de conteneur. @Resource

Pour obtenir la liste complète des attributs de stockage que vous pouvez utiliser dans des conditions, consultez :

Attributs d’environnement

Les attributs d’environnement sont associés aux circonstances dans lesquelles la demande d’accès est effectuée, par exemple la date et l’heure du jour ou l’environnement réseau. L’environnement réseau peut être si l’accès est effectué via un point de terminaison privé spécifique ou un sous-réseau de réseau virtuel, ou sur n’importe quelle liaison privée.

Important

Les attributs d’environnement sont actuellement en PRÉVERSION. Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

Le tableau suivant répertorie les attributs d’environnement pris en charge pour les conditions.

Nom d’affichage Description Attribut Type
Est une liaison privée1 Utilisez cet attribut dans des conditions pour exiger l’accès via n’importe quelle liaison privée. isPrivateLink Booléen
Point de terminaison privé1,2 Utilisez cet attribut dans des conditions pour restreindre l’accès sur un point de terminaison privé spécifique. Microsoft.Network/privateEndpoints Chaîne
Sous-réseau1,3 Utilisez cet attribut dans des conditions pour restreindre l’accès à partir d’un sous-réseau spécifique. Microsoft.Network/virtualNetworks/subnets Chaîne
UTC maintenant Utilisez cet attribut dans des conditions pour restreindre l’accès aux objets pendant des périodes spécifiques. UtcNow DateTime

1 Pour les opérations de copie, les attributs Is private link, Private endpoint et Subnet s’appliquent uniquement à la destination, comme un compte de stockage, et non à la source. Pour plus d’informations sur les opérations de copie concernées, sélectionnez chaque attribut dans le tableau pour afficher plus de détails.
2 Vous ne pouvez utiliser l’attribut Private endpoint que si vous disposez actuellement d’au moins un point de terminaison privé configuré dans votre abonnement.
3 Vous ne pouvez utiliser l’attribut Subnet que si vous disposez actuellement d’au moins un sous-réseau de réseau virtuel à l’aide de points de terminaison de service configurés dans votre abonnement.

Attributs de principal

Les attributs de principal sont des attributs de sécurité personnalisés attribués au principal de sécurité demandant l’accès à une ressource. Le principal de sécurité peut être un utilisateur ou une application d’entreprise (principal de service).

Pour utiliser les attributs du principal, vous devez disposer des éléments suivants :

Pour plus d’informations sur les attributs de sécurité personnalisés, consultez :

Attributs de requête

Les attributs de requête sont associés aux critères spécifiés dans une demande d’accès, tels que le préfixe spécifié des objets blob à répertorier.

Attributs des ressources

Les attributs de ressource sont associés à l’objet auquel l’accès est demandé, tel que le nom du compte de stockage, le nom du conteneur ou si l’espace de noms hiérarchique est activé pour le compte de stockage.

Opérateurs de fonction

Cette section répertorie les opérateurs de fonction disponibles pour construire des conditions.

ActionMatches

Propriété Valeur
Opérateur ActionMatches
Description Vérifie si l’action actuelle correspond au modèle d’action spécifié.
Exemples ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Si l’action en cours de vérification équivaut à « Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read », alors true

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Si l’action en cours de vérification équivaut à « Microsoft.Authorization/roleAssignments/write », alors true

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Si l’action en cours de vérification équivaut à « Microsoft.Authorization/roleAssignments/write », alors false

SubOperationMatches

Propriété Valeur
Opérateur SubOperationMatches
Description Vérifie si la sous-opération actuelle correspond au modèle de sous-opération spécifié.
Exemples SubOperationMatches{'Blob.List'}

Exists

Propriété Valeur
Opérateur Exists
Description Vérifie si l’attribut spécifié existe.
Exemples Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Prise en charge des attributs1 Nom de l'étendue de chiffrement
Capture instantanée
ID de version

1 L’opérateur Exists est pris en charge uniquement pour ces attributs dans le générateur de conditions ABAC visuel dans le portail Azure. Vous pouvez ajouter l’opérateur Exists à n’importe quel attribut à l’aide d’autres outils, tels que PowerShell, Azure CLI, l’API REST et l’éditeur de code de condition dans le portail Azure.

Opérateurs logiques

Cette section répertorie les opérateurs logiques disponibles pour construire des conditions.

And

Propriété Valeur
Opérateurs AND
&&
Description Opérateur AND.
Exemples !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Or

Propriété Valeur
Opérateurs OR
||
Description Opérateur OR.
Exemples @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

Propriété Valeur
Opérateurs NOT
!
Description Opérateur NOT ou de négation.
Exemples NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Opérateurs de comparaison booléenne

Cette section répertorie les opérateurs de comparaison booléenne disponibles pour construire des conditions.

Propriété Valeur
Opérateurs BoolEquals
BoolNotEquals
Description Comparaison booléenne.
Exemples @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Opérateurs de comparaison de chaîne

Cette section répertorie les opérateurs de comparaison de chaîne disponibles pour construire des conditions.

StringEquals

Propriété Valeur
Opérateurs StringEquals
StringEqualsIgnoreCase
Description Correspondance du respect de la casse (ou du non-respect de la casse). Les valeurs doivent correspondre exactement à la chaîne.
Exemples @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Propriété Valeur
Opérateurs StringNotEquals
StringNotEqualsIgnoreCase
Description Opérateur de négation de StringEquals (ou StringEqualsIgnoreCase).

StringStartsWith

Propriété Valeur
Opérateurs StringStartsWith
StringStartsWithIgnoreCase
Description Correspondance du respect de la casse (ou du non-respect de la casse). Les valeurs commencent par la chaîne.

StringNotStartsWith

Propriété Valeur
Opérateurs StringNotStartsWith
StringNotStartsWithIgnoreCase
Description Opérateur de négation de StringStartsWith (ou StringStartsWithIgnoreCase).

StringLike

Propriété Valeur
Opérateurs StringLike
StringLikeIgnoreCase
Description Correspondance du respect de la casse (ou du non-respect de la casse). Les valeurs peuvent inclure un caractère générique de correspondance à plusieurs caractères (*) ou un caractère générique de correspondance à un seul caractère (?) n’importe où dans la chaîne. Le cas échéant, ces caractères peuvent être placés dans une séquence d’échappement en ajoutant une barre oblique inverse : \* et \?.
Exemples @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Si Resource[name1] équivaut à « abcd », alors true

Resource[name1] StringLike 'A*C?'
Si Resource[name1] équivaut à « abcd », alors false

Resource[name1] StringLike 'a*c'
Si Resource[name1] équivaut à « abcd », alors false

StringNotLike

Propriété Valeur
Opérateurs StringNotLike
StringNotLikeIgnoreCase
Description Opérateur de négation de StringLike (ou StringLikeIgnoreCase).

Opérateurs de comparaison numérique

Cette section répertorie les opérateurs de comparaison numérique disponibles pour construire des conditions.

Propriété Valeur
Opérateurs NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Description Correspondance de nombres. Seuls les nombres entiers sont pris en charge.

Opérateurs de comparaison de DateHeure

Cette section répertorie les opérateurs de comparaison de date/heure disponibles pour construire des conditions.

Propriété Valeur
Opérateurs DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Description Vérification de précision absolue avec le format : yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Utilisé pour l’ID de version d’objet blob, l’instantané d’objet blob et l’heure UTC maintenant.
Exemples @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

Opérateurs de comparaison GUID

Cette section répertorie les opérateurs de comparaison d’identificateur global unique (GUID) disponibles pour construire des conditions.

Propriété Valeur
Opérateurs GuidEquals
GuidNotEquals
Description Correspondance sans respect de la casse avec le format : 00000000-0000-0000-0000-000000000000. Permet d’identifier une ressource, telle que l’ID de principal ou l’ID de définition de rôle.
Exemples

Opérateurs de comparaison entre produits

Cette section répertorie les opérateurs de comparaison entre produits disponibles pour construire des conditions.

ForAnyOfAnyValues

Propriété Valeur
Opérateurs 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 Si au moins une valeur du côté gauche satisfait la comparaison avec au moins une valeur du côté droit, alors l’expression prend la valeur true. Est au format : ForAnyOfAnyValues:<BooleanFunction>. Prend en charge plusieurs chaînes et nombres.
Exemples @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Si le nom de l’étendue de chiffrement est validScope1 ou validScope2, alors true.

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'}
true

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'}
false

ForAllOfAnyValues

Propriété Valeur
Opérateurs 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 Si chaque valeur du côté gauche satisfait à la comparaison avec au moins une valeur du côté droit, alors l’expression prend la valeur true. Est au format : ForAllOfAnyValues:<BooleanFunction>. Prend en charge plusieurs chaînes et nombres.
Exemples @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

Propriété Valeur
Opérateurs 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 Si au moins une valeur du côté gauche satisfait à la comparaison avec chaque valeur du côté droit, alors l’expression prend la valeur true. Est au format : ForAnyOfAllValues:<BooleanFunction>. Prend en charge plusieurs chaînes et nombres.
Exemples {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
true

ForAllOfAllValues

Propriété Valeur
Opérateurs 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 Si chaque valeur du côté gauche satisfait à la comparaison avec chaque valeur du côté droit, alors l’expression prend la valeur true. Est au format : ForAllOfAllValues:<BooleanFunction>. Prend en charge plusieurs chaînes et nombres.
Exemples {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
false

{10, 20} ForAllOfAllValues:NumericLessThan {25, 30}
true

{10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30}
false

Caractères spéciaux

Caractère Description
* Un astérisque (*) représente une correspondance de caractère générique à plusieurs caractères qui peut être utilisée avec les opérateurs Like. Le cas échéant, vous pouvez placer un astérisque dans une séquence d’échappement en ajoutant une barre oblique inverse : \*.
? Un point d’interrogation (?) représente une correspondance de caractère générique à un seul caractère qui peut être utilisée avec les opérateurs Like. Le cas échéant, vous pouvez placer un point d’interrogation dans une séquence d’échappement en ajoutant une barre oblique inverse : \?.
$ Un signe de dollar ($) est utilisé pour aider à délimiter les clés de balises. Dans Azure PowerShell, si une chaîne placée entre guillemets doubles (") comprend un signe de dollar, vous devez la faire précéder d’un accent grave (`). Par exemple : tags:Project<`$key_case_sensitive`$>.

Regroupement et priorité

Si vous avez au moins trois expressions pour une action ciblée avec des opérateurs différents entre les expressions, l’ordre d’évaluation est ambigu. Vous utilisez des parenthèses () pour regrouper des expressions et spécifier l’ordre dans lequel les expressions sont évaluées. Les expressions entre parenthèses ont une priorité plus élevée. Prenons l’exemple de l’expression suivante :

a AND b OR c

Vous devez ajouter des parenthèses de l’une des manières suivantes :

(a AND b) OR c
a AND (b OR c)

Étapes suivantes