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.
(
(
!(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'
)
)
É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.
(
(
!(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.
(
(
!(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.
(
(
!(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.
(
(
!(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 :
- Contributeur aux données Blob du stockage
- Propriétaire des données Blob du stockage
- Lecteur des données blob du stockage
- Contributeur aux données en file d’attente du stockage
- Processeur de messages de données en file d’attente du stockage
- Expéditeur de messages de données en file d’attente du stockage
- Lecteur des données en file d’attente du stockage
Pour obtenir la liste des actions de stockage que vous pouvez utiliser dans les conditions, consultez :
- Actions et attributs pour les conditions d’attribution de rôle Azure pour le service Stockage Blob Azure
- Actions et attributs pour les conditions d’attribution de rôle Azure pour le Stockage File d'attente Azure.
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. |
@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.
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 :
- Autorisations Microsoft Entra pour l’utilisateur connecté, telles que le rôle Administrateur de l’attribution des attributs
- Attributs de sécurité personnalisés dans Microsoft Entra ID
Pour plus d’informations sur les attributs de sécurité personnalisés, consultez :
- Ajouter ou désactiver des attributs de sécurité personnalisés dans Microsoft Entra ID
- Autoriser l’accès en lecture aux objets BLOB en fonction des balises et des attributs de sécurité personnalisés
- Le principal ne s’affiche pas dans la source de l’attribut
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 attributs 1 | 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)