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

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Éléments des politiques IAM : variables et balises

Utilisez des variables de stratégie AWS Identity and Access Management (IAM) comme espaces réservés lorsque vous ne connaissez pas la valeur exacte d'une clé de ressource ou de condition lorsque vous rédigez la politique.

Note

Si vous AWS ne parvenez pas à résoudre une variable, l'intégralité de l'instruction peut être invalide. 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). Pour empêcher les variables de provoquer des instructions non valides, utilisez le... IfExists opérateur de condition.

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 aux utilisateurs d'afficher, de lire et d'écrire les objets dans le compartiment S3 DOC-EXAMPLE-BUCKET pour les projets marketing.

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

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. Au lieu de créer une politique distincte pour chaque utilisateur, nous vous recommandons de créer une politique de groupe unique qui s'applique à tous les utilisateurs du groupe.

Utilisation de variables dans les politiques

Vous pouvez définir des valeurs dynamiques dans des politiques en utilisant des variables de politique qui définissent des espaces réservés dans une politique.

Les variables sont marquées à l'aide d'un préfixe $ suivi d'une paire d'accolades ({ }) qui incluent le nom de variable de la valeur issue de la demande.

Lorsque la politique est évaluée, les variables de politique sont remplacées par les valeurs provenant des clés contextuelles conditionnelles passées dans la requête. Les variables peuvent être utilisées dans les politiques basées sur l'identité, les politiques de ressources, les politiques de contrôle des services, les politiques de session et les politiques de point de terminaison d’un VPC. Les politiques basées sur l'identité utilisées comme limites d'autorisations prennent également en charge les variables de politique.

Les clés de contexte des conditions globales peuvent être utilisées comme variables dans les demandes entre les AWS services. Les clés de condition spécifiques à un service peuvent également être utilisées comme variables lors de l'interaction avec des ressources AWS , mais elles ne sont disponibles que lorsque des requêtes sont effectuées auprès de ressources qui les prennent en charge. Pour obtenir la liste des clés contextuelles disponibles pour chaque AWS service et ressource, consultez la référence d'autorisation de service. Dans certains cas, vous ne pouvez pas renseigner les clés contextuelles des conditions globales avec une valeur. Pour en savoir plus sur chaque clé, consultez AWS Clés de contexte de condition globale .

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

  • 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 rôle ou un utilisateur IAM qui remplace un nom de ressource spécifique par une variable de politique. Vous pouvez réutiliser cette politique en tirant parti de la clé de condition aws:PrincipalTag. Lorsque cette politique est évaluée, ${aws:PrincipalTag/team} autorise les actions uniquement si le nom du compartiment se termine par un nom d'équipe issu de la balise de principal team.

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

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.

Pour obtenir la liste détaillé de cette clé de condition globale, consultez aws :PrincipalTag//tag-key dans la liste des clés de condition globales.

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.

Une politique qui permet à un principal d'obtenir des objets à partir du chemin /David d'un compartiment S3 ressemble à ceci :

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3::DOC-EXAMPLE-BUCKET/David/*"] }] }

Si cette politique est attaché à l'utilisateur David, celui-ci obtient les objets de son propre compartiment S3, mais 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 des politiques réutilisables. La politique suivante permet à un utilisateur d'obtenir des objets à partir d'un compartiment Amazon S3 si la valeur de la clé de balise aws:PrincipalTag correspond à la valeur de la clé de balise owner transmise dans la demande.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowUnlessOwnedBySomeoneElse", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["*"], "Condition": { "StringEquals": { "${s3:ExistingObjectTag/owner}": "${aws:PrincipalTag/owner}" } } } ] }

Lorsque vous utilisez une variable de politique à la place d'un utilisateur, il n'est pas nécessaire d'avoir une politique distincte pour chaque utilisateur. Dans l'exemple suivant, la politique est attachée à un rôle IAM endossé par les Product Managers à l'aide d'informations d'identification de sécurité temporaires. Lorsqu'un utilisateur demande à ajouter un objet Amazon S3, IAM remplace la valeur de balise dept de la demande actuelle pour la variable ${aws:PrincipalTag}, puis évalue la politique.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowOnlyDeptS3Prefix", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:PrincipalTag/dept}/*"], } ] }

Les balises comme variables de la politique

Dans certains AWS services, vous pouvez associer vos propres attributs personnalisés aux ressources 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.

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 de ressource suivant fait référence à un seul compartiment qui est nommé à l'identique de la valeur de la balise du service de l'utilisateur demandeur.

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

De nombreuses AWS ressources utilisent des ARN contenant un nom créé par l'utilisateur. La politique IAM suivante garantit que seuls les utilisateurs concernés dont les valeurs de balises access-project, access-application et access-environment sont correspondantes peuvent modifier leurs ressources. En outre, en utilisant le caractère générique *, ils peuvent autoriser des suffixes de nom de ressources personnalisés.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessBasedOnArnMatching", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic"], "Resource": ["arn:aws:sns:*:*:${aws:PrincipalTag/access-project}-${aws:PrincipalTag/access-application}-${aws:PrincipalTag/access-environment}-*" ] } ] }

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

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, 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" ] } } } ] }

Variables de politique sans valeur

Lorsque les variables de politique font référence à une clé contextuelle de condition qui n'a aucune valeur ou qui n'est pas présente dans le contexte d'autorisation d'une requête, la valeur est effectivement nulle. Il n'existe pas de valeur égale ou similaire. Les clés contextuelles de condition peuvent ne pas être présentes dans le contexte d'autorisation lorsque :

  • Vous utilisez des clés contextuelles de condition spécifiques au service dans les requêtes adressées à des ressources qui ne prennent pas en charge cette clé de condition.

  • Les balises sur les principaux, les sessions, les ressources ou les demandes IAM ne sont pas présentes.

  • Les autres cas répertoriés pour chaque condition globale sont incluses dans le contexte AWS clés contextuelles de condition globale.

Lorsque vous utilisez une variable sans valeur dans l'élément de condition d'une politique IAM, Éléments de politique JSON IAM : Opérateurs de condition comme StringEquals ou StringLike ne correspondent pas et la déclaration de politique ne prend pas effet.

Les opérateurs de condition inversés comme StringNotEquals ou StringNotLike correspondent à une valeur nulle, car la valeur de la clé conditionnelle par rapport à laquelle ils testent n'est pas égale ou similaire à la valeur effectivement nulle.

Dans l'exemple suivant, aws:principaltag/Team doit être égal à s3:ExistingObjectTag/Team pour autoriser l'accès. L'accès est explicitement refusé lorsque aws:principaltag/Team n'est pas défini. Si une variable qui n'a aucune valeur dans le contexte d'autorisation est utilisée dans le cadre de l'élément Resource or NotResource d'une politique, la ressource qui inclut une variable de politique sans valeur ne correspondra à aucune ressource.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::/example-bucket/*", "Condition": { "StringNotEquals": { "s3:ExistingObjectTag/Team": "${aws:PrincipalTag/Team}" } } } ] }

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.

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 d'un 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 d'un compte AWS (absent) Compte AWS ID Account
Utilisateur IAM nom-utilisateur-IAM ID unique User
Utilisateur fédéré (absent) compte : 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 Identifiez les utilisateurs grâce à la fédération OIDC.

(absent)

identifiant de rôle : caller-specified-role-name

role-id est l'identifiant unique du rôle et caller-specified-role-name est spécifié par le RoleSessionName paramètre passé à la AssumeRoleWithWebIdentity demande.

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)

identifiant de rôle : caller-specified-role-name

role-id est l'identifiant unique du rôle et caller-specified-role-name est spécifié par l'élément Attribute avec l'attribut Name défini sur https://aws.amazon.com/SAML/attributes/RoleSessionName.

AssumedRole
Rôle endossé (absent)

identifiant de rôle : caller-specified-role-name

role-id est l'identifiant unique du rôle et caller-specified-role-name est spécifié par le RoleSessionName paramètre passé à la AssumeRole demande.

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 du rôle à l'aide de la AWS CLI commande suivante : aws iam get-role --role-name rolename

  • caller-specified-nameet caller-specified-role-namesont des noms 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 de l'instance en exécutant la AWS CLI commande suivante : 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 avoir une application à utiliser en interne qui passe 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é contre des informations AWS de sécurité temporaires. Les informations d'identification temporaires peuvent ensuite être utilisées pour accéder aux AWS ressources.

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 OIDC, où 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 .

La méthode recommandée pour utiliser la fédération OIDC consiste à tirer parti d'Amazon Cognito et AWS des SDK mobiles. Pour plus d’informations, consultez les ressources 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

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 :