Éléments de politique JSON IAM : Opérateurs de condition - AWS Identity and Access Management

Éléments de politique JSON IAM : Opérateurs de condition

Utilisez les opérateurs de condition de l'élément Condition pour faire correspondre la clé de condition et la valeur de la politique avec les valeurs du contexte de la demande. Pour en savoir plus sur l'élément Condition, consultez Éléments de politique JSON IAM : Condition.

L'opérateur de condition que vous pouvez utiliser dans une politique dépend de la clé de condition que vous choisissez. Vous pouvez choisir une clé de condition globale ou une clé de condition spécifique au service. Pour savoir quel opérateur de condition vous pouvez utiliser pour une clé de condition globale, veuillez consulter clés de contexte de condition globales AWS. Pour savoir quel opérateur de condition vous pouvez utiliser pour une clé de condition spécifique au service, veuillez consulter Actions, ressources et clés de condition pour les services AWS et choisissez le service que vous souhaitez afficher.

Important

Si la clé que vous spécifiez dans une condition de stratégie n'est pas présente dans le contexte de la requête, les valeurs ne correspondent pas et la condition est fausse. Si la condition de stratégie requiert qu'il n'y ait aucune correspondance de clé, tels que StringNotLike ou ArnNotLike et la touche de droite n'est pas présente, la condition est vraie. Cette logique s'applique à tous les opérateurs de condition, sauf ...IfExists et Null check. Ces opérateurs testent si la clé est présente (existe) dans le contexte de demande.

Les opérateurs de condition peuvent être regroupés dans les catégories suivantes :

Opérateurs de condition de chaîne

Les opérateurs de condition de chaîne permettent de créer des éléments Condition qui limitent l'accès après comparaison d'une clé à une valeur de chaîne.

Opérateur de condition Description

StringEquals

Correspondance exacte, respect de la casse

StringNotEquals

Correspondance négative

StringEqualsIgnoreCase

Correspondance exacte, non respect de la casse

StringNotEqualsIgnoreCase

Correspondance négative, non respect de la casse

StringLike

Correspondance avec respect de la casse. Les valeurs peuvent inclure un caractère générique (*) correspondant à plusieurs caractères et un caractère générique (?) correspondant à un seul caractère n'importe où dans la chaîne. Vous devez spécifier des caractères génériques pour obtenir des correspondances de chaînes partielles.

Note

Si une clé contient plusieurs valeurs, StringLike peut être qualifié avec les opérateurs d'ensemble ForAllValues:StringLike et ForAnyValue:StringLike. Pour plus d'informations, veuillez consulter Création d'une condition avec plusieurs clés ou valeurs.

StringNotLike

Correspondance avec non respect de la casse. Les valeurs peuvent inclure un caractère générique (*) correspondant à plusieurs caractères ou un caractère générique (?) correspondant à un seul caractère n'importe où dans la chaîne.

Par exemple, l'instruction suivante contient un élément Condition qui utilise la clé aws:PrincipalTag pour spécifier que le principal qui fait la requête doit être balisé avec la catégorie de tâche iamuser-admin .

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::account-id:user/*", "Condition": {"StringEquals": {"aws:PrincipalTag/job-category": "iamuser-admin"}} } }

Si la clé que vous spécifiez dans une condition de politique n'est pas présente dans le contexte de demande, les valeurs ne correspondent pas. Dans cet exemple, la clé aws:PrincipalTag/job-category est présente dans le contexte de demande si le principal utilise un utilisateur IAM avec des balises attachées. Elle est également incluse pour un principal utilisant un rôle IAM avec des balises ou des balises de session attachées. Si un utilisateur sans la balise tente d'afficher ou de modifier une clé d'accès, la condition renvoie false et la demande est implicitement refusée par cette instruction.

Vous pouvez utiliser une variable de politique avec l'opérateur de condition String.

L'exemple suivant utilise l'opérateur de condition StringLike pour établir une correspondance entre une chaîne et une variable de politique afin de créer une politique qui permet à un utilisateur IAM de se servir de la console Amazon S3 pour gérer son propre « répertoire de base » dans un compartiment Amazon S3. La politique autorise les actions spécifiées dans un compartiment S3 si l'élément s3:prefix correspond à l'un des modèles spécifiés.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::BUCKET-NAME", "Condition": {"StringLike": {"s3:prefix": [ "", "home/", "home/${aws:username}/" ]}} }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::BUCKET-NAME/home/${aws:username}", "arn:aws:s3:::BUCKET-NAME/home/${aws:username}/*" ] } ] }

Pour consulter un exemple de politique qui montre comment utiliser l'élément Condition pour limiter l'accès à des ressources en fonction d'un ID d'application et d'un ID utilisateur pour la fédération d'identité web, reportez-vous à Amazon S3 : permet aux utilisateurs Amazon Cognito d'accéder aux objets dans leur compartiment.

Opérateurs de condition numériques

Les opérateurs de condition numériques permettent de créer des éléments Condition qui limitent l'accès après comparaison d'une clé à un entier ou une valeur décimale.

Opérateur de condition Description

NumericEquals

Correspondance

NumericNotEquals

Correspondance négative

NumericLessThan

Correspondance « Inférieur à »

NumericLessThanEquals

Correspondance « Inférieur ou égal à »

NumericGreaterThan

Correspondance « Supérieur à »

NumericGreaterThanEquals

Correspondance « Supérieur ou égal à »

Par exemple, l'instruction suivante contient un élément Condition qui utilise l'opérateur de condition NumericLessThanEquals avec la clé s3:max-keys pour spécifier que le demandeur peut répertorier jusqu'à 10 objets dans example_bucket à la fois.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example_bucket", "Condition": {"NumericLessThanEquals": {"s3:max-keys": "10"}} } }

Si la clé que vous spécifiez dans une condition de politique n'est pas présente dans le contexte de demande, les valeurs ne correspondent pas. Dans cet exemple, la clé s3:max-keys est toujours présente dans la demande lorsque vous effectuez l'opération ListBucket. Si cette politique autorisait toutes les opérations Amazon S3, seules les opérations incluant la clé de contexte max-keys avec une valeur inférieure ou égale à 10 seraient autorisées.

Vous ne pouvez pas utiliser une variable de politique avec l'opérateur de condition Numeric.

Opérateurs de condition de date

Les opérateurs de condition de date permettent de créer des éléments Condition qui limitent l'accès après comparaison d'une clé à une valeur date/heure. Vous pouvez utiliser ces opérateurs de condition avec la clé aws:CurrentTime ou aws:EpochTime. Vous devez spécifier les valeurs date/heure à l'aide de l'une des implémentations W3C des formats de date ISO 8601 ou du format d'époque (UNIX).

Note

Les caractères génériques ne sont pas autorisés dans les opérateurs de condition de date.

Opérateur de condition Description

DateEquals

Correspondance à une date spécifique

DateNotEquals

Correspondance négative

DateLessThan

Correspondance avant une date et heure spécifiques

DateLessThanEquals

Correspondance à ou avant une date et heure spécifiques

DateGreaterThan

Correspondance après une date et heure spécifiques

DateGreaterThanEquals

Correspondance à ou après une date et heure spécifiques

Par exemple, l'instruction suivante contient un élément Condition qui utilise l'opérateur de condition DateGreaterThan avec la clé aws:TokenIssueTime. Cette condition spécifie que les informations d'identification de sécurité temporaires utilisées pour effectuer la demande ont été publiées en 2020. Cette politique peut être mise à jour par programme tous les jours pour s'assurer que les membres du compte utilisent de nouvelles informations d'identification.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::account-id:user/*", "Condition": {"DateGreaterThan": {"aws:TokenIssueTime": "2020-01-01T00:00:01Z"}} } }

Si la clé que vous spécifiez dans une condition de politique n'est pas présente dans le contexte de demande, les valeurs ne correspondent pas. La clé aws:TokenIssueTime n'est présente dans le contexte de demande que lorsque le principal utilise des informations d'identification temporaires pour effectuer la demande. La clé n'est pas présente dans les demandes de la AWS CLI, de l'API AWS ou du kit SDK AWS effectuées à l'aide de clés d'accès. Dans cet exemple, si un utilisateur IAM tente d'afficher ou de modifier une clé d'accès, la demande est refusée.

Vous ne pouvez pas utiliser une variable de politique avec l'opérateur de condition Date.

Opérateurs de condition booléens

Les opérateurs de condition booléens permettent de créer des éléments Condition qui limitent l'accès après comparaison d'une clé à « true » ou « false ».

Opérateur de condition Description

Bool

Correspondance booléenne

Par exemple, cette politique basée sur l'identité utilise l'opérateur de condition Bool avec la clé aws:SecureTransport pour refuser toutes les actions S3 sur un compartiment et son contenu si la demande n'est pas effectuée via SSL.

Important

Cette politique ne permet aucune action. Utilisez cette stratégie conjointement à d'autres stratégies qui autorisent des actions spécifiques.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "BooleanExample", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }

Si la clé que vous spécifiez dans une condition de politique n'est pas présente dans le contexte de demande, les valeurs ne correspondent pas. La clé aws:SecureTransport est toujours présente dans le contexte de demande.

Vous pouvez utiliser une variable de politique avec l'opérateur de condition Boolean.

Opérateurs de condition binaires

L'opérateur de condition BinaryEquals permet de créer des éléments Condition qui analysent les valeurs de clé qui utilisent un format binaire. Il compare la valeur de la clé spécifiée, octet par octet, à une représentation encodée au format Base64 de la valeur binaire dans la politique.

"Condition" : { "BinaryEquals": { "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA==" } }

Si la clé que vous spécifiez dans une condition de politique n'est pas présente dans le contexte de demande, les valeurs ne correspondent pas.

Vous ne pouvez pas utiliser une variable de politique avec l'opérateur de condition Binary.

Opérateurs de condition d'adresse IP

Les opérateurs de condition d'adresse IP permettent de créer des éléments Condition qui limitent l'accès après comparaison d'une clé à une adresse IPv4 ou IPv6 ou une plage d'adresses IP. Vous utilisez ces opérateurs avec la clé aws:SourceIp. La valeur doit utiliser au format CIDR standard (par exemple, 203.0.113.0/24 ou 2001:DB8:1234:5678::/64). Si vous spécifiez une adresse IP sans préfixe de routage associé, IAM utilise la valeur de préfixe par défaut /32.

Certains services AWS prennent en charge l'utilisation d'IPv6 pour représenter une plage de chiffres zéros. Pour savoir si un service prend en charge IPv6, consultez la documentation correspondante.

Opérateur de condition Description

IpAddress

Adresse IP ou plage d'adresses IP spécifiée

NotIpAddress

Toutes les adresses IP à l'exception de l'adresse IP ou de la plage d'adresse IP spécifiée

Par exemple, l'instruction suivante utilise l'opérateur de condition IpAddress avec la clé aws:SourceIp pour spécifier que la demande doit provenir d'une adresse IP comprise dans la plage 203.0.113.0 à 203.0.113.255.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::account-id:user/*", "Condition": {"IpAddress": {"aws:SourceIp": "203.0.113.0/24"}} } }

La clé de condition aws:SourceIp est résolue à l'aide de l'adresse IP d'où provient la demande. Si la demande provient d'une instance Amazon EC2, aws:SourceIp correspond à l'adresse IP publique de l'instance.

Si la clé que vous spécifiez dans une condition de politique n'est pas présente dans le contexte de demande, les valeurs ne correspondent pas. La clé aws:SourceIp figure toujours dans le contexte de demande, sauf lorsque le demandeur utilise un point de terminaison VPC pour effectuer la demande. Dans ce cas, la condition renvoie false et la demande est implicitement refusée par cette instruction.

Vous ne pouvez pas utiliser une variable de politique avec l'opérateur de condition IP Address.

L'exemple suivant montre comment combiner les adresses IPv4 et IPv6 pour couvrir la totalité des adresses IP valides de l'organisation. Nous recommandons de compléter les politiques de l'organisation par vos plages d'adresses IPv6 (en plus des plages d'adresses IPv4 dont vous disposez déjà) pour être sûr que les politiques continuent à fonctionner lors de la transition vers IPv6.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "someservice:*", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "203.0.113.0/24", "2001:DB8:1234:5678::/64" ] } } } }

La clé de condition aws:SourceIp fonctionne uniquement dans une politique JSON si vous appelez l'API que vous testez directement en tant qu'utilisateur. En revanche, si vous utilisez un service pour appeler le service cible en votre nom, ce service voit l'adresse IP du service appelant plutôt que celle de l'utilisateur d'origine. Par exemple, cela peut se produire si vous utilisez AWS CloudFormation pour appeler Amazon EC2 en vue de créer automatiquement des instances. Actuellement, il n'est pas possible de transmettre l'adresse IP d'origine au service cible via un service appelant à des fins d'évaluation dans une politique JSON. Pour ces types d'appels d'API de service, vous ne devez pas utiliser la clé de condition aws:SourceIp.

Opérateurs de condition d'Amazon Resource Name (ARN)

Les opérateurs de condition d'Amazon Resource Name (ARN) permettent de créer des éléments Condition qui limitent l'accès après comparaison d'une clé à un ARN. L'ARN est considéré comme étant une chaîne.

Opérateur de condition Description

ArnEquals, ArnLike

Correspondance à l'ARN avec respect de la casse. Chacun des six composants de l'ARN, séparés par deux points, est vérifié séparément et chacun peut inclure un caractère générique correspondant à plusieurs caractères (*) ou un caractère générique correspondant à un caractère (?). Les opérateurs de condition ArnEquals et ArnLike se comportent de manière identique.

ArnNotEquals, ArnNotLike

Correspondance négative à l'ARN. Les opérateurs de condition ArnNotEquals et ArnNotLike se comportent de manière identique.

Dans certains cas, un opérateur de chaîne pourrait correspondre, mais pas un opérateur ARN. Dans ce cas, essayez d'utiliser des opérateurs de condition de chaîne.

Par exemple, si le modèle suivant est utilisé pour la mise en correspondance :

arn:aws:someservice:*:111122223333:finance/*

Et la valeur suivante est présente dans la demande :

arn:aws:someservice:us-east-2:999999999999:store/abc:111122223333:finance/document.txt

Avec une condition StringLike, la correspondance est concluante. Le premier astérisque correspond à us-east-2:999999999999:store/abc:. Avec une condition ArnLike, qui met en correspondance des éléments entre deux points, la correspondance échoue. Le premier astérisque correspond uniquement à us-east-2, mais pas à 999999999999:store/abc:.

Vous pouvez utiliser une variable de politique avec l'opérateur de condition ARN.

L'exemple de politique basée sur les ressources suivant montre une politique attachée à une file d'attente Amazon SQS à laquelle vous souhaitez envoyer des messages SNS. Elle donne l'autorisation à Amazon SNS d'envoyer des messages à une ou plusieurs files d'attente de votre choix, mais uniquement si le service envoie le message pour le compte d'une ou plusieurs rubriques Amazon SNS spécifiques. Vous spécifiez la file d'attente dans le champ Resource, tandis que la rubrique Amazon SNS est la valeur de la clé SourceArn.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"AWS": "123456789012"}, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:REGION:123456789012:QUEUE-ID", "Condition": {"ArnEquals": {"aws:SourceArn": "arn:aws:sns:REGION:123456789012:TOPIC-ID"}} } }

Si la clé que vous spécifiez dans une condition de politique n'est pas présente dans le contexte de demande, les valeurs ne correspondent pas. La clé aws:SourceArn figure dans le contexte de demande uniquement si une ressource déclenche un service pour appeler un autre service au nom du propriétaire de la ressource. Si un utilisateur IAM tente d'effectuer cette opération directement, la condition renvoie false et la demande est implicitement refusée par cette instruction.

Opérateurs de condition ...IfExists

Vous pouvez ajouter IfExists à la fin de n'importe quel nom d'opérateur de condition, à l'exception de la condition Null, par exemple,StringLikeIfExists. Ceci équivaut à spécifier que « Si la clé de politique est présente dans le contexte de la demande, la clé doit être traitée comme spécifié dans la politique. Si la clé n'est pas présente, la condition évalue l'élément de condition comme vrai. » Les autres éléments de condition dans l'instruction peuvent toujours se traduire par une absence de correspondance, mais pas par une clé manquante lors de la vérification avec ...IfExists. Si vous utilisez un élément "Effect": "Deny" avec un opérateur de condition négatif tel que StringNotEqualsIfExists, la demande est toujours refusée, même s'il manque la balise.

Exemple d'utilisation de IfExists

De nombreuses clés de condition contiennent des informations se rapportant à un type spécifique de ressources et elles ne sont présentes que lorsque vous accédez à ce type de ressources. Ces clés de condition n'existent pas pour les autres types de ressources. Le fait que l'instruction ne s'applique qu'à un type spécifique de ressources ne pose pas problème. Toutefois, dans certains scénarios, une même instruction peut s'appliquer à plusieurs types de ressources, par exemple lorsque l'instruction de politique référence les actions de plusieurs services ou lorsqu'une action donnée d'un service accède à différents types de ressources dans un même service. Dans ce cas, l'inclusion d'une clé de condition applicable uniquement à une des ressources dans l'instruction de politique peut provoquer l'échec de l'élément Condition et de ce fait, l'élément "Effect" ne s'applique pas.

Prenons l'exemple de politique suivant :

{ "Version": "2012-10-17", "Statement": { "Sid": "THISPOLICYDOESNOTWORK", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": {"StringLike": {"ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ]}} } }

L'intention de la politique précédente est de permettre à l'utilisateur de lancer n'importe quelle instance de type t1, t2 ou m3. Toutefois, le lancement d'une instance requiert non seulement l'accès à l'instance proprement dite, mais également à de nombreuses ressources telles que des images, des paires de clés, des groupes de sécurité, etc. L'ensemble de l'instruction est évalué par rapport à chaque ressource requise pour le lancement de l'instance. Ces ressources supplémentaires n'ont pas la clé de condition ec2:InstanceType et, par conséquent, la vérification StringLike échoue et l'utilisateur n'est autorisé à lancer aucun type d'instance. Pour éviter ce problème, utilisez l'opérateur de condition StringLikeIfExists à la place. De cette façon, le test n'est effectué que si la clé de condition existe. Cela peut être interprété comme suit : « Si la ressource en cours de vérification est dotée d'une clé de condition ec2:InstanceType, l'action peut uniquement être autorisée si la valeur de la clé commence par « t1.* », « t2. » ou « m3.* ». Si la ressource en cours de vérification n'est pas dotée de cette clé de condition, peu importe. » L'instruction DescribeActions inclut les actions requises pour afficher l'instance dans la console.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RunInstance", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "StringLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ]}} }, { "Sid": "DescribeActions", "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:DescribeVpcs", "ec2:DescribeKeyPairs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }] }

Opérateur de condition pour vérifier l'existence de clés de condition

Utilisez un opérateur de condition Null pour vérifier si une clé de condition est absente au moment de l'autorisation. Dans l'instruction de politique, utilisez true (la clé n'existe pas ; elle est nulle) ou false (la clé existe et sa valeur n'est pas nulle).

Vous ne pouvez pas utiliser une variable de politique avec l'opérateur de condition Null.

Par exemple, vous pouvez utiliser cet opérateur de condition pour déterminer si un utilisateur effectue l'opération à l'aide de ses propres informations d'identification ou d'informations d'identification temporaires. S'il utilise des informations d'identification temporaires, la clé aws:TokenIssueTime existe et elle est dotée d'une valeur. L'exemple suivant illustre une condition qui spécifie que l'utilisateur ne doit pas avoir recours à des informations d'identification temporaires (la clé ne doit pas exister) pour exécuter l'API Amazon EC2.

{ "Version": "2012-10-17", "Statement":{ "Action":"ec2:*", "Effect":"Allow", "Resource":"*", "Condition":{"Null":{"aws:TokenIssueTime":"true"}} } }