Éléments des stratégies 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 stratégies IAM : variables et balises

Utilisez des variables de politique AWS Identity and Access Management (IAM) comme espaces réservés lorsque vous ne connaissez pas la valeur exacte d'une ressource ou d'une clé 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 aws:TokenIssueTime variable, elle prend une valeur uniquement lorsque le demandeur s'est authentifié à l'aide d'informations d'identification temporaires (un IAM rôle). Pour empêcher les variables de provoquer des instructions non valides, utilisez le... IfExists opérateur de condition.

Introduction

Dans IAM les politiques, de nombreuses actions vous permettent de donner un nom aux ressources spécifiques auxquelles vous souhaitez 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 amzn-s3-demo-bucket pour les projets marketing.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"], "Condition": {"StringLike": {"s3:prefix": ["marketing/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": ["arn:aws:s3:::amzn-s3-demo-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 VPCterminaison. 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 montre une politique pour un IAM rôle ou un utilisateur qui remplace un nom de ressource spécifique par une variable de stratégie. 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:::amzn-s3-demo-bucket"], "Condition": {"StringLike": {"s3:prefix": ["${aws:PrincipalTag/team}/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": ["arn:aws:s3:::amzn-s3-demo-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. Une version de politique, en revanche, est créée lorsque vous modifiez une politique gérée par le client dansIAM. La politique modifiée ne remplace pas la politique existante. Il IAM crée plutôt une nouvelle version de la politique gérée. Pour en savoir plus sur l'élément de politique Version, consultez IAMJSONéléments de politique : Version. Pour en savoir plus sur les versions de politiques, consultez Politiques de gestion des versions 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::amzn-s3-demo-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 IAM rôle assumé par les chefs de produit à l'aide d'informations d'identification de sécurité temporaires. Lorsqu'un utilisateur fait une demande pour ajouter un objet Amazon S3, il IAM remplace la ${aws:PrincipalTag} variable dept par la valeur de balise de la demande en cours et évalue la politique.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowOnlyDeptS3Prefix", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::amzn-s3-demo-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 IAM utilisateurs. 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 IAM des entités, consultezTags pour les AWS Identity and Access Management ressources. 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 étiqueter IAM les ressources pour simplifier la découverte, l'organisation et le suivi de vos IAM ressources. Vous pouvez également baliser IAM les identités pour contrôler l'accès aux ressources ou pour le marquage 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'Resourceélément, mais uniquement dans la partie ressource duARN. Cette partie ARN apparaît après le cinquième signe deux-points (:). Vous ne pouvez pas utiliser une variable pour remplacer des parties situées ARN avant le cinquième point, comme le service ou le compte. Pour plus d'informations sur le ARN format, consultezIAM ARNs.

Pour remplacer une partie d'un par ARN une valeur de balise, entourez le préfixe et le nom de la clé par${ }. 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:::amzn-s3-demo-bucket/${aws:PrincipalTag/department}"]

De nombreuses AWS ressources ARNs contiennent un nom créé par l'utilisateur. La IAM politique suivante garantit que seuls les utilisateurs auxquels les valeurs de balise access-project, access-application et access-environment correspondent 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 Condition les valeurs dans toutes les conditions impliquant les opérateurs de chaîne ou les ARN opérateurs. Les opérateurs de chaîne incluent StringEquals, StringLike et StringNotLike. ARNles opérateurs incluent ArnEquals etArnLike. 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 IAMJSONéléments de politique : opérateurs de conditions.

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 relatives IAM aux principes, aux sessions, aux ressources ou aux demandes ne sont pas présentes.

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

Lorsque vous utilisez une variable sans valeur dans l'élément de condition d'une IAM politique, qu'elle corresponde StringEquals ou StringLike non, et IAMJSONéléments de politique : opérateurs de conditions que 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:::amzn-s3-demo-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'Conditionélément d'une JSON politique pour comparer les clés dans le contexte de la demande avec les valeurs clés que vous spécifiez dans votre stratégie. 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 faite à l'aide des informations d'identification IAM d'un utilisateur, d'un IAM rôle ou du 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
IAMutilisateur IAM-user-name ID unique User
Utilisateur fédéré (absent) account:caller-specified-name FederatedUser
OIDCutilisateur fédéré

Pour plus d'informations sur les clés de politique disponibles lors de l'utilisation de la fédération d'identité web, consultez Clés disponibles pour la AWS OIDC fédération.

(absent)

role-id: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
SAMLutilisateur fédéré

Pour plus d'informations sur les clés de politique disponibles lorsque vous utilisez SAML la fédération, consultezIdentification unique des utilisateurs dans le cadre SAML d'une fédération basée.

(absent)

role-id: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)

role-id: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 attribué à une EC2 instance Amazon (absent)

role-id:ec2-instance-id

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

AssumedRole
Appelant anonyme (Amazon SQSSNS, Amazon 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.

  • role-id 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-name and caller-specified-role-name sont des noms transmis par le processus appelant (par exemple, une application ou un service) lorsqu'il effectue un appel pour obtenir des informations d'identification temporaires.

  • ec2-instance-id est une valeur attribuée à l'instance lors de son lancement et qui apparaît sur la page Instances de la EC2 console Amazon. 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 que. IAM Par exemple, une entreprise peut avoir une application à utiliser en interne qui passe des appels à AWS. Il peut s'avérer peu pratique de donner une IAM identité à chaque utilisateur professionnel qui utilise l'application. L'entreprise peut plutôt utiliser une application proxy (intermédiaire) dotée d'une IAM identité unique, ou elle peut utiliser un fournisseur d'SAMLidentité (IdP). L'application proxy ou SAML IdP authentifie les utilisateurs individuels via le réseau de l'entreprise. Une application proxy peut ensuite utiliser son IAM identité pour obtenir des informations de sécurité temporaires pour des utilisateurs individuels. Un SAML IdP peut en effet échanger des informations d'identité contre des informations de sécurité AWS 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 OIDCfédération, 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 OIDC la fédération est de tirer parti d'Amazon Cognito et du AWS mobile. SDKs 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é amzn-s3-demo-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 amzn-s3-demo-bucket-company-wide où ils peuvent afficher des informations générales, telles que des instructions pour rejoindre une équipe.

"Resource":"arn:aws:s3:::amzn-s3-demo-bucket-${aws:PrincipalTag/team, 'company-wide'}"

Pour plus d'informations

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