Comment puis-je octroyer à mon instance Amazon EC2 l'accès à un compartiment Amazon S3 d'un autre compte AWS ?

Date de la dernière mise à jour : 03-11-2020

Je souhaite que mon instance Amazon Elastic Compute Cloud (Amazon EC2) puisse accéder à mon compartiment Amazon Simple Storage Service (Amazon S3) d'un autre compte AWS. Comment puis-je octroyer cet accès sans stocker les informations d'identification sur l'instance ?

Résolution

Remarque : bien que cet exemple soit spécifique à l'accès à un compartiment Amazon S3, les étapes sont identiques pour octroyer à votre instance l'accès à d'autres ressources AWS d'un autre compte.

Procédez comme suit pour octroyer à une instance Amazon EC2 d'un compte (Compte A) les autorisations requises pour accéder à un compartiment Amazon S3 d'un autre compte (Compte B).

À partir du compte B, créer un rôle IAM

1.    Connectez-vous à AWS Management Console avec le compte B.

2.    Ouvrez la console AWS Identity and Access Management (IAM).

3.    Dans le panneau de navigation, choisissez Roles (Rôles).

4.    Choisissez Créer un rôle.

5.    Pour Select type of trusted entity (Sélectionner un type d'entité de confiance), choisissez Another AWS account (Autre compte AWS).

6.    Pour Account ID (ID de compte), entrez l'ID du compte A.

7.    Choisissez Next: Permissions (Suivant : Autorisations).

8.    Attachez au rôle une stratégie qui délègue l'accès à Amazon S3. Par exemple, cette stratégie accorde l'accès à s3:GetObject sur les objets stockés dans le compartiment :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

Remarque : vous pouvez modifier la stratégie IAM en fonction des autorisations au niveau du compartiment Amazon S3 et au niveau de l'objet requises pour votre cas d'utilisation. 

9.    Choisissez Next: Add tags (Suivant : Ajouter des balises).

10.    Vous pouvez ajouter des balises facultatives au rôle. Vous pouvez également laisser les champs vides, puis choisir Next: Review (Suivant : Vérifier).

11.    Dans Role name (Nom du rôle), entrez un nom pour le rôle.

12.    Choisissez Créer un rôle.

À partir du compte B, obtenir l'ARN du rôle

1.    Dans le volet de navigation de la console IAM, choisissez Roles (Rôles).

2.    Choisissez le rôle IAM que vous avez créé.

3.    Notez la valeur répertoriée pour ARN du rôle.

Depuis le Compte A, créez un autre rôle (profil d'instance) et attachez-le à l'instance

1.    Connectez-vous à AWS Management Console avec le compte A.

2.    Ouvrez la console IAM.

3.    Dans le volet de navigation, choisissez Roles (Rôles).

4.    Choisissez Créer un rôle.

5.    Pour Select type of trusted entity (Sélectionner le type d'entité de confiance), choisissez AWS service (Service AWS).

6.    Pour Choisir le service qui utilisera ce rôle, choisissez EC2.

7.    Choisissez Next: Permissions (Suivant : Autorisations).

8.    Choisissez Next: Tags (Suivant : Balises).

9.    Vous pouvez ajouter des balises facultatives au rôle. Vous pouvez également laisser les champs vides, puis choisir Suivant : Vérifier.

10.    Dans Role name (Nom du rôle), entrez un nom pour le rôle.

11.    Choisissez Créer un rôle.

12.    Dans la liste des rôles, choisissez celui que vous venez de créer.

13.    Sélectionnez Add inline policy (Ajouter une stratégie en ligne), puis sélectionnez la vue JSON .

14.    Entrez la stratégie suivante. Remplacez arn:aws:iam::111111111111:role/ROLENAME par l'ARN (Amazon Resource Name) du rôle IAM que vous avez créé dans le compte B.

{ 
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::111111111111:role/ROLENAME"
        }
    ]
}

15.    Choisissez Examiner une stratégie.

16.    Pour Name (Nom), entrez un nom pour la stratégie.

17.    Choisissez Créer une stratégie.

18.    Attachez le rôle IAM (profil d'instance) à l'instance Amazon EC2 que vous utilisez pour accéder au compartiment Amazon S3.

À partir de l'instance Amazon EC2, configurez le rôle avec vos informations d'identification.

1.    Connectez-vous à l'instance Amazon EC2. Pour plus d'informations, consultez Connexion à votre instance Linux ou Connexion à votre instance Windows.

2.    Après vous être connecté à l'instance, vérifiez si le répertoire contient déjà un dossier nommé ~/.aws. Pour rechercher ce dossier, vous pouvez exécuter une commande qui affiche la liste des répertoires, telle que :

ls -l ~/.aws

3.    Si vous trouvez le dossier ~/.aws, passez à l'étape suivante. Si le répertoire n'a pas encore de dossier ~/.aws, créez le dossier en exécutant une commande similaire à la suivante :

mkdir ~/.aws/

4.    À partir du dossier ~/.aws, utilisez un éditeur de texte pour créer un fichier. Nommez le fichier config.

5.    Dans le fichier, saisissez le texte suivant. Remplacez enterprofilename par le nom du rôle que vous avez attaché à l'instance. Ensuite, remplacez arn:aws:iam::111111111111:role/ROLENAME par l'ARN du rôle que vous avez créé dans le compte B.

[profile profilename]
role_arn = arn:aws:iam::111111111111:role/ROLENAME

credential_source = Ec2InstanceMetadata

6.    Enregistrez le fichier.

Vérifier le profil d'instance

Pour vérifier que le rôle de votre instance (profil d'instance) peut assumer le rôle dans le compte B, exécutez la commande suivante une fois connecté à l'instance. Remplacez profilename par le nom du rôle que vous avez attaché à l'instance.

$aws sts get-caller-identity --profile profilename

La commande renvoie une réponse semblable à ce qui suit :

"Account": "11111111111",

 "UserId": "AROAEXAMPLEID:sessionName",

 "Arn": "arn:aws:sts::111111111111:assumed-role/ROLENAME/sessionName"

Vérifiez que la valeur de « Arn » correspond à l'ARN du rôle que vous avez créé dans le Compte B.

Vérifier l'accès au compartiment Amazon S3

Pour vérifier que votre instance peut accéder au compartiment Amazon S3, exécutez cette commande de liste une fois connecté à l'instance. Remplacez profilename par le nom du rôle que vous avez attaché à l'instance.

aws s3 ls s3://DOC-EXAMPLE-BUCKET --profile profilename

Si votre instance peut accéder au compartiment avec succès, vous recevez une réponse qui répertorie le contenu du compartiment. Cette réponse est semblable à ce qui suit :

PRE Hello/
2018-08-15 16:16:51 89 index.html

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


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