É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é de contexte de condition globale 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 de plus amples informations, consultez Définir les opérateurs pour les clés de contexte à valeurs multiples.

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.

Exemple opérateur de condition de 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 .

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::111122223333: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.

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la demande Résultat
"StringEquals": { "aws:PrincipalTag/job-category": "iamuser-admin" }
aws:PrincipalTag/job-category: – iamuser-admin

Correspondance

"StringEquals": { "aws:PrincipalTag/job-category": "iamuser-admin" }
aws:PrincipalTag/job-category: – dev-ops

Aucune correspondance

"StringEquals": { "aws:PrincipalTag/job-category": "iamuser-admin" }

Aucun aws:PrincipalTag/job-category dans le contexte de la demande.

Aucune correspondance

Exemple utilisation d’une variable de politique avec une chaîne d’opérateur de condition

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.

JSON
{ "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:::amzn-s3-demo-bucket", "Condition": { "StringLike": { "s3:prefix": [ "", "home/", "home/${aws:username}/" ] } } }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}", "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}/*" ] } ] }

Le tableau suivant montre comment AWS évalue cette politique pour différents utilisateurs en fonction de la valeur aws:username dans le contexte de la demande.

Condition de politique Contexte de la requête Résultat
"StringLike": { "s3:prefix": [ "home/", "home/${aws:username}/" ] }
aws:username: – martha_rivera
"StringLike": { "s3:prefix": [ "home/", "home/martha_rivera/" ] }
"StringLike": { "s3:prefix": [ "home/", "home/${aws:username}/" ] }
aws:username: – nikki_wolf
"StringLike": { "s3:prefix": [ "home/", "home/nikki_wolf/" ] }
"StringLike": { "s3:prefix": [ "home/", "home/${aws:username}/" ] }

Aucun aws:username dans le contexte de la demande.

Aucune correspondance

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 OIDC consultez Amazon S3 : permet aux utilisateurs Amazon Cognito d'accéder aux objets dans leur compartiment.

Opérateurs de condition de chaîne à valeurs multiples

Si une clé dans la demande contient plusieurs valeurs, les opérateurs de chaîne peuvent être qualifiés avec les opérateurs d’ensemble ForAllValues et ForAnyValue. Pour plus d’informations sur la logique d’évaluation de plusieurs clés ou valeurs de contexte, consultez Définir les opérateurs pour les clés de contexte à valeurs multiples.

Opérateur de condition Description

ForAllValues:StringEquals

ForAllValues:StringEqualsIgnoreCase

Toutes les valeurs de la clé de condition dans la demande doivent correspondre à au moins une des valeurs de votre politique.

ForAnyValue:StringEquals

ForAnyValue:StringEqualsIgnoreCase

Au moins une valeur clé de condition dans la demande doit correspondre à l’une des valeurs de votre politique.

ForAllValues:StringNotEquals

ForAllValues:StringNotEqualsIgnoreCase

Correspondance négative.

Aucune des valeurs de la clé de contexte dans la demande ne correspond à l’une des valeurs de clé de contexte dans votre politique.

ForAnyValue:StringNotEquals

ForAnyValue:StringNotEqualsIgnoreCase

Correspondance négative.

Au moins une valeur de clé de contexte dans la demande ne doit PAS correspondre à l’une des valeurs de la clé de contexte dans votre politique.

ForAllValues:StringLike

Toutes les valeurs de la clé de condition dans la demande doivent correspondre à au moins une des valeurs de votre politique.

ForAnyValue:StringLike

Au moins une valeur clé de condition dans la demande doit correspondre à l’une des valeurs de votre politique.

ForAllValues:StringNotLike

Correspondance négative.

Aucune des valeurs de la clé de contexte dans la demande ne correspond à l’une des valeurs de clé de contexte dans votre politique.

ForAnyValue:StringNotLike

Correspondance négative.

Au moins une valeur de clé de contexte dans la demande ne doit PAS correspondre à l’une des valeurs de la clé de contexte dans votre politique.

Exemple utilisation de ForAnyValue avec une chaîne d’opérateur de condition

Cet exemple montre comment vous pouvez créer une politique basée sur l'identité qui autorise l'utilisation de l'action CreateTags d'Amazon EC2 pour attacher des balises à une instance. Lorsque vous utilisez StringEqualsIgnoreCase, vous pouvez attacher des balises uniquement si la balise contient la clé environment et les valeurs preprod ou storage. Lorsque vous ajoutez IgnoreCase à l’opérateur, vous autorisez toute valeur de balise existante en majuscules, telle que preprod, Preprod et PreProd, à être résolue en vrai.

Lorsque vous ajoutez le modificateur ForAnyValue avec la clé de condition aws:TagKeys, au moins une valeur de clé de balise dans la demande doit correspondre à la valeur environment. La comparaison ForAnyValue est sensible à la casse, ce qui empêche les utilisateurs d’utiliser une casse incorrecte pour la clé de balise, par exemple en utilisant Environment au lieu de environment.

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" } } } }

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la requête Résultat
"StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" }
aws:TagKeys: – environment aws:RequestTag/environment: – preprod

Correspondance

"StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" }
aws:TagKeys: – environment – costcenter aws:RequestTag/environment: – PreProd

Correspondance

"StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" }
aws:TagKeys: – Environment aws:RequestTag/Environment: – preprod

Aucune correspondance

"StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" }
aws:TagKeys: – costcenter aws:RequestTag/environment: – preprod

Aucune correspondance

"StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" }

Aucun aws:TagKeys dans le contexte de la demande.

aws:RequestTag/environment: – storage

Aucune correspondance

"StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" }
aws:TagKeys: – environment

Aucun aws:RequestTag/environment dans le contexte de la demande.

Aucune correspondance

"StringEqualsIgnoreCase": { "aws:RequestTag/environment": [ "preprod", "storage" ] }, "ForAnyValue:StringEquals": { "aws:TagKeys": "environment" }

Aucun aws:TagKeys dans le contexte de la demande.

Aucun aws:RequestTag/environment dans le contexte de la demande.

Aucune correspondance

Correspondance des caractères génériques

Les opérateurs de condition de chaîne réalisent une correspondance sans modèle qui n'applique pas de format prédéfini. Les opérateurs de condition ARN et de condition de date constituent un sous-ensemble d'opérateurs de chaîne qui appliquent une structure à la valeur de la clé de condition.

Nous vous recommandons d’utiliser des opérateurs de condition qui correspondent aux valeurs auxquelles vous comparez les clés. Par exemple, vous devez utiliser Opérateurs de condition de chaîne lorsque vous comparez des clés à des valeurs de chaîne. De même, vous devez utiliser Opérateurs de condition d'Amazon Resource Name (ARN) lorsque vous comparez des clés à des valeurs d’ARN.

Cet exemple montre comment créer une limite autour des ressources de votre organisation. La condition définie dans cette politique refuse l’accès aux actions Amazon S3, sauf si la ressource à laquelle on accède se trouve dans un ensemble spécifique d’unités organisationnelles (UO) dans AWS Organizations. Un chemin AWS Organizations est une représentation textuelle de la structure d’une entité d’organisation.

La condition exige que aws:ResourceOrgPaths contienne l’un des chemins d’UO répertoriés. Comme aws:ResourceOrgPaths est une condition à valeurs multiples, la politique utilise l’opérateur ForAllValues:StringNotLike pour comparer les valeurs de aws:ResourceOrgPaths à la liste des UO dans la politique.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-mediaou/", "o-acorg/r-acroot/ou-acroot-sportsou/*" ] } } } ] }

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la requête Résultat
"ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-mediaou/", "o-acorg/r-acroot/ou-acroot-sportsou/*" ] }
aws:ResourceOrgPaths: – o-acorg/r-acroot/ou-acroot-sportsou/costcenter/

Correspondance

"ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-mediaou/", "o-acorg/r-acroot/ou-acroot-sportsou/*" ] }
aws:ResourceOrgPaths: – o-acorg/r-acroot/ou-acroot-mediaou/costcenter/

Aucune correspondance

"ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-mediaou/", "o-acorg/r-acroot/ou-acroot-sportsou/*" ] }

Aucun aws:ResourceOrgPaths: dans la demande.

Aucune correspondance

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.

  • Variables de politiques – Non prises en charge

  • Caractères génériques – Non pris en charge

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 amzn-s3-demo-bucket à la fois.

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-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.

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).

  • Variables de politiques – Non prises en charge

  • Caractères génériques – Non pris en charge

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.

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::111122223333: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.

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.

Si une clé contient plusieurs valeurs, les opérateurs booléens peuvent être qualifiés avec les opérateurs d’ensemble ForAllValues et ForAnyValue. Pour plus d’informations sur la logique d’évaluation de plusieurs clés ou valeurs de contexte, consultez Définir les opérateurs pour les clés de contexte à valeurs multiples.

  • Variables de politiquesPrises en charge

  • Caractères génériques – Non pris en charge

Opérateur de condition Description

Bool

Correspondance booléenne

ForAllValues:Bool

À utiliser avec le type de données Array of Bool. Toutes les valeurs booléennes dans les valeurs clés du contexte doivent correspondre aux valeurs booléennes de votre politique.

Pour empêcher les opérateurs ForAllValues d’évaluer les clés de contexte manquantes ou les clés de contexte avec des valeurs vides comme Autorisé, vous pouvez inclure l’opérateur de condition Null dans votre politique.

ForAnyValue:Bool

À utiliser avec le type de données Array of Bool. Au moins l’une des valeurs booléennes dans les valeurs clés du contexte doit correspondre aux valeurs booléennes de votre politique.

Exemple opérateur de condition booléens

L politique basée sur l’identité suivante utilise l’opérateur de condition Bool avec la clé aws:SecureTransport pour refuser la réplication d’objets et de balises d’objets vers le compartiment de destination 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.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "BooleanExample", "Action": "s3:ReplicateObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la requête Résultat
"Bool": { "aws:SecureTransport": "false" }
aws:SecureTransport: – false

Correspondance

"Bool": { "aws:SecureTransport": "false" }
aws:SecureTransport: – true

Aucune correspondance

"Bool": { "aws:SecureTransport": "false" }

Aucun aws:SecureTransport dans le contexte de la demande.

Aucune correspondance

Opérateurs de condition binaires

L’opérateur de condition BinaryEquals vous 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. 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.

  • Variables de politiques – Non prises en charge

  • Caractères génériques – Non pris en charge

"Condition" : { "BinaryEquals": { "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA==" } }
Condition de politique Contexte de la requête Résultat
"BinaryEquals": { "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA==" }
key: – QmluYXJ5VmFsdWVJbkJhc2U2NA==

Correspondance

"BinaryEquals": { "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA==" }
key: – ASIAIOSFODNN7EXAMPLE

Aucune correspondance

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

Aucun key dans le contexte de la demande.

Aucune correspondance

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.

  • Variables de politiques – Non prises en charge

  • Caractères génériques – Non pris en charge

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

Exemple Opérateur de condition d’adresse IP

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.

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::111122223333: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.

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la requête Résultat
"IpAddress": { "aws:SourceIp": "203.0.113.0/24" }
aws:SourceIp: – 203.0.113.1

Correspondance

"IpAddress": { "aws:SourceIp": "203.0.113.0/24" }
aws:SourceIp: – 198.51.100.1

Aucune correspondance

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 mettre à jour 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.

JSON
{ "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.

Exemple Opérateur de condition de l’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.

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:us-east-1:123456789012:QUEUE-ID", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:TOPIC-ID" } } } }

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.

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la requête Résultat
"ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID" }
aws:SourceArn: – arn:aws:sns:us-west-2:123456789012:TOPIC-ID

Correspondance

"ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID" }
aws:SourceArn: – arn:aws:sns:us-west-2:777788889999:TOPIC-ID

Aucune correspondance

"ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID" }

Aucun aws:SourceArn dans le contexte de la demande.

Aucune correspondance

Opérateurs de condition d’ARN à valeurs multiples

Si une clé dans la demande contient plusieurs valeurs, les opérateurs d’ARN peuvent être qualifiés avec les opérateurs d’ensemble ForAllValues et ForAnyValue. Pour plus d’informations sur la logique d’évaluation de plusieurs clés ou valeurs de contexte, consultez Définir les opérateurs pour les clés de contexte à valeurs multiples.

Opérateur de condition Description

ForAllValues:ArnEquals

ForAllValues:ArnLike

Tous les ARN du contexte de la demande doivent correspondre à au moins un des modèles ARN de votre politique.

ForAnyValue:ArnEquals

ForAnyValue:ArnLike

Au moins un ARN du contexte de la demande doit correspondre à un des modèles ARN de votre politique.

ForAllValues:ArnNotEquals

ForAllValues:ArnNotLike

Correspondance négative.

Aucun des ARN dans le contexte de la demande ne correspond à un modèle ARN de chaîne dans votre politique.

ForAnyValue:ArnNotEquals

ForAnyValue:ArnNotLike

Correspondance négative.

Au moins un ARN dans le contexte de la demande ne doit PAS correspondre à l’un des modèles ARN de votre politique.

Exemple utilisation de ForAllValues avec un d’opérateur de condition d’ARN

L’exemple suivant utilise ForAllValues:ArnLike pour créer ou mettre à jour une source de livraison logique pour les journaux Amazon CloudWatch Logs. Le bloc de condition inclut la clé de condition logs:LogGeneratingResourceArns pour filtrer les ARN de ressources générant des journaux transmis dans la demande. À l’aide de cet opérateur de condition, tous les ARN de la demande doivent correspondre à au moins un ARN de la politique.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "logs:PutDeliverySource", "Resource": "arn:aws:logs:us-east-1:123456789012:delivery-source:*", "Condition": { "ForAllValues:ArnLike": { "logs:LogGeneratingResourceArns": [ "arn:aws:cloudfront::123456789012:distribution/*", "arn:aws:cloudfront::123456789012:distribution/support*" ] } } } ] }

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la requête Résultat
"ForAllValues:ArnLike": { "logs:LogGeneratingResourceArns": [ "arn:aws::cloudfront:123456789012:distribution/*", "arn:aws::cloudfront:123456789012:distribution/support*" ] }
logs:LogGeneratingResourceArns: – arn:aws::cloudfront:123456789012:distribution/costcenter

Correspondance

"ForAllValues:ArnLike": { "logs:LogGeneratingResourceArns": [ "arn:aws::cloudfront:123456789012:distribution/*", "arn:aws::cloudfront:123456789012:distribution/support*" ] }
logs:LogGeneratingResourceArns: – arn:aws::cloudfront:123456789012:distribution/costcenter – arn:aws::cloudfront:123456789012:distribution/support2025

Correspondance

"ForAllValues:ArnLike": { "logs:LogGeneratingResourceArns": [ "arn:aws::cloudfront:123456789012:distribution/*", "arn:aws::cloudfront:123456789012:distribution/support*" ] }
logs:LogGeneratingResourceArns: – arn:aws::cloudfront:123456789012:distribution/costcenter – arn:aws::cloudfront:123456789012:distribution/admin

Aucune correspondance

"ForAllValues:ArnLike": { "logs:LogGeneratingResourceArns": [ "arn:aws::cloudfront:123456789012:distribution/*", "arn:aws::cloudfront:123456789012:distribution/support*" ] }
logs:LogGeneratingResourceArns: – arn:aws::cloudfront:777788889999:distribution/costcenter

Aucune correspondance

"ForAllValues:ArnLike": { "logs:LogGeneratingResourceArns": [ "arn:aws::cloudfront:123456789012:distribution/*", "arn:aws::cloudfront:123456789012:distribution/support*" ] }

Aucun logs:LogGeneratingResourceArns dans le contexte de la demande.

Correspondance

Le qualificateur ForAllValues renvoie la valeur true si la demande ne comprend pas de clés de contexte ou si la valeur de clé de contexte aboutit à un jeu de données nul, tel qu’une chaîne vide. Pour éviter que des clés de contexte manquantes ou des clés de contexte contenant des valeurs vides ne soient considérées comme vraies, vous pouvez inclure l’opérateur de condition Null dans votre politique avec une valeur false pour vérifier si la clé de contexte existe et si sa valeur n’est pas nulle.

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 condition est présente dans le contexte de la requête, 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 si la clé de condition n’est pas présente.

Exemple avec 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 :

JSON
{ "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'astérisque (*) figurant dans les valeurs des clés de condition, lorsqu'il est utilisé avec l'opérateur de condition StringLikeIfExists, est interprété comme un caractère générique pour obtenir des correspondances de chaînes partielles. L'instruction DescribeActions inclut les actions requises pour afficher l'instance dans la console.

JSON
{ "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": "*" } ] }

Le tableau suivant montre comment AWS évalue cette politique en fonction des valeurs clés de condition dans votre demande.

Condition de politique Contexte de la requête Résultat
"StringLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ] }
ec2:InstanceType: – t1.micro

Correspondance

"StringLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ] }
ec2:InstanceType: – m2.micro

Aucune correspondance

"StringLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ] }

Aucun ec2:InstanceType dans le contexte de la demande.

Correspondance

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 utilise des informations d’identification temporaires ou ses propres informations d’identification pour effectuer une demande. 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 doit avoir recours à des informations d’identification temporaires (la clé ne peut pas être absente) pour exécuter l’API Amazon EC2.

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