La AWS SDK for Java version 1.x est entrée en mode maintenance le 31 juillet 2024 et atteindra end-of-support
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 :
-
Dans les propriétés système Java :
aws.accessKeyId
etaws.secretKey
. -
Dans les variables d'environnement du système :
AWS_ACCESS_KEY_ID
etAWS_SECRET_ACCESS_KEY
. -
Dans le fichier d'informations d'identification par défaut (l'emplacement de ce fichier varie en fonction de la plateforme).
-
Informations d'identification délivrées via leAmazon EC2service de conteneurs si le
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
la variable d'environnement est définie et le gestionnaire de sécurité a l'autorisation d'accéder à cette variable. -
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.
-
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,InstanceProfileCredentialsProvider
les 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.
-
Ouvrez la console IAM
. -
Dans le panneau de navigation, sélectionnez Rôles, puis Créer un rôle.
-
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
-
Dans la pageSélectionner un type de rôlepage, sous Service AWSRôles, sélectionnez Amazon EC2 .
-
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.
-
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 EC2ec2-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
etthird-party
sont les dossiers de bibliothèque correspondants du kit AWS SDK for Java. -
Le commutateur
-r
indique quescp
doit effectuer une copie récursive de tout le contenu des répertoireslibrary
etthird-party
de la distribution AWS SDK for Java. -
Le commutateur
-p
indique quescp
doit conserver les autorisations des fichiers sources lorsque ceux-ci sont copiés vers la destination.Note
Le
-p
Switch 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.