Comment puis-je endosser un rôle IAM à l’aide de l’AWS CLI ?

Lecture de 8 minute(s)
0

Je souhaite endosser un rôle AWS Identity and Access Management (IAM) à l’aide de l’interface de la ligne de commande AWS (AWS CLI).

Résolution

Pour endosser un rôle IAM à l’aide de l’AWS CLI et disposer d’un accès en lecture seule aux instances Amazon Elastic Compute Cloud (Amazon EC2), procédez comme suit :

Remarque : si vous recevez des messages d’erreur lors de l’exécution de commandes AWS CLI, vérifiez que vous utilisez bien une version récente de l’AWS CLI.

Important : lors de l’exécution des commandes, les étapes suivantes affichent en texte clair vos informations d’identification telles que les mots de passe. Une fois que vous avez endossé le rôle IAM, il est recommandé de modifier vos mots de passe.

Créer un utilisateur IAM autorisé à endosser des rôles

1.    Créez un utilisateur IAM à l’aide de l’AWS CLI avec la commande suivante :

Remarque : remplacez Bob par votre nom d’utilisateur IAM.

aws iam create-user --user-name Bob

2.    Créez la politique IAM qui accorde les autorisations à Bob à l’aide de l’AWS CLI. Créez le fichier JSON qui définit la politique IAM à l’aide de votre éditeur de texte préféré. Par exemple, vous pouvez utiliser vim, un éditeur de texte couramment utilisé sous Linux, comme suit :

Remarque : remplacez l’exemple par votre propre nom de politique, votre nom d’utilisateur, votre rôle, votre nom de fichier JSON, votre nom de profil et vos clés.

vim example-policy.json

3.    Le contenu du fichier example-policy.json est similaire au suivant :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "iam:ListRoles",
        "sts:AssumeRole"
      ],
      "Resource": "*"
    }
  ]
}

Pour plus d’informations sur la création de politiques IAM, consultez Création de politiques IAM, Exemples de politiques IAM basées sur l’identité et Référence des politiques JSON d’IAM.

Créer la politique IAM

1.    Utilisez la commande aws iam create-policy suivante :

aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json

La commande aws iam create-policy génère plusieurs informations, notamment l’ARN (Amazon Resource Name) de la politique IAM comme suit :

arn:aws:iam::123456789012:policy/example-policy

Remarque : remplacez 123456789012 par votre propre compte.

2.    Notez l’ARN de la politique IAM figurant dans la sortie et attachez la politique à Bob à l’aide de la commande attach-user-policy. Vérifiez ensuite que l’attachement est effectif à l’aide de la commande list-attached-user-policies comme suit :

aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
aws iam list-attached-user-policies --user-name Bob

Créer le fichier JSON qui définit la relation de confiance du rôle IAM

1.    Créez le fichier JSON qui définit la relation de confiance comme suit :

vim example-role-trust-policy.json

2.    Le contenu du fichier example-role-trust-policy.json est similaire au suivant :

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "AWS": "123456789012"
    },
    "Action": "sts:AssumeRole"
  }
}

Cette politique de confiance permet aux utilisateurs et aux rôles du compte 123456789012 d’endosser ce rôle s’ils autorisent l’action sts:AssumeRole dans leur politique d’autorisations. Vous pouvez également restreindre la relation de confiance afin que le rôle IAM ne puisse être endossé que par des utilisateurs IAM spécifiques. Vous pouvez le faire en spécifiant des principaux similaires à arn:aws:iam::123456789012:user/example-username. Pour en savoir plus, consultez la section Éléments de politique JSON d’AWS : Principal.

Créer le rôle IAM et attacher la politique

Créez un rôle IAM qui peut être endossé par Bob et qui dispose d’un accès en lecture seule aux instances Amazon Relational Database Service (Amazon RDS). Le rôle IAM étant endossé par un utilisateur IAM, vous devez spécifier un principal qui autorise les utilisateurs IAM à endosser ce rôle. Par exemple, un principal similaire à arn:aws:iam::123456789012:root permet à toutes les identités IAM du compte d’endosser ce rôle. Pour plus d’informations, consultez Création d’un rôle pour déléguer des autorisations à un utilisateur IAM.

1.    Créez le rôle IAM qui dispose d’un accès en lecture seule aux instances de base de données Amazon RDS. Associez les politiques IAM à votre rôle IAM en fonction de vos exigences de sécurité.

La commande aws iam create-role crée le rôle IAM et définit la relation de confiance en fonction du fichier JSON que vous avez créé dans la section précédente. La commande aws iam create-role associe au rôle la politique gérée AWS AmazonRDSReadOnlyAccess. Vous pouvez attacher différentes politiques (politiques gérées et politiques personnalisées) selon vos exigences de sécurité. La commande aws iam list-attached-role-policies affiche les politiques IAM associées au rôle IAM example-role. Consultez les exemples de commandes suivants :

aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json
aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess"
aws iam list-attached-role-policies --role-name example-role

Remarque : vérifiez que Bob dispose d’un accès en lecture seule aux instances EC2 et qu’il peut endosser le rôle example-role.

2.    Créez des clés d’accès pour Bob à l’aide de la commande suivante :

aws iam create-access-key --user-name Bob

La commande AWS CLI génère un ID de clé d’accès et une clé d’accès secrète. N’oubliez pas de noter ces clés.

Configurer les clés d’accès

1.    Pour configurer les clés d’accès, utilisez le profil par défaut ou un profil spécifique. Pour configurer le profil par défaut, exécutez la commande aws configure. Pour créer un nouveau profil spécifique, exécutez aws configure --profile example_-_profile-name. Dans cet exemple, le profil par défaut est configuré comme suit :

aws configure
AWS Access Key ID [None]: ExampleAccessKeyID1
AWS Secret Access Key [None]: ExampleSecretKey1
Default region name [None]: eu-west-1
Default output format [None]: json

Remarque : pour Nom de la région par défaut, indiquez votre région AWS.

Vérifier que les commandes de l’AWS CLI sont invoquées, puis vérifiez l’accès utilisateur IAM

1.    Exécutez la commande aws sts get-caller-identity comme suit :

aws sts get-caller-identity

La commande aws sts get-caller-identity génère trois informations, dont l’ARN. La sortie affiche quelque chose de similaire à arn:aws:iam::123456789012:user/Bo pour vérifier que les commandes de l’AWS CLI sont invoquées en tant que Bob.

2.    Vérifiez que l’utilisateur IAM dispose bien d’un accès en lecture seule aux instances EC2 et n’a aucun accès aux instances de base de données Amazon RDS en exécutant les commandes suivantes :

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

La commande aws ec2 describe-instances devrait vous montrer toutes les instances EC2 situées dans la région eu-west-1. La commande aws rds describe-db-instances doit générer un message d’erreur d’accès refusé, car Bob n’a pas accès à Amazon RDS.

Endosser le rôle IAM

Procédez de l’une des manières suivantes :

Utilisez un rôle IAM en créant un profil dans le fichier ~/.aws/config. Pour plus d’informations, consultez Utilisation d’un rôle IAM dans l’AWS CLI.

-ou-

Endossez le rôle IAM en procédant comme suit :

1.    Obtenez l’ARN du rôle en exécutant la commande suivante :

aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"

2.    La commande répertorie les rôles IAM, mais filtre la sortie par nom de rôle. Pour endosser le rôle IAM, exécutez la commande suivante :

aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session

La commande AWS CLI génère plusieurs informations. Dans le bloc d’informations d’identification, vous avez besoin d’AccessKeyID, de SecretAccessKey et de SessionToken. Cet exemple utilise les variables d’environnement RoleAccessKeyID, RoleSecretKey et RoleSessionToken. Notez que l’horodatage du champ d’expiration est dans le fuseau horaire UTC. L’horodatage indique la date d’expiration des informations d’identification temporaires du rôle IAM. Si les informations d’identification temporaires ont expiré, vous devez à nouveau invoquer l’appel d’API sts:AssumeRole.

Remarque : vous pouvez augmenter la durée maximale d’expiration de session des informations d’identification temporaires pour les rôles IAM à l’aide du paramètre DurationSeconds.

Créer des variables d’environnement pour endosser le rôle IAM et vérifier l’accès

1.    Créez trois variables d’environnement pour endosser le rôle IAM. Ces variables d’environnement sont complétées avec la sortie suivante :

export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken

Remarque : pour les systèmes Windows, remplacez export par set dans cette commande.

2.    Vérifiez que vous avez endossé le rôle IAM en exécutant la commande suivante :

aws sts get-caller-identity

La commande AWS CLI doit générer l’ARN sous la forme arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session au lieu de arn:aws:iam::123456789012:user/Bob pour vérifier que vous avez endossé le rôle example-role.

3.    Vérifiez que vous avez créé un rôle IAM avec un accès en lecture seule aux instances de base de données Amazon RDS et aucun accès aux instances EC2 à l’aide des commandes suivantes :

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

La commande aws ec2 describe-instances doit générer un message d’erreur d’accès refusé. La commande aws rds describe-db-instances doit renvoyer les instances de base de données Amazon RDS. Cela permet de vérifier que les autorisations attribuées au rôle IAM fonctionnent correctement.

4.    Pour revenir à l’utilisateur IAM, supprimez les variables d’environnement comme suit :

unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
aws sts get-caller-identity

La commande unset supprime les variables d’environnement et la commande aws sts get-caller-identity vérifie que vous êtes retourné en tant qu’utilisateur IAM Bob.

Remarque : pour les systèmes Windows, définissez les variables d’environnement sur des chaînes vides pour effacer leur contenu comme suit :

SET AWS_ACCESS_KEY_ID=
SET AWS_SECRET_ACCESS_KEY=
SET AWS_SESSION_TOKEN=

Informations connexes

Rôles, termes et concepts

create-role

Création d’un rôle pour déléguer des autorisations à un service AWS

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans