Comment assumer un rôle IAM à l'aide de l'AWS CLI ?

Dernière mise à jour : 06/01/2023

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

Solution

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

Remarque : si vous recevez des erreurs lors de l'exécution des commandes d’AWS CLI, vérifiez que vous exécutez une version récente d’AWS CLI.

Important : l'exécution des commandes des étapes suivantes affiche vos informations d'identification, telles que les mots de passe, en clair. Après avoir assumé le rôle IAM, changer votre mot de passe constitue une bonne pratique.

Créer un utilisateur IAM avec des autorisations pour assumer des rôles

1.    Créez un utilisateur IAM à l'aide de l'AWS CLI à l'aide de 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 donne les autorisations à Bob à l'aide de l'interface de ligne de commande AWS. Créez le fichier JSON qui définit la politique IAM en utilisant 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 example 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 basées sur l'identité IAM et Référence de politique JSON IAM.

Créer la stratégie IAM

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

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 stratégie IAM :

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

Remarque : remplacez 123456789012 par votre propre compte.

2.    Notez l'ARN de stratégie IAM de la sortie et associez la stratégie à Bob à l'aide de la commande attach-user-policy. Ensuite, assurez-vous que la pièce jointe soit en place à l'aide des commandes suivantes list-attached-user-policies :

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 :
vim example-role-trust-policy.json

2.    Le contenu du fichier example-role-trust-policy.json est similaire à ceci :

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

Cet exemple de politique d'approbation permet aux utilisateurs et aux rôles du compte 123456789012 d'assumer ce rôle s'ils autorisent l'action sts:AssumeRole dans leur politique d'autorisations. Vous pouvez également limiter 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 plus d'informations, consultez la section Éléments de politique AWS JSON : le principal.

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

Créez un rôle IAM pouvant être endossé par Bob, disposant d'un accès en lecture seule aux instances Amazon Relational Database Service (Amazon RDS). Étant donné que ce rôle IAM est endossé par un utilisateur IAM, vous devez spécifier un mandataire permettant aux utilisateurs IAM d'endosser ce rôle. Par exemple, un mandataire similaire à arn:aws:iam::123456789012:root permet à toutes les identités IAM du compte d'assumer ce rôle. Pour plus d'informations, consultez la section Création d'un rôle pour déléguer des autorisations à un utilisateur IAM.

1.    Créez le rôle IAM disposant 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 attach-role-policy associe la politique gérée AWS AmazonRDSReadOnlyAccess au rôle. Vous pouvez associer différentes stratégies (stratégies gérées et stratégies personnalisées) en fonction de vos exigences de sécurité. La commande aws iam list-attached-role-policies affiche les stratégies 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 peut accéder en lecture seule aux instances EC2 et s'il est capable d'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 de l'interface de ligne de commande AWS génère un ID de clé d'accès et une clé d'accès secrète. Assurez-vous 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 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 Default region name (Nom de région par défaut), spécifiez votre région AWS.

Vérifiez que vos commandes de l'interface de ligne de commande AWS sont appelées, puis que vous avez accès aux utilisateurs 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 produit trois informations, dont l'ARN. La sortie affiche quelque chose de similaire à arn:aws:iam::123456789012:user/Bob pour vérifier que les commandes AWS CLI sont appelées en tant que Bob.

2.    Vérifiez que l'utilisateur IAM peut accéder en lecture seule aux instances EC2 et qu'il 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 qui se trouvent 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.

Assumer le rôle IAM

Effectuez l'une des actions suivantes :

Utilisez un rôle IAM en créant un profil dans le fichier ~/.aws/config. Pour plus d'informations, consultez la section Utilisation d'un rôle IAM dans l'interface de ligne de commande AWS.

-ou-

Assumez 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 assumer 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 de l'interface de ligne de commande AWS génère plusieurs informations. À l'intérieur du bloc d'informations d'identification, vous devez disposer des identifiants AccessKeyId, SecretAccessKey et SessionToken. Cet exemple utilise les variables d'environnement RoleAccessKeyID, RoleSecretKey et RoleSessionToken. Notez que l'horodatage du champ d'expiration se trouve dans le fuseau horaire UTC. L'horodatage indique le moment où les informations d'identification temporaires du rôle IAM expirent. Si les informations d'identification temporaires ont expiré, vous devez à nouveau effectuer l'appel d'API sts:AssumeRole.

Remarque : vous pouvez augmenter le délai d'expiration maximal de la session pour les informations d'identification temporaires des 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 assumé le rôle IAM en exécutant cette commande :

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 et non arn:aws:iam::123456789012:user/Bob pour vérifier que vous avez assumé 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 si 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 revenu sous le nom d'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=

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?