Comment endosser un rôle IAM à l'aide de l'interface de ligne de commande AWS ?

Date de la dernière mise à jour : 15/05/2020

Je souhaite endosser un rôle IAM (AWS Identity and Access Management) à l'aide de l'interface de ligne de commande AWS (AWS CLI). Comment dois-je procéder ?

Solution

Suivez ces instructions pour endosser un rôle IAM à l'aide de l'interface de ligne de commande AWS. Dans cet exemple, après avoir suivi ces étapes, l'utilisateur aura un accès en lecture seule aux instances Amazon Elastic Compute Cloud (Amazon EC2) et l'autorisation d'endosser un rôle IAM.

Créer un utilisateur IAM disposant des autorisations nécessaires pour endosser des rôles

1.    Créez un utilisateur IAM à l'aide de l'interface de ligne de commande AWS:

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

aws iam create-user --user-name Bob

2.    Créez la stratégie IAM qui donne les autorisations à Bob à l'aide de l'interface de ligne de commande AWS. Vous devez créer le fichier JSON qui définit la stratégie IAM à l'aide de votre éditeur de texte préféré. Cet exemple utilise vim, qui est couramment utilisé sous Linux :

Remarque : remplacez example par votre propre nom de stratégie, 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 devrait ressembler à ceci :  

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

Pour plus d'informations sur la création de stratégies IAM, consultez les sections Création de stratégies IAM, Exemple de stratégies basées sur l'identité IAM, Référence de stratégie JSON IAM..

Créer la stratégie IAM

1.    Utilisez la commande 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. Assurez-vous que la pièce jointe est en place à l'aide des stratégies 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 devrait ressembler à ceci :

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

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 mandataires similaires à arn:aws:iam::123456789012:user/example-username. Pour plus d'informations, consultez la section Éléments de stratégie AWS JSON : le mandataire.

Créer le rôle IAM et associer la stratégie

Créez un rôle IAM pouvant être endossé par Bob, disposant d'un accès en lecture seule aux instances Amazon RDS (Amazon Relational Database Service). É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'endosser 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 stratégies 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 contenu du fichier JSON. La commande aws iam attach-role-policy associe la stratégie 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.

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 avec cette commande :

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é :

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, spécifiez votre région AWS.

Vérifiez que vos commandes de l'interface de ligne de commande AWS sont appelées et que vous avez accès aux utilisateurs IAM.

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

aws sts get-caller-identity

La commande aws sts get-caller-identity fournit trois informations, dont l'ARN. La sortie devrait afficher quelque chose de similaire à arn:aws:iam::123456789012:user/Bob, qui vérifie que les commandes de l'interface de ligne de commande AWS 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.

Endosser le rôle IAM

1.    Obtenez l'ARN du rôle en exécutant cette commande :

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 cette commande :

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 l'horodatage du champ d'expiration, qui se trouve dans le fuseau horaire UTC et 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 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 cette sortie :

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

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

aws sts get-caller-identity

La commande de l'interface de ligne de commande AWS 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, qui vérifie que vous avez endossé le rôle example-role.

3.    Vous avez créé un rôle IAM avec un accès en lecture seule aux instances de base de données Amazon RDS, mais aucun accès aux instances EC2. Faites une vérification en exécutant ces commandes :

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é, et la commande aws ec2 describe-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 :

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.

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