Utilisation des rôles IAM pour accorder l'accès aux AWS ressources sur Amazon EC2 - AWS SDK pour Java 1. x

La AWS SDK pour Java version 1.x est entrée en mode maintenance le 31 juillet 2024 et atteindra end-of-supportle 31 décembre 2025. Nous vous recommandons de migrer vers le pour continuer AWS SDK for Java 2.xà bénéficier des nouvelles fonctionnalités, des améliorations de disponibilité et des mises à jour de sécurité.

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.

Utilisation des rôles IAM pour accorder l'accès aux AWS ressources sur Amazon EC2

Toutes les demandes adressées à Amazon Web Services (AWS) doivent être signées de manière cryptographique à l'aide des informations d'identification émises par AWS. Vous pouvez utiliser les rôles IAM pour accorder facilement un accès sécurisé aux AWS ressources depuis vos Amazon EC2 instances.

Cette rubrique fournit des informations sur l'utilisation des rôles IAM avec des applications du SDK Java exécutées sur. Amazon EC2 Pour plus d'informations sur les instances IAM, consultez la section Rôles IAM du Guide Amazon EC2 de l' Amazon EC2 utilisateur pour les instances Linux.

La chaîne de fournisseurs et les profils d' EC2 instance par défaut

Si votre application crée un AWS client à l'aide du constructeur par défaut, le client recherchera les informations d'identification à l'aide de la chaîne de fournisseurs d'informations d'identification par défaut, dans l'ordre suivant :

  1. Dans les propriétés système Java : aws.accessKeyId et aws.secretKey.

  2. Dans les variables d'environnement du système : AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY.

  3. Dans le fichier d'informations d'identification par défaut (l'emplacement de ce fichier varie en fonction de la plateforme).

  4. Informations d'identification fournies via le service de Amazon EC2 conteneur si la variable d'AWS_CONTAINER_CREDENTIALS_RELATIVE_URIenvironnement est définie et que le responsable de la sécurité est autorisé à accéder à la variable.

  5. Dans les informations d'identification du profil d'instance, qui existent dans les métadonnées de l'instance associées au rôle IAM de l' EC2 instance.

  6. Informations d'identification du jeton d'identité web à partir de l'environnement ou du conteneur.

L'étape des informations d'identification du profil d'instance de la chaîne de fournisseurs par défaut n'est disponible que lorsque vous exécutez votre application sur une Amazon EC2 instance, mais elle offre la plus grande facilité d'utilisation et la meilleure sécurité lorsque vous travaillez avec des Amazon EC2 instances. Vous pouvez également transmettre une InstanceProfileCredentialsProviderinstance directement au constructeur du client pour obtenir les informations d'identification du profil d'instance sans passer par l'ensemble de la chaîne de fournisseurs par défaut.

Par exemple :

AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withCredentials(new InstanceProfileCredentialsProvider(false)) .build();

Lorsque vous utilisez cette approche, le SDK récupère les AWS informations d'identification temporaires dotées des mêmes autorisations que celles associées au rôle IAM associé à l' Amazon EC2 instance dans son profil d'instance. Bien que ces informations d'identification soient temporaires et finiront par expirer, elles sont InstanceProfileCredentialsProvider régulièrement actualisées pour vous afin que les informations d'identification obtenues continuent à autoriser l'accès à AWS.

Important

L'actualisation des informations d'identification a lieu uniquement lorsque vous utilisez le constructeur client par défaut, qui crée son propre InstanceProfileCredentialsProvider dans le cadre de la chaîne de fournisseur par défaut, ou lorsque vous transmettez une instance InstanceProfileCredentialsProvider directement au constructeur client. Si vous utilisez une autre méthode pour obtenir ou transmettre des informations d'identification de profil d'instance, il vous incombe de les vérifier et d'actualiser des informations d'identification expirées.

Si le constructeur du client ne trouve pas les informations d'identification à l'aide de la chaîne de fournisseurs d'informations d'identification, il lancera un AmazonClientException.

Procédure pas à pas : utilisation des rôles IAM pour les instances EC2

La procédure pas à pas suivante explique comment récupérer un objet à l' Amazon S3 aide d'un rôle IAM pour gérer l'accès.

Créer un rôle IAM

Créez un rôle IAM qui accorde un accès en lecture seule à. Amazon S3

  1. Ouvrez la console IAM.

  2. Dans le panneau de navigation, sélectionnez Rôles, puis Créer un rôle.

  3. Saisissez un nom pour le rôle, puis sélectionnez Étape suivante. N'oubliez pas ce nom, car vous en aurez besoin lorsque vous lancerez votre Amazon EC2 instance.

  4. Sur la page Sélectionner le type de rôle, sous Service AWS Rôles, sélectionnez Amazon EC2 .

  5. Sur la page Définir les autorisations, sous Sélectionner un modèle de politique, sélectionnez Accès en Amazon S3 lecture seule, puis Étape suivante.

  6. Sur la page Vérification, sélectionnez Créer un rôle.

Lancez une EC2 instance et spécifiez votre rôle IAM

Vous pouvez lancer une Amazon EC2 instance dotée d'un rôle IAM à l'aide de la Amazon EC2 console ou du AWS SDK pour Java.

  • Pour lancer une Amazon EC2 instance à l'aide de la console, suivez les instructions de la section Getting Started with Amazon EC2 Linux Instances du Guide de Amazon EC2 l'utilisateur pour les instances Linux.

    Lorsque vous atteignez la page Examiner le lancement de l'instance, sélectionnez Modifier les détails de l'instance. Dans Rôle IAM, choisissez le rôle IAM que vous avez créé précédemment. Exécutez la procédure comme indiqué.

    Note

    Vous devrez créer ou utiliser un groupe de sécurité existant et une paire de clés pour vous connecter à l'instance.

  • Pour lancer une Amazon EC2 instance avec un rôle IAM à l'aide de AWS SDK pour Java, voir Exécuter une Amazon EC2 instance.

Création de votre application

Créons l'exemple d'application à exécuter sur l' EC2 instance. Tout d'abord, créez un répertoire que vous pouvez utiliser pour stocker les fichiers du didacticiel (par exemple, GetS3ObjectApp).

Copiez ensuite les AWS SDK pour Java bibliothèques dans le répertoire que vous venez de créer. Si vous les AWS SDK pour Java avez téléchargés ~/Downloads dans votre répertoire, vous pouvez les copier à l'aide des commandes suivantes :

cp -r ~/Downloads/aws-java-sdk-{1.7.5}/lib . cp -r ~/Downloads/aws-java-sdk-{1.7.5}/third-party .

Ouvrez un nouveau fichier, appelez-le GetS3Object.java et ajoutez le code suivant :

import java.io.*; import com.amazonaws.auth.*; import com.amazonaws.services.s3.*; import com.amazonaws.services.s3.model.*; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; public class GetS3Object { private static final String bucketName = "text-content"; private static final String key = "text-object.txt"; public static void main(String[] args) throws IOException { AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient(); try { System.out.println("Downloading an object"); S3Object s3object = s3Client.getObject( new GetObjectRequest(bucketName, key)); displayTextInputStream(s3object.getObjectContent()); } catch(AmazonServiceException ase) { System.err.println("Exception was thrown by the service"); } catch(AmazonClientException ace) { System.err.println("Exception was thrown by the client"); } } private static void displayTextInputStream(InputStream input) throws IOException { // Read one text line at a time and display. BufferedReader reader = new BufferedReader(new InputStreamReader(input)); while(true) { String line = reader.readLine(); if(line == null) break; System.out.println( " " + line ); } System.out.println(); } }

Ouvrez un nouveau fichier, appelez-le build.xml et ajoutez les lignes suivantes :

<project name="Get {S3} Object" default="run" basedir="."> <path id="aws.java.sdk.classpath"> <fileset dir="./lib" includes="**/*.jar"/> <fileset dir="./third-party" includes="**/*.jar"/> <pathelement location="lib"/> <pathelement location="."/> </path> <target name="build"> <javac debug="true" includeantruntime="false" srcdir="." destdir="." classpathref="aws.java.sdk.classpath"/> </target> <target name="run" depends="build"> <java classname="GetS3Object" classpathref="aws.java.sdk.classpath" fork="true"/> </target> </project>

Créez et exécutez le programme modifié. Notez qu'aucune information d'identification n'est stockée dans le programme. Par conséquent, à moins que vous n'ayez déjà spécifié vos AWS informations d'identification, le code sera lancéAmazonServiceException. Par exemple :

$ ant Buildfile: /path/to/my/GetS3ObjectApp/build.xml build: [javac] Compiling 1 source file to /path/to/my/GetS3ObjectApp run: [java] Downloading an object [java] AmazonServiceException BUILD SUCCESSFUL

Transférez le programme compilé vers votre EC2 instance

Transférez le programme vers votre Amazon EC2 instance à l'aide de secure copy (), ainsi que les AWS SDK pour Java bibliothèques. La séquence de commandes ressemble à ce qui suit.

scp -p -i {my-key-pair}.pem GetS3Object.class ec2-user@{public_dns}:GetS3Object.class scp -p -i {my-key-pair}.pem build.xml ec2-user@{public_dns}:build.xml scp -r -p -i {my-key-pair}.pem lib ec2-user@{public_dns}:lib scp -r -p -i {my-key-pair}.pem third-party ec2-user@{public_dns}:third-party
Note

En fonction de la distribution Linux que vous avez utilisée, le nom d'utilisateur peut être « ec2-user », « root » ou « ubuntu ». Pour obtenir le nom DNS public de votre instance, ouvrez la EC2 console et recherchez la valeur DNS public dans l'onglet Description (par exemple,ec2-198-51-100-1.compute-1.amazonaws.com).

Dans les commandes précédentes :

  • GetS3Object.class est votre programme compilé

  • build.xml est le fichier ant utilisé pour créer et exécuter votre programme

  • les répertoires lib et third-party sont les dossiers de bibliothèque correspondants du kit AWS SDK pour Java.

  • Le -r commutateur indique qu'scpil doit effectuer une copie récursive de tout le contenu des third-party répertoires library et de la AWS SDK pour Java distribution.

  • Le commutateur -p indique que scp doit conserver les autorisations des fichiers sources lorsque ceux-ci sont copiés vers la destination.

    Note

    Le -p commutateur fonctionne uniquement sous Linux, macOS ou Unix. Si vous copiez des fichiers à partir de Windows, vous devrez peut-être corriger les autorisations de fichiers sur votre instance à l'aide de la commande suivante :

chmod -R u+rwx GetS3Object.class build.xml lib third-party

Exécutez l'exemple de programme sur l' EC2 instance

Pour exécuter le programme, connectez-vous à votre Amazon EC2 instance. Pour plus d'informations, consultez Connect to your Linux instance dans le guide de Amazon EC2 l'utilisateur pour les instances Linux.

Si ant n'est pas disponible sur votre instance, installez-le à l'aide de la commande suivante :

sudo yum install ant

Exécutez ensuite le programme en utilisant ant comme suit :

ant run

Le programme va écrire le contenu de votre Amazon S3 objet dans votre fenêtre de commande.