

Le AWS SDK pour Java 1.x a été atteint end-of-support le 31 décembre 2025. Nous vous recommandons de migrer vers le pour continuer [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html)à 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
<a name="java-dg-roles"></a>

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](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) 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
<a name="default-provider-chain"></a>

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`.

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

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

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

1. 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.

1. 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 [InstanceProfileCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/InstanceProfileCredentialsProvider.html)instance 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](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/AmazonClientException.html).

## Procédure pas à pas : utilisation des rôles IAM pour les instances EC2
<a name="roles-walkthrough"></a>

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
<a name="java-dg-create-the-role"></a>

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

1. Ouvrez la [console IAM](https://console.aws.amazon.com/iam/home).

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

1. 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.

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

1. 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**.

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

### Lancez une EC2 instance et spécifiez votre rôle IAM
<a name="java-dg-launch-ec2-instance-with-instance-profile"></a>

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](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) 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](run-instance.md).

### Création de votre application
<a name="java-dg-remove-the-credentials"></a>

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
<a name="java-dg-transfer-compiled-program-to-ec2-instance"></a>

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](https://console.aws.amazon.com/ec2/home) 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'`scp`il 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
<a name="java-dg-run-the-program"></a>

Pour exécuter le programme, connectez-vous à votre Amazon EC2 instance. Pour plus d'informations, consultez [Connect to your Linux instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) 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.