

 AWS SDK untuk Java 1.x mencapai end-of-support pada 31 Desember 2025. Kami menyarankan Anda bermigrasi ke [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html)untuk terus menerima fitur baru, peningkatan ketersediaan, dan pembaruan keamanan.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan Peran IAM untuk Memberikan Akses ke AWS Sumber Daya Amazon EC2
<a name="java-dg-roles"></a>

Semua permintaan ke Amazon Web Services (AWS) harus ditandatangani secara kriptografis menggunakan kredensil yang dikeluarkan oleh. AWS Anda dapat menggunakan *peran IAM* untuk memberikan akses aman ke AWS sumber daya dari Amazon EC2 instans Anda dengan mudah.

Topik ini memberikan informasi tentang cara menggunakan peran IAM dengan aplikasi Java SDK yang berjalan. Amazon EC2 Untuk informasi selengkapnya tentang instans IAM, lihat [Peran IAM Amazon EC2 di Panduan Amazon EC2 Pengguna untuk](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) Instans Linux.

## Rantai penyedia default dan profil EC2 instans
<a name="default-provider-chain"></a>

Jika aplikasi Anda membuat AWS klien menggunakan konstruktor default, maka klien akan mencari kredensil menggunakan *rantai penyedia kredensi default, dengan* urutan sebagai berikut:

1. Dalam properti sistem Java: `aws.accessKeyId` dan`aws.secretKey`.

1. Dalam variabel lingkungan sistem: `AWS_ACCESS_KEY_ID` dan`AWS_SECRET_ACCESS_KEY`.

1. Dalam file kredensi default (lokasi file ini bervariasi menurut platform).

1. Kredensil dikirimkan melalui layanan Amazon EC2 kontainer jika variabel `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` lingkungan disetel dan manajer keamanan memiliki izin untuk mengakses variabel.

1. Dalam *kredensi profil instance*, yang ada dalam metadata instance yang terkait dengan peran IAM untuk instance. EC2 

1. Kredensi Token Identitas Web dari lingkungan atau wadah.

Langkah *kredensial profil instans* dalam rantai penyedia default hanya tersedia saat menjalankan aplikasi Anda pada sebuah Amazon EC2 instance, tetapi memberikan kemudahan penggunaan dan keamanan terbaik saat bekerja dengan Amazon EC2 instance. Anda juga dapat meneruskan [InstanceProfileCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/InstanceProfileCredentialsProvider.html)instance langsung ke konstruktor klien untuk mendapatkan kredensil profil instance tanpa melanjutkan seluruh rantai penyedia default.

Sebagai contoh:

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

Saat menggunakan pendekatan ini, SDK mengambil AWS kredensil sementara yang memiliki izin yang sama dengan yang terkait dengan peran IAM yang terkait dengan instance di profil instancenya. Amazon EC2 Meskipun kredensil ini bersifat sementara dan pada akhirnya akan kedaluwarsa, `InstanceProfileCredentialsProvider` secara berkala menyegarkannya untuk Anda sehingga kredensil yang diperoleh terus memungkinkan akses ke. AWS

**penting**  
Penyegaran kredenal otomatis *hanya* terjadi ketika Anda menggunakan konstruktor klien default, yang membuatnya sendiri `InstanceProfileCredentialsProvider` sebagai bagian dari rantai penyedia default, atau ketika Anda meneruskan `InstanceProfileCredentialsProvider` instance langsung ke konstruktor klien. Jika Anda menggunakan metode lain untuk mendapatkan atau meneruskan kredensi profil instans, Anda bertanggung jawab untuk memeriksa dan menyegarkan kredensil yang kedaluwarsa.

Jika konstruktor klien tidak dapat menemukan kredensil menggunakan rantai penyedia kredensil, itu akan memunculkan file. [AmazonClientException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/AmazonClientException.html)

## Walkthrough: Menggunakan peran IAM untuk instance EC2
<a name="roles-walkthrough"></a>

Panduan berikut menunjukkan cara mengambil objek dari Amazon S3 menggunakan peran IAM untuk mengelola akses.

### Buat IAM Role
<a name="java-dg-create-the-role"></a>

Buat peran IAM yang memberikan akses hanya-baca ke. Amazon S3

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

1. Di panel navigasi, pilih **Peran, lalu Buat Peran** **Baru**.

1. Masukkan nama untuk peran tersebut, lalu pilih **Langkah Berikutnya**. Ingat nama ini, karena Anda akan membutuhkannya saat meluncurkan Amazon EC2 instance Anda.

1. Pada halaman **Pilih Jenis Peran**, di bawah ** Layanan AWS Peran**, pilih ** Amazon EC2 **.

1. Pada halaman **Setel Izin**, di bawah **Pilih Templat Kebijakan**, pilih **Akses Hanya Amazon S3 Baca**, lalu **Langkah Berikutnya**.

1. Pada halaman **Ulasan**, pilih **Buat Peran**.

### Luncurkan EC2 Instance dan Tentukan Peran IAM Anda
<a name="java-dg-launch-ec2-instance-with-instance-profile"></a>

Anda dapat meluncurkan Amazon EC2 instance dengan peran IAM menggunakan Amazon EC2 konsol atau. AWS SDK untuk Java
+ Untuk meluncurkan Amazon EC2 instance menggunakan konsol, ikuti petunjuk di [Memulai dengan Instans Amazon EC2 Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

  Saat Anda mencapai halaman **Peluncuran Instance Tinjauan**, pilih **Edit detail instans**. Dalam **peran IAM**, pilih peran IAM yang Anda buat sebelumnya. Selesaikan prosedur sesuai petunjuk.
**catatan**  
Anda harus membuat atau menggunakan grup keamanan dan key pair yang ada untuk terhubung ke instance.
+ Untuk meluncurkan Amazon EC2 instance dengan peran IAM menggunakan AWS SDK untuk Java, lihat [Menjalankan Amazon EC2 Instance](run-instance.md).

### Buat Aplikasi Anda
<a name="java-dg-remove-the-credentials"></a>

Mari kita membangun aplikasi sampel untuk dijalankan pada EC2 instance. Pertama, buat direktori yang dapat Anda gunakan untuk menyimpan file tutorial Anda (misalnya,`GetS3ObjectApp`).

Selanjutnya, salin AWS SDK untuk Java pustaka ke direktori yang baru Anda buat. Jika Anda mengunduh AWS SDK untuk Java ke `~/Downloads` direktori Anda, Anda dapat menyalinnya menggunakan perintah berikut:

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

Buka file baru, sebut saja`GetS3Object.java`, dan tambahkan kode berikut:

```
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();
  }
}
```

Buka file baru, sebut saja`build.xml`, dan tambahkan baris berikut:

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

Bangun dan jalankan program yang dimodifikasi. Perhatikan bahwa tidak ada kredensil yang disimpan dalam program. Oleh karena itu, kecuali Anda memiliki AWS kredensil Anda sudah ditentukan, kode akan dibuang. `AmazonServiceException` Sebagai contoh:

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

### Transfer Program Kompilasi ke EC2 Instance Anda
<a name="java-dg-transfer-compiled-program-to-ec2-instance"></a>

Transfer program ke Amazon EC2 instans Anda menggunakan salinan aman (**``**), bersama dengan AWS SDK untuk Java pustaka. Urutan perintah terlihat seperti berikut ini.

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

**catatan**  
Tergantung pada distribusi Linux yang Anda gunakan, *nama pengguna* mungkin “ec2-user”, “root”, atau “ubuntu”. Untuk mendapatkan nama DNS publik instance Anda, buka [EC2 konsol](https://console.aws.amazon.com/ec2/home) dan cari nilai **DNS Publik** di tab **Deskripsi** (misalnya,`ec2-198-51-100-1.compute-1.amazonaws.com`).

Dalam perintah sebelumnya:
+  `GetS3Object.class`adalah program yang dikompilasi
+  `build.xml`adalah file semut yang digunakan untuk membangun dan menjalankan program Anda
+ `third-party`direktori `lib` dan adalah folder perpustakaan yang sesuai dari file. AWS SDK untuk Java
+ `-r`Sakelar menunjukkan bahwa `scp` harus melakukan salinan rekursif dari semua isi `library` dan `third-party` direktori dalam distribusi. AWS SDK untuk Java 
+ `-p`Sakelar menunjukkan bahwa `scp` harus mempertahankan izin file sumber saat menyalinnya ke tujuan.
**catatan**  
`-p`Sakelar hanya berfungsi di Linux, macOS, atau Unix. Jika Anda menyalin file dari Windows, Anda mungkin perlu memperbaiki izin file pada instance Anda menggunakan perintah berikut:

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

### Jalankan Program Sampel pada EC2 Instance
<a name="java-dg-run-the-program"></a>

Untuk menjalankan program, sambungkan ke Amazon EC2 instans Anda. Untuk informasi selengkapnya, lihat [Connect to Your Linux Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

Jika tidak **` ant `**tersedia pada instans Anda, instal menggunakan perintah berikut:

```
sudo yum install ant
```

Kemudian, jalankan program menggunakan `ant` sebagai berikut:

```
ant run
```

Program ini akan menulis isi Amazon S3 objek Anda ke jendela perintah Anda.