Utilisation de rôles IAM pour accorder l'accès àAWSRessources surAmazon EC2 - AWS SDK for Java 1. x

La AWS SDK for 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 de rôles IAM pour accorder l'accès àAWSRessources surAmazon EC2

Toutes les demandes àAmazon Web Services(AWS) doit être signé de manière chiffrée avec des informations d'identification émises parAWS. Vous pouvez utiliserRôles IAMpour accorder facilement un accès sécurisé àAWSressources de votreAmazon EC2instances.

Cette rubrique fournit des informations sur l'utilisation des rôles IAM avec des applications SDK Java s'exécutant surAmazon EC2. Pour plus d'informations sur les instances IAM, consultezRôles IAM pourAmazon EC2dans leAmazon EC2Guide de l'utilisateur pour les instances Linux.

Chaîne de fournisseur par défaut et profils d'instance EC2

Si votre application crée uneAWSle client utilisant le constructeur par défaut, le client recherche les informations d'identification à l'aide de lachaîne fournisseur 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 délivrées via leAmazon EC2service de conteneurs si leAWS_CONTAINER_CREDENTIALS_RELATIVE_URIla variable d'environnement est définie et le gestionnaire de sécurité a l'autorisation d'accéder à cette variable.

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

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

L'étape relative aux informations d'identification du profil d'instance dans la chaîne de fournisseur par défaut est disponible uniquement lorsque vous exécutez votre application sur une instance Amazon EC2, mais elle offre la plus grande facilité d'utilisation et une sécurité optimale lorsque vous utilisez des instances Amazon EC2. Vous pouvez également transmettre une instance InstanceProfileCredentialsProvider directement au constructeur client pour obtenir des informations d'identification de profil d'instance sans avoir recours à la totalité de la chaîne de fournisseur par défaut.

Par Exemple:

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

Lorsque vous utilisez cette approche, le SDK récupère temporairementAWSles informations d'identification qui disposent des mêmes autorisations que celles associées au rôle IAM qui est associé à l'Amazon EC2dans son profil d'instance. Bien que ces informations d'identification soient temporaires et finiraient par expirer,InstanceProfileCredentialsProviderles actualise régulièrement pour vous afin que les informations d'identification obtenues continuent d'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 client ne peut pas trouver d'informations d'identification à l'aide de la chaîne de fournisseur d'informations d'identification, il lève une exception AmazonClientException.

Procédure : Utilisation de rôles IAM pour les instances EC2

La procédure suivante vous montre comment extraire un objet depuisAmazon S3Utilisation 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 l'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. Mémorisez ce nom, car il vous sera utile lorsque vous lancerez votre instance Amazon EC2

  4. Dans la pageSélectionner un type de rôlepage, sous AWS serviceRôles, sélectionnez Amazon EC2 .

  5. Dans la pageRéglez les autorisationspage, sousSélectionner un modèle de stratégie, sélectionnez Amazon S3Accès en lecture seule, puisÉtape suivante.

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

Lancement d'une instance EC2 et spécification de votre rôle IAM

Vous pouvez lancer unAmazon EC2avec un rôle IAM à l'aide de l'Amazon EC2ou la consoleAWS SDK for Java.

  • Pour lancer unAmazon EC2à l'aide de la console, suivez les instructions fournies dansDémarrer avecAmazon EC2Instances Linuxdans leAmazon EC2Guide de 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. DansRô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 unAmazon EC2avec un rôle IAM à l'aide de l'AWS SDK for Java, voirExécutez unAmazon EC2Instance.

Création de votre application

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

Ensuite, copiez les bibliothèques AWS SDK for Java dans le répertoire nouvellement créé. Si vous avez téléchargé le kit AWS SDK for Java dans votre répertoire ~/Downloads, vous pouvez le 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 votreAWSLes informations d'identification déjà spécifiées, le code lanceraAmazonServiceException. 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

Transfert du programme compilé à votre instance EC2

Transférez le programme à votre instance Amazon EC2 à l'aide d'une copie sécurisée ( ), ainsi que les bibliothèques AWS SDK for Java. 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 console EC2 et recherchez la valeur de 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 for Java.

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

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

    Note

    Le-pSwitch 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écution de l'exemple de programme sur l'instance EC2

Pour exécuter le programme, connectez-vous à votre instance Amazon EC2. Pour de plus amples informations, veuillez consulterConnectez-vous à votre instance Linuxdans leAmazon EC2Guide de 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 écrit le contenu de votre objet Amazon S3 dans la fenêtre de commande.