Éléments des politiques IAM : variables et balises - AWS Identity and Access Management

Éléments des politiques IAM : variables et balises

Utilisez des variables de politique AWS Identity and Access Management (IAM) en tant qu'espaces réservés lorsque vous ne connaissez pas la valeur exacte d'une clé de ressource ou de condition lors de la création de la politique.

Note

Si AWS ne peut pas résoudre une variable, cela peut rendre l'ensemble de l'instruction non valide. Par exemple, si vous utilisez la variable aws:TokenIssueTime, elle est résolue en une valeur uniquement lorsque le demandeur s'est authentifié à l'aide des informations d'identification temporaires (un rôle IAM). Afin d'empêcher les variables de provoquer des instructions non valides, utilisez l'opérateur de condition ...IfExists.

Introduction

Dans les politiques IAM, de nombreuses actions vous permettent de fournir un nom pour des ressources spécifiques auxquelles vous voulez contrôler l'accès. Par exemple, la politique suivante permet à l'utilisateur d'afficher, de lire et d'écrire les objets dotés du préfixe David dans le compartiment Amazon S3 mybucket.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["David/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/David/*"] } ] }

Dans certains cas, vous ne connaissez pas le nom exact de la ressource lorsque vous écrivez la politique. Vous souhaiterez peut-être généraliser la politique de façon à ce qu'elle fonctionne pour de nombreux utilisateurs sans avoir à faire une copie unique de celle-ci pour chaque utilisateur. Par exemple, vous pouvez écrire une politique pour permettre à chaque utilisateur d'accéder à ses propres objets dans un compartiment Amazon S3, comme dans l'exemple précédent. Mais ne créez pas une politique distincte pour chaque utilisateur qui spécifie explicitement le nom d'utilisateur comme partie intégrante de la ressource. Au lieu de cela, créez une politique de groupe unique qui s'applique à tous les utilisateurs du groupe.

Pour ce faire, vous pouvez utiliser des variables de politique, une fonction qui vous permet de spécifier des espaces réservés dans une politique. Lorsque la politique est évaluée, les variables de politique sont remplacées par les valeurs provenant du contexte de la demande proprement dite.

Important

Vous pouvez utiliser n'importe quelle clé de condition à valeur unique comme variable. Vous ne pouvez pas utiliser de clé de condition à valeurs multiples en tant que variable.

L'exemple suivant illustre une politique pour un compartiment Amazon S3 qui utilise une variable de politique.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"] } ] }

Lorsque cette politique est évaluée, IAM remplace la variable ${aws:username} par le nom convivial de l'utilisateur en cours effectif. Cela signifie qu'une politique unique appliquée à un groupe d'utilisateurs peut être utilisée pour contrôler l'accès à un compartiment. Elle le fait en utilisant le nom d'utilisateur dans le nom de la ressource.

La variable est marquée à l'aide d'un préfixe $ suivi d'une paire d'accolades ({ }). À l'intérieur des caractères ${ }, vous pouvez inclure le nom de la valeur de la demande que vous souhaitez utiliser dans la politique. Les valeurs disponibles sont détaillées plus loin sur cette page.

Note

Pour utiliser des variables de politique, vous devez inclure l'élément Version dans une instruction et la version doit être définie sur une version prenant en charge de telles variables. Les variables ont été introduites dans la version 2012-10-17. Les versions antérieures du langage de politique ne prennent pas en charge les variables de politique. Si vous n'incluez pas l'élément Version et que la valeur correspond à une date de version appropriée, les variables telles que ${aws:username} sont traitées comme des chaînes littérales dans la politique.

Un élément de politique Version varie d'une version de politique. L'élément de politique Version est utilisé dans une politique pour définir la version de la langue de la politique. En revanche, une version de politique est créée lorsque vous apportez des modifications à une politique gérée par le client dans IAM. La politique modifiée ne remplace pas la politique existante. À la place, IAM crée une nouvelle version de la politique gérée. Pour en savoir plus sur l'élément de politique Version, consultez Éléments de politique JSON IAM : Version. Pour en savoir plus sur les versions de politiques, consultez Gestion des versions des politiques IAM.

Vous pouvez utiliser les variables de politique de manière similaire afin de permettre à chaque utilisateur de gérer ses propres clés d'accès. Une politique qui permet à un utilisateur de modifier par programmation la clé d'accès de l'utilisateur David se présente comme suit :

{ "Version": "2012-10-17", "Statement": [{ "Action": ["iam:*AccessKey*"], "Effect": "Allow", "Resource": ["arn:aws:iam::account-id:user/David"] }] }

Si cette politique est attachée à l'utilisateur David, celui-ci peut changer sa propre clé d'accès. À l'instar des politiques d'accès aux objets Amazon S3 spécifiques à l'utilisateur, il vous faudra créer une politique distincte pour chaque utilisateur incluant le nom utilisateur. Vous devez ensuite attacher chaque politique aux utilisateurs individuels.

À l'aide d'une variable de politique, vous pouvez créer une politique semblable à celle-ci :

{ "Version": "2012-10-17", "Statement": [{ "Action": ["iam:*AccessKey*"], "Effect": "Allow", "Resource": ["arn:aws:iam::account-id:user/${aws:username}"] }] }

Lorsque vous utilisez une variable de politique pour le nom utilisateur de cette façon, il n'est pas nécessaire d'avoir une politique distincte pour chaque utilisateur. Au lieu de cela, vous pouvez attacher cette nouvelle politique à un groupe IAM qui inclut toutes les personnes autorisées à gérer leurs propres clés d'accès. Lorsqu'un utilisateur demande la modification de sa clé d'accès, IAM remplace la variable ${aws:username} par le nom utilisateur de la demande actuelle, puis évalue la politique.

Les balises comme variables de la politique

Dans certains services AWS, vous pouvez attacher vos propres attributs personnalisés aux ressources qui sont créées par ces services. Par exemple, vous pouvez appliquer des balises aux compartiments Amazon S3 ou aux utilisateurs IAM. Ces balises sont des paires clé-valeur. Vous définissez le nom de clé de balise et la valeur qui est associée à ce nom de clé. Par exemple, vous pouvez créer une balise avec une clé department et une valeur Human Resources. Pour plus d'informations sur le balisage des entités IAM, consultez Balisage des ressources IAM. Pour plus d'informations sur le balisage des ressources créées par d'autres services AWS, reportez-vous à la documentation de ce service. Pour plus d'informations sur l'utilisation de Tag Editor, consultez Utilisation de Tag Editor dans le Guide de l'utilisateur AWS Management Console.

Vous pouvez baliser des ressources IAM pour simplifier la découverte, l'organisation et le suivi de vos ressources IAM. Vous pouvez aussi baliser les identités IAM pour contrôler l'accès aux ressources ou au balisage lui-même. Pour en savoir plus sur l'utilisation des balises pour contrôler l'accès, consultez Contrôle de l'accès aux et pour les utilisateurs et rôles IAM à l'aide de balises.

Éléments dans lesquels vous pouvez utiliser des variables de politique

Vous pouvez utiliser des variables de politique dans l'élément Resource et les comparaisons de chaîne de l'élément Condition.

Élément de ressource

Vous pouvez utiliser une variable de politique dans l'élément Resource, mais uniquement dans la partie ressource de l'ARN. Cette partie de l'ARN apparaît après le cinquième deux-points (:). Vous ne pouvez pas utiliser une variable pour remplacer des parties de l'ARN avant le cinquième deux-points, par exemple le service ou le compte. Pour de plus amples informations sur le format ARN, veuillez consulter ARN IAM.

La politique suivante peut être attachée à un groupe. Elle accorde à chaque utilisateur du groupe un accès par programmation complet à un objet spécifique à l'utilisateur (leur propre « répertoire de base ») dans Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"] } ] }
Note

Cet exemple utilise la clé aws:username qui retourne le nom convivial de l'utilisateur (par exemple, « Adèle » ou « David »). Dans certains cas, vous pouvez utiliser aws:userid à la place, une clé dont la valeur est globalement unique. Pour plus d’informations, veuillez consulter Identifiants uniques.

La politique suivante peut être utilisée pour un groupe IAM. Elle autorise les utilisateurs de ce groupe à créer, utiliser et supprimer les files d'attente qui portent leurs noms et qui se trouvent dans la région us-east-2.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListForConsole", "Effect": "Allow", "Action": "sqs:ListQueues", "Resource": "*" }, { "Sid": "AllQueueActions", "Effect": "Allow", "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-2:*:${aws:username}-queue" } ] }

Pour remplacer une partie d'un ARN avec une valeur de balise, encadrez le préfixe et le nom de clé avec ${}. Par exemple, l'élément Resource suivant fait référence à un seul compartiment qui est nommé à l'identique de la valeur de la balise department de l'utilisateur demandeur.

"Resource": ["arn:aws:s3:::bucket/${aws:PrincipalTag/department}"]

Élément de condition

Vous pouvez utiliser une variable de politique pour les valeurs Condition dans n'importe quelle condition impliquant les opérateurs de chaîne ou les opérateurs ARN. Les opérateurs de chaîne incluent StringEquals, StringLike et StringNotLike. Les opérateurs ARN incluent ArnEquals et ArnLike. Vous ne pouvez pas utiliser une variable de politique avec d'autres opérateurs, tels que les opérateurs Numeric, Date, Boolean, Binary, IP Address ou Null. Pour de plus amples informations sur les opérateurs de condition, veuillez consulter Éléments de politique JSON IAM : Opérateurs de condition.

La politique de rubrique Amazon SNS suivante permet aux utilisateurs du compte AWS 999999999999 de gérer (exécuter toutes les actions de) la rubrique. Toutefois, cette autorisation n'est accordée que si l'URL correspond à son nom d'utilisateur AWS.

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "999999999999" }, "Effect": "Allow", "Action": "sns:*", "Condition": { "StringLike": { "sns:endpoint": "https://example.com/${aws:username}/" }, "StringEquals": { "sns:Protocol": "https" } } } ] }

Lorsque vous faites référence à une balise dans une expression de l'élément Condition, utilisez le préfixe et le nom de clé pertinents comme clé de condition. Utilisez ensuite la valeur que vous souhaitez tester dans la valeur de condition. Par exemple, l'exemple de politique suivant autorise l'accès complet aux utilisateurs IAM, mais uniquement si la balise costCenter est attachée à l'utilisateur. La balise doit également avoir la valeur 12345 ou 67890. Si la balise n'a pas de valeur, ou toute autre valeur, la demande échoue.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:*user*" ], "Resource": "*", "Condition": { "StringLike": { "iam:ResourceTag/costCenter": [ "12345", "67890" ] } } } ] }

Informations de demande que vous pouvez utiliser dans les variables de politique

Vous pouvez utiliser l'élément Condition d'une politique JSON pour comparer des clés dans le contexte de demande avec les valeurs de clé spécifiées dans votre politique. Lorsque vous utilisez une variable de politique, AWS substitue une valeur de la clé de contexte de demande à la place de la variable dans votre politique.

Informations disponibles dans toutes les demandes

Les politiques contiennent des clés dont vous pouvez utiliser les valeurs en tant que variables de politique. (Dans certains cas, les clés ne contiennent pas de valeur ; reportez-vous aux informations fournies après cette liste.)

  • aws:CurrentTime Peut être utilisé pour des conditions qui vérifient la date et l'heure.

  • aws:EpochTime Date d'époque ou heure UNIX, à utiliser avec les conditions de date/heure.

  • aws:TokenIssueTime Date et heure d'émission des informations d'identification de sécurité temporaires ; elles peuvent être utilisées avec les conditions de date/heure. Remarque : cette clé est uniquement disponible dans les demandes signées à l'aide d'informations d'identification de sécurité temporaires. Pour plus d'informations sur les informations d'identification de sécurité temporaires, consultez Informations d'identification de sécurité temporaires dans IAM.

  • aws:PrincipalType Cette valeur indique si le principal est un compte, un utilisateur, un rôle fédéré ou endossé. Reportez-vous aux explications fournies plus loin.

  • aws:SecureTransport Valeur booléenne qui indique si la demande a été envoyée à l'aide du protocole SSL.

  • aws:SourceIp Adresse IP du demandeur, à utiliser avec les conditions d'adresse IP. Reportez-vous à Opérateurs de condition d'adresse IP pour savoir quand la clé SourceIp est valide et quand il est nécessaire d'utiliser une clé spécifique au VPC.

  • aws:UserAgent Cette valeur est une chaîne qui contient des informations sur l'application cliente du demandeur. Cette chaîne est générée par le client et peut ne pas être fiable. Vous pouvez uniquement utiliser cette clé de contexte à partir de l’interface AWS CLI.

  • aws:userid Cette valeur est l'ID unique de l'utilisateur actuel. Reportez-vous au tableau ci-après.

  • aws:username Chaîne contenant le nom convivial de l'utilisateur actuel. Reportez-vous au tableau ci-après.

  • ec2:SourceInstanceARN Amazon Resource Name (ARN) de l'instance Amazon EC2 à partir de laquelle la demande est effectuée. Cette clé est présente uniquement si la demande provient d'une instance Amazon EC2 qui utilise un rôle IAM associé à un profil d'instance EC2.

Important

Les noms des clés ne sont pas sensibles à la casse. Par exemple, aws:CurrentTime équivaut à AWS:currenttime.

Valeurs de la clé du principal

Les valeurs de aws:username, aws:userid et aws:PrincipalType dépendent du type de principal ayant initialisé la demande. Par exemple, la demande peut être effectuée à l'aide des informations d'identification d'un utilisateur IAM, d'un rôle IAM ou de l'utilisateur racine Compte AWS. La de tableaux suivante affiche les valeurs de ces clés pour différents types de principaux.

Principal aws:username aws:userid aws:PrincipalType
Utilisateur racine Compte AWS (absent) ID de compte AWS Account
Utilisateur IAM nom-utilisateur-IAM ID unique User
Utilisateur fédéré (absent) account:caller-specified-name FederatedUser
Utilisateur fédéré web (Login with Amazon, Amazon Cognito, Facebook, Google)

Pour plus d'informations sur les clés de politique disponibles lors de l'utilisation de la fédération d'identité web, consultez Identification des utilisateurs avec la fédération d'identité web.

(absent)

id-rôle :nom-rôle-spécifié-par-mandataire

role-id est l'ID unique du rôle et le nom du rôle spécifié par principal est spécifié par le paramètre RoleSessionName transmis à la demande AssumeRoleWithWebIdentity.

AssumedRole
Utilisateur fédéré SAML

Pour plus d'informations sur les clés de politique disponibles lors de l'utilisation de la fédération SAML, consultez Identification unique des utilisateurs dans la fédération SAML.

(absent)

id-rôle :nom-rôle-spécifié-par-mandataire

role-id est l'ID unique du rôle et le caller-specified-role-name (nom du rôle spécifié par l’appelant) est spécifié par l'élément Attribute (Attribut) avec le jeu Name attribute (Attribut du nom) défini sur https://aws.amazon.com/SAML/attributes/RoleSessionName.

AssumedRole
Rôle endossé (absent)

id-rôle :nom-rôle-spécifié-par-mandataire

role-id est l'ID unique du rôle et le nom du rôle spécifié par principal est spécifié par le paramètre RoleSessionName transmis à la demande AssumeRole.

AssumedRole
Rôle affecté à une instance Amazon EC2 (absent)

role-id:ec2-instance-id

role-id est l'ID unique du rôle et ec2-instance-id est l'identifiant unique de l'instance EC2.

AssumedRole
Appelant anonyme (Amazon SQS, Amazon SNS et Amazon S3 uniquement) (absent) anonymous Anonymous

Pour les éléments de cette table, notez les points suivants :

  • absent signifie que la valeur ne figure pas dans les informations de la demande en cours et par conséquent, toute tentative de correspondance échoue et rend l'instruction non valide.

  • id-rôle est un identifiant unique attribué à chaque rôle lors de sa création. Vous pouvez afficher l'ID de rôle à l'aide de la commande AWS CLI : aws iam get-role --role-name rolename

  • nom-spécifié-par-principal et nom-rôle-spécifié-par-principal sont des noms qui sont transmis par le processus appelant (comme une application ou un service) lorsqu'il effectue un appel pour obtenir des informations d'identification temporaires.

  • ec2-instance-id est une valeur affectée à l'instance lors de son lancement ; elle s'affiche sur la page Instances de la console Amazon EC2. Vous pouvez également afficher l'ID d'instance en exécutant la commande AWS CLI : aws ec2 describe-instances

Informations relatives aux utilisateurs fédérés disponibles dans les demandes

Les utilisateurs fédérés sont des utilisateurs authentifiés à l'aide d'un système autre qu'IAM. Par exemple, une entreprise peut utiliser une application interne qui effectue des appels à AWS. L'attribution d'une identité IAM à chaque utilisateur de l'entreprise qui utilise l'application peut ne pas convenir. Au lieu de cela, l'entreprise peut utiliser une application proxy (intermédiaire) qui dispose d'une identité IAM unique ou un fournisseur d'identité (IdP) SAML. L'application proxy ou l'IdP SAML authentifie les utilisateurs individuels via le réseau d'entreprise. Une application proxy peut ensuite utiliser son identité IAM pour obtenir des informations d'identification de sécurité temporaires pour des utilisateurs individuels. Un IdP SAML peut en effet échanger des informations d'identité pour des informations d'identification de sécurité temporaires AWS. Les informations d'identification temporaires permettent ensuite d'accéder aux ressources AWS.

De même, vous pouvez créer une application pour appareil mobile qui doit accéder aux ressources AWS. Dans ce cas, vous pouvez utiliser la fédération d'identité web dans laquelle l'application authentifie l'utilisateur à l'aide d'un fournisseur d'identité connu tel que Login with Amazon, Amazon Cognito, Facebook ou Google. L'application peut ensuite utiliser les informations d'authentification de l'utilisateur à partir de ces fournisseurs pour obtenir les informations d'identification de sécurité temporaires permettant d'accéder aux ressources AWS.

Pour utiliser la fédération d'identité web, il est recommandé d'exploiter les fonctions d'Amazon Cognito et les kits SDK AWS Mobile. Pour en savoir plus, consultez les ressources suivantes :

Informations spécifiques aux services

Le contexte des demandes peut également inclure des clés et des valeurs spécifiques aux services. Voici quelques exemples :

  • s3:prefix

  • s3:max-keys

  • s3:x-amz-acl

  • sns:Endpoint

  • sns:Protocol

Pour plus d'informations sur les clés spécifiques aux services que vous pouvez utiliser pour obtenir des valeurs pour les variables de politique, reportez-vous à la documentation des services individuels. Par exemple, consultez les rubriques suivantes :

Caractères spéciaux

Quelques variables de politique prédéfinies spéciales sont dotées de valeurs fixes qui vous permettent de représenter des caractères qui, sinon, ont une signification spéciale. Si ces caractères spéciaux font partie de la chaîne que vous essayez de faire correspondre et qu'ils sont insérés littéralement, ils sont susceptibles d'être mal interprétés. Par exemple, un astérisque (*) inséré dans la chaîne sera interprété comme un caractère générique, ce qui correspond à n'importe quel caractère, au lieu d'un caractère * littéral. Dans ces cas, vous pouvez utiliser les variables de politique prédéfinies suivantes :

  • ${*} – permet d'obtenir le caractère * (astérisque).

  • ${?} – permet d'obtenir le caractère ? (point d'interrogation).

  • ${$} – permet d'obtenir le caractère $ (dollar).

Ces variables de politique prédéfinies peuvent être utilisées dans n'importe quelle chaîne acceptant les variables de politique standard.

Spécification des valeurs par défaut

Si AWS ne peut pas résoudre une variable, cela peut rendre l'ensemble de l'instruction non valide. Toutefois, lorsque vous ajoutez une variable à votre politique, vous pouvez spécifier une valeur par défaut pour cette variable. Si aucune valeur n'est spécifiée pour la variable, AWS utilise le texte par défaut que vous avez fourni.

Pour ajouter une valeur par défaut à une variable, entourez la valeur par défaut de guillemets simples (' '), puis séparez le texte de la variable et la valeur par défaut par une virgule et une espace (, ).

Par exemple, si un principal est labelisé avec l’interface team=yellow, il peut accéder au compartiment Amazon S3 ExampleCorp's nommé DOC-EXAMPLE-BUCKET-yellow. Une politique avec cette ressource permet aux membres de l'équipe d'accéder à leur compartiment d'équipe, mais pas à ceux des autres équipes. Pour les utilisateurs sans identifications d'équipe, il définit une valeur par défaut de l’interface company-wide pour le nom du compartiment. Ces utilisateurs peuvent accéder uniquement au compartiment DOC-EXAMPLE-BUCKET-company-wide où ils peuvent afficher des informations générales, telles que des instructions pour rejoindre une équipe.

"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET-${aws:PrincipalTag/team, 'company-wide'}"

Pour plus d'informations

Pour plus d'informations sur les politiques, consultez les ressources suivantes :