Éléments de politique JSON IAM : Condition - AWS Identity and Access Management

Éléments de politique JSON IAM : Condition

L'élément Condition (ou bloc Condition) vous permet de spécifier des conditions lorsqu'une politique est appliquée. L'élément Condition est facultatif. Dans l'élément Condition, vous créez des expressions dans lesquelles vous utilisez des opérateurs de condition (égal, inférieur à, etc.) pour faire correspondre les clés de condition et valeurs de la politique avec les clés et valeurs du contexte de la demande. Pour de plus amples informations sur le contexte de la demande, veuillez consulter Requête.

"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}

La clé de condition que vous spécifiez peut être une clé de condition globale ou une clé de condition spécifique au service. Les clés de condition globale possèdent le préfixe aws:. Les clés de condition spécifiques au service possèdent le préfixe du service. Par exemple, Amazon EC2 vous permet d'écrire une condition à l'aide de la clé ec2:InstanceType, qui est propre à ce service. Pour connaître les clés de condition IAM spécifiques au service ayant le préfixe iam:, veuillez consulter Clés de contexte de condition IAM et AWS STS.

Les noms de clé de condition ne sont pas sensibles à la casse. Par exemple, inclure la clé de condition aws:SourceIP revient à tester AWS:SourceIp. La sensibilité à la casse des valeurs des clés de condition dépend de l'opérateur de condition que vous utilisez. Par exemple, la condition suivante inclut l'opérateur StringEquals pour s'assurer que seules les demandes effectuées par johndoe correspondent. Les utilisateurs nommés JohnDoe se voient refuser l'accès.

"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }}

La condition suivante utilise l'opérateur StringEqualsIgnoreCase pour la correspondance avec les utilisateurs nommés johndoe ou JohnDoe.

"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "johndoe" }}

Certaines clés de condition prennent en charge des paires clé-valeur qui vous permettent de spécifier une partie du nom de clé. Les exemples incluent la clé de condition globale aws:RequestTag/tag-key, la clé AWS KMS kms:EncryptionContext:encryption_context_key et la clé de condition ResourceTag/tag-key prise en charge par plusieurs services.

  • Si vous utilisez la clé de condition ResourceTag/tag-key pour un service comme Amazon EC2, vous devez spécifier un nom de clé pour tag-key.

  • Les noms de clé ne sont pas sensibles à la casse. Cela signifie que si vous spécifiez "aws:ResourceTag/TagKey1": "Value1" dans l'élément de condition de votre politique, la condition correspond à une clé de balise de ressource nommée TagKey1 ou tagkey1, mais pas aux deux.

  • Les services AWS qui prennent en charge ces attributs peuvent vous permettre de créer plusieurs noms de clés qui ne diffèrent que par la casse. Par exemple, vous pouvez baliser une instance Amazon EC2 avec les interfaces ec2=test1 et EC2=test2. Lorsque vous utilisez une condition comme "aws:ResourceTag/EC2": "test1" pour autoriser l'accès à cette ressource, le nom de clé correspond aux deux balises, mais une seule valeur correspond. Cela peut entraîner des échecs de condition inattendus.

Important

En tant que bonne pratique, assurez-vous que les membres de votre compte suivent une convention de dénomination cohérente pour les attributs avec paire clé-valeur. Les exemples incluent les balises ou les contextes de chiffrement AWS KMS. Vous pouvez l'imposer en utilisant la clé de condition aws:TagKeys pour l’étiquettage ou la clé kms:EncryptionContextKeys pour le contexte de chiffrement AWS KMS.

Contexte de la demande

Lorsqu'un principal fait une demande à AWS, AWS rassemble les informations de la demande en un contexte de la demande. Ces informations servent à évaluer et autoriser la demande. Vous pouvez utiliser l'élément Condition d'une politique JSON pour tester des conditions spécifiques par rapport au contexte de la demande. Par exemple, vous pouvez créer une politique utilisant la clé de condition aws:CurrentTime pour autoriser un utilisateur à effectuer des actions uniquement pendant une plage de dates spécifique.

Lorsqu'une demande est soumise, l’interface AWS évalue chaque clé de condition de la politique et renvoie la valeur true (vrai), false (faux), not present (pas présent), et parfois null (nul) (chaîne de données vide). L'absence de clé dans la demande est considérée comme une absence de correspondance. Par exemple, la politique suivante autorise la suppression de votre propre dispositif d'authentification multi-facteur (MFA), mais uniquement si vous vous êtes connecté avec MFA au cours de la dernière heure (3 600 secondes).

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice", "iam:DeleteVirtualMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}", "Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } } }

Le contexte de la demande peut renvoyer les valeurs suivantes :

  • True : si le demandeur s'est connecté avec MFA au cours de la dernière heure ou moins, la condition renvoie la valeur true.

  • False : si le demandeur s'est connecté avec MFA il y a plus d'une heure, la condition renvoie la valeur false.

  • Not present (Absent) : si le demandeur a fait une demande en utilisant ses clés d'accès utilisateur IAM dans la AWS CLI ou l'API AWS, il n'y a pas de clé. Dans ce cas, la clé est manquante et il n'y a pas de correspondance.

  • Null : pour les clés de condition définies par l'utilisateur, telles que la transmission des balises d'une demande, il est possible d'inclure une chaîne vide. Dans ce cas, la valeur dans le contexte de la demande est null. Une valeur nulle peut renvoyer true dans certains cas. Par exemple, si vous utilisez l'opérateur de condition ForAllValues à valeurs multiples avec la clé de condition aws:TagKeys, un résultat inattendu peut se produire si le contexte de la demande renvoie null. Pour de plus amples informations, veuillez consulter aws:TagKeys et Utilisation de plusieurs clés et valeurs.

Bloc Condition

L'exemple suivant illustre le format de base d'un élément Condition :

"Condition": {"StringLike": {"s3:prefix": ["janedoe/*"]}}

Une valeur de la demande est représentée par une clé. Dans ce cas, il s'agit de s3:prefix. La valeur clé de contexte est comparée à une valeur que vous spécifiez comme valeur littérale, par exemple janedoe/*. Le type de comparaison à effectuer est spécifié par l'opérateur de condition (ici, StringLike). Vous pouvez créer des conditions qui comparent des chaînes, des dates, des numéros et autres à l'aide d'opérateurs de comparaison booléens standard comme est égal à, supérieur à ou inférieur à. Lorsque vous utilisez des opérateurs de chaîne ou des opérateurs ARN, vous pouvez également utiliser une variable de stratégie dans la valeur de condition. L'exemple suivant inclut la variable aws:username.

"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}

Dans certains cas, les clés peuvent contenir plusieurs valeurs. Par exemple, une demande à Amazon DynamoDB peut retourner ou mettre à jour plusieurs attributs d'une table. Une politique d'accès aux tables DynamoDB peut inclure la clé dynamodb:Attributes, qui contient tous les attributs spécifiés dans la demande. Vous pouvez tester les divers attributs de la demande par rapport à une liste d'attributs autorisés dans une politique à l'aide d'opérateurs de définition dans l'élément Condition. Pour plus d’informations, veuillez consulter Création d'une condition avec plusieurs clés ou valeurs.

Lors de l'évaluation de la politique dans une demande, AWS remplace la clé par la valeur correspondante dans la demande. (Dans cet exemple, AWS utilisera la date et l'heure de la demande.) L'évaluation de la condition retourne True ou False, ce qui est pris en compte pour déterminer si la politique dans sa totalité autorise ou refuse la demande.

Plusieurs valeurs dans un élément Condition

Un élément Condition peut contenir plusieurs conditions, et chaque condition peut également inclure plusieurs paires clé-valeur. L'illustration suivante décrit ce scénario.

Pour plus d'informations, consultez Création d'une condition avec plusieurs clés ou valeurs.