Utiliser un IAM rôle pour accorder des autorisations aux applications exécutées sur des EC2 instances Amazon - 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.

Utiliser un IAM rôle pour accorder des autorisations aux applications exécutées sur des EC2 instances Amazon

Les applications qui s'exécutent sur une EC2 instance Amazon doivent inclure des AWS informations d'identification dans les AWS API demandes. Vous pouvez demander à vos développeurs de stocker les AWS informations d'identification directement dans l'EC2instance Amazon et d'autoriser les applications de cette instance à utiliser ces informations d'identification. Mais les développeurs devraient alors gérer les informations d'identification et s'assurer de les transmettre de manière sécurisée à chaque instance et de mettre à jour chaque EC2 instance Amazon au moment de mettre à jour les informations d'identification. Ceci représente beaucoup de travail supplémentaire.

Au lieu de cela, vous pouvez et devez utiliser un IAM rôle pour gérer les informations d'identification temporaires pour les applications qui s'exécutent sur une EC2 instance Amazon. Lorsque vous utilisez un rôle, vous n'avez pas à distribuer des informations d'identification à long terme (telles que des informations de connexion ou des clés d'accès) à une EC2 instance Amazon. Le rôle fournit plutôt des autorisations temporaires que les applications peuvent utiliser lorsqu'elles appellent d'autres AWS ressources. Lorsque vous lancez une EC2 instance Amazon, vous spécifiez un IAM rôle à associer à l'instance. Les applications qui s'exécutent sur l'instance peuvent ensuite utiliser les informations d'identification temporaires fournies par le rôle pour signer API les demandes.

L'utilisation de rôles pour accorder des autorisations aux applications qui s'exécutent sur des EC2 instances Amazon nécessite une configuration supplémentaire. Une application exécutée sur une EC2 instance Amazon est AWS extraite du système d'exploitation virtualisé. En raison de cette séparation supplémentaire, vous avez besoin d'une étape supplémentaire pour attribuer un AWS rôle et les autorisations associées à une EC2 instance Amazon et les mettre à la disposition de ses applications. Cette étape supplémentaire est la création d'un profil d'instance attaché à l'instance. Le profil d'instance contient le rôle et peut fournir les informations d'identification temporaires du rôle à une application qui s'exécute sur l'instance. Ces informations d'identification temporaires peuvent ensuite être utilisées dans les API appels de l'application pour accéder aux ressources et pour limiter l'accès aux seules ressources spécifiées par le rôle.

Note

Un seul rôle peut être attribué à une EC2 instance Amazon à la fois, et toutes les applications de l'instance partagent le même rôle et les mêmes autorisations. Lorsque vous utilisez Amazon ECS pour gérer vos EC2 instances Amazon, vous pouvez attribuer des rôles aux ECS tâches Amazon qui peuvent être distingués du rôle de l'EC2instance Amazon sur laquelle elles s'exécutent. L'attribution d'un rôle à chaque tâche est conforme au principe de l'accès au moindre privilège et permet un contrôle plus précis des actions et des ressources.

Pour plus d'informations, consultez la section Utilisation IAM des rôles avec les ECS tâches Amazon dans le guide des meilleures pratiques d'Amazon Elastic Container Service.

Une telle utilisation des rôles présente plusieurs avantages. Dans la mesure où les informations d'identification des rôles sont temporaires et font automatiquement l'objet d'une mise à jour, vous n'avez pas à les gérer ni à vous soucier de risques de sécurité à long terme. Par ailleurs, si vous utilisez le même rôle pour plusieurs instances, toute modification apportée au rôle se propage automatiquement à toutes les instances.

Note

Bien qu'un rôle soit généralement attribué à une EC2 instance Amazon lorsque vous la lancez, un rôle peut également être attaché à une EC2 instance Amazon en cours d'exécution. Pour savoir comment associer un rôle à une instance en cours d'exécution, consultez la section IAMRôles pour Amazon EC2.

Comment fonctionnent les rôles pour EC2 les instances Amazon ?

Dans la figure suivante, un développeur exécute une application sur une EC2 instance Amazon qui nécessite l'accès au compartiment S3 nomméphotos. Un administrateur crée le rôle de Get-pics service et l'attache à l'EC2instance Amazon. Le rôle inclut une politique d'autorisations qui accorde un accès en lecture seule au compartiment S3 spécifié. Il inclut également une politique de confiance qui permet à l'EC2instance Amazon d'assumer le rôle et de récupérer les informations d'identification temporaires. Lorsque l'application s'exécute sur l'instance, elle peut accéder au compartiment photos en utilisant les informations d'identification temporaires du rôle. L'administrateur n'a pas besoin d'accorder au développeur l'autorisation d'accéder au compartiment photos et le développeur n'a à aucun moment besoin de partager ou gérer les informations d'identification.

Application sur une EC2 instance Amazon accédant à une AWS ressource
  1. L'administrateur utilise IAM pour créer le Get-pics rôle. Dans la politique de confiance du rôle, l'administrateur précise que seules EC2 les instances Amazon peuvent assumer le rôle. Dans la politique d'autorisation du rôle, l'administrateur définit des autorisations en lecture seule pour le compartiment photos.

  2. Un développeur lance une EC2 instance Amazon et attribue le Get-pics rôle à cette instance.

    Note

    Si vous utilisez la IAM console, le profil d'instance est géré pour vous et est généralement transparent pour vous. Toutefois, si vous utilisez le AWS CLI ou API pour créer et gérer le rôle et l'EC2instance Amazon, vous devez créer le profil d'instance et lui attribuer le rôle séparément. Ensuite, lorsque vous lancez l'instance, vous devez spécifier le nom du profil d'instance à la place du nom de rôle.

  3. Lorsque l'application s'exécute, elle obtient des informations d'identification de sécurité temporaires à partir des métadonnées de l'EC2instance Amazon, comme décrit dans la section Récupération des informations d'identification de sécurité à partir des métadonnées de l'instance. Il s'agit d'informations d'identification de sécurité temporaires qui représentent le rôle et sont valides pendant une période limitée.

    Dans certains cas AWS SDKs, le développeur peut utiliser un fournisseur qui gère les informations d'identification de sécurité temporaires de manière transparente. (La documentation individuelle AWS SDKs décrit les fonctionnalités prises en charge par celle de gestion SDK des informations d'identification.)

    L'application peut également obtenir les informations d'identification temporaires directement à partir des métadonnées de l'EC2instance Amazon. Les informations d'identification et les valeurs associées se trouvent dans la catégorie iam/security-credentials/role-name (dans cet exemple, iam/security-credentials/Get-pics) des métadonnées. Si l'application extrait les informations d'identification des métadonnées de l'instance, elle peut les mettre en cache.

  4. À l'aide des informations d'identification temporaires obtenues, l'application peut accéder au compartiment photos. Compte tenu de la politique attachée au rôle Get-pics, l'application dispose d'autorisations en lecture seule.

    Les informations d'identification de sécurité temporaires disponibles sur l'instance font automatiquement l'objet d'une mise à jour avant leur expiration, de manière à ce qu'un jeu d'identifiants valide soit toujours disponible. L'application doit simplement obtenir un nouvel ensemble d'informations d'identification à partir des métadonnées de l'instance avant l'expiration des informations d'identification actuelles. Il est possible d'utiliser le pour gérer les AWS SDK informations d'identification afin que l'application n'ait pas besoin d'inclure de logique supplémentaire pour actualiser les informations d'identification. Par exemple, instanciation de clients avec les fournisseurs d'informations d'identification de profil d'instance. En revanche, si l'application extrait les informations d'identification de sécurité temporaires des métadonnées d'instance, puis les met en cache, elle doit obtenir un ensemble d'informations d'identification actualisé toutes les heures, ou au moins 15 minutes avant l'expiration des informations d'identification actuelles. Le délai d'expiration est inclus dans les informations renvoyées dans la catégorie iam/security-credentials/role-name.

Autorisations requises pour utiliser les rôles auprès d'Amazon EC2

Pour lancer une instance avec un rôle, le développeur doit être autorisé à lancer des EC2 instances Amazon et à transmettre IAM des rôles.

L'exemple de politique suivant permet aux utilisateurs d'utiliser le AWS Management Console pour lancer une instance avec un rôle. La politique inclut des caractères génériques (*) pour permettre à un utilisateur de transmettre n'importe quel rôle et d'effectuer les EC2 actions Amazon répertoriées. L'action ListInstanceProfiles permet aux utilisateurs d'afficher tous les rôles disponibles dans l' Compte AWS.

Exemple de politique accordant à un utilisateur l'autorisation d'utiliser la EC2 console Amazon pour lancer une instance avec n'importe quel rôle
{ "Version": "2012-10-17", "Statement": [ { "Sid": "IamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } }, { "Sid": "ListEc2AndListInstanceProfiles", "Effect": "Allow", "Action": [ "iam:ListInstanceProfiles", "ec2:Describe*", "ec2:Search*", "ec2:Get*" ], "Resource": "*" } ] }

Restreindre les rôles pouvant être transmis aux EC2 instances Amazon (en utilisant PassRole)

Vous pouvez utiliser cette PassRole autorisation pour restreindre le rôle qu'un utilisateur peut transmettre à une EC2 instance Amazon lorsqu'il lance l'instance. Cela évite que l'utilisateur exécute des applications ayant davantage d'autorisations qu'il n'en possède, autrement dit qu'il soit en mesure d'obtenir des droits élevés. Par exemple, imaginez que l'utilisateur Alice est uniquement autorisée à lancer des EC2 instances Amazon et à travailler avec des compartiments Amazon S3, mais que le rôle qu'elle transmet à une EC2 instance Amazon dispose des autorisations nécessaires pour travailler avec Amazon IAM DynamoDB. Dans ce cas, Alice pourra peut-être lancer l'instance, s'y connecter, obtenir des informations d'identification de sécurité temporaires, puis effectuer des IAM actions DynamoDB pour lesquelles elle n'est pas autorisée.

Pour limiter les rôles qu'un utilisateur peut transmettre à une EC2 instance Amazon, vous devez créer une politique qui autorise cette PassRole action. Vous attachez ensuite la politique à l'utilisateur (ou à un IAM groupe auquel appartient l'utilisateur) qui lancera les EC2 instances Amazon. Dans l'Resourceélément de la politique, vous listez le ou les rôles que l'utilisateur est autorisé à transmettre aux EC2 instances Amazon. Lorsque l'utilisateur lance une instance et y associe un rôle, Amazon EC2 vérifie s'il est autorisé à transmettre ce rôle. Il est entendu que vous devez également vous assurer que le rôle que l'utilisateur est autorisé à transmettre n'inclut pas plus d'autorisations qu'il n'est censé en avoir.

Note

PassRolen'est pas une API action de la même manière que cela RunInstances ou qu'elle l'ListInstanceProfilesest. Il s'agit plutôt d'une autorisation qui AWS vérifie chaque fois qu'un rôle ARN est transmis en tant que paramètre à un API (ou que la console le fait au nom de l'utilisateur). Elle permet à un administrateur de contrôler les rôles susceptibles d'être transmis et par quels utilisateurs. Dans ce cas, cela garantit que l'utilisateur est autorisé à associer un rôle spécifique à une EC2 instance Amazon.

Exemple de politique accordant à un utilisateur l'autorisation de lancer une EC2 instance Amazon avec un rôle spécifique

L'exemple de politique suivant permet aux utilisateurs d'utiliser Amazon EC2 API pour lancer une instance avec un rôle. L'Resourceélément indique le nom de ressource Amazon (ARN) d'un rôle. En spécifiant leARN, la politique accorde à l'utilisateur l'autorisation de transmettre uniquement le Get-pics rôle. Si l'utilisateur tente de spécifier un autre rôle lors du lancement d'une instance, l'action échoue. L'utilisateur est autorisé à exécuter n'importe quelle instance, qu'il s'agisse de transmettre un rôle ou non.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/Get-pics" } ] }

Permettre à un rôle de profil d'instance de passer à un rôle dans un autre compte

Vous pouvez autoriser une application exécutée sur une EC2 instance Amazon à exécuter des commandes dans un autre compte. Pour ce faire, vous devez autoriser le rôle d'EC2instance Amazon dans le premier compte à passer à un rôle dans le second compte.

Imaginez que vous en utilisiez deux Comptes AWS et que vous souhaitiez autoriser une application exécutée sur une EC2 instance Amazon à exécuter des AWS CLIcommandes dans les deux comptes. Supposons que l'EC2instance Amazon existe dans le compte111111111111. Cette instance inclut le rôle de profil d'instance abcd qui permet à l'appli d'effectuer les tâches Amazon S3 my-bucket-1 en lecture seule sur le compartiment dans le même compte 111111111111. Toutefois, l'application doit également être autorisée à endosser le rôle efgh entre comptes pour accéder au compartiment my-bucket-2 Amazon S3 dans le compte 222222222222.

Le schéma montre comment un développeur lance une EC2 instance Amazon avec le rôle d'accéder aux photos d'un compartiment Amazon S3.

Le rôle de profil d'EC2instance abcd Amazon doit respecter la politique d'autorisation suivante pour permettre à l'application d'accéder au compartiment my-bucket-1 Amazon S3 :

Politique d'autorisations de rôle abcd du compte 111111111111

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::my-bucket-1/*", "arn:aws:s3:::my-bucket-1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

Le abcd rôle doit faire confiance au EC2 service Amazon pour assumer le rôle. Pour ce faire, le rôle abcd doit avoir la politique de confiance suivante :

Politique de confiance de rôle abcd du compte 111111111111

{ "Version": "2012-10-17", "Statement": [ { "Sid": "abcdTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"Service": "ec2.amazonaws.com"} } ] }

Supposons que le rôle efgh entre comptes permet aux tâches Amazon S3 en lecture seule sur le compartiment my-bucket-2 dans le même compte 222222222222. Pour ce faire, le rôle efgh entre comptes doit avoir la politique d'autorisations suivante :

Politique d'autorisations de rôle efgh du compte 222222222222

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::my-bucket-2/*", "arn:aws:s3:::my-bucket-2" ] } ] }

Le rôle efgh doit autoriser le rôle de profil d'instance abcd à l'endosser. Pour ce faire, le rôle efgh doit avoir la politique de confiance suivante :

Politique de confiance de rôle efgh du compte 222222222222

{ "Version": "2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }

Comment puis-je commencer ?

Pour comprendre comment les rôles fonctionnent avec les EC2 instances Amazon, vous devez utiliser la IAM console pour créer un rôle, lancer une EC2 instance Amazon qui utilise ce rôle, puis examiner l'instance en cours d'exécution. Vous pouvez examiner les métadonnées de l'instance pour voir comment les informations d'identification temporaires du rôle sont mises à la disposition d'une instance. Il est également possible d'étudier la façon dont une application exécutée sur l'instance peut utiliser un rôle donné. Consultez les ressources suivantes pour en savoir plus.

Pour plus d'informations sur la création de rôles ou de rôles pour EC2 les instances Amazon, consultez les informations suivantes :