Menggunakan Peran IAM untuk Memberikan Akses keAWSSumber Daya diAmazon EC2 - AWS SDK for Java 1.x

AWS SDK for Java 1.x telah memasuki mode pemeliharaan pada 31 Juli 2024, dan akan mencapai end-of-supportpada 31 Desember 2025. Kami menyarankan Anda bermigrasi ke AWS SDK for Java 2.xuntuk 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 keAWSSumber Daya diAmazon EC2

Semua permintaan untukAmazon Web Services(AWS) harus ditandatangani secara kriptografis menggunakan kredensi yang dikeluarkan olehAWS. Anda dapat menggunakanIAM roleuntuk dengan mudah memberikan akses yang aman keAWSsumber daya dariAmazon EC2contoh.

Topik ini memberikan informasi tentang cara menggunakan peran IAM dengan aplikasi Java SDK berjalanAmazon EC2. Untuk informasi selengkapnya tentang instans IAM, lihatPeran IAM untukAmazon EC2di dalamAmazon EC2Panduan Pengguna untuk Instans Linux.

Rantai penyedia default dan profil instans EC2

Jika aplikasi Anda membuatAWSklien menggunakan konstruktor default, maka klien akan mencari kredensia menggunakanrantai penyedia kredensia default, dalam urutan sebagai berikut:

  1. Dalam properti sistem Java:aws.accessKeyIddanaws.secretKey.

  2. Dalam variabel lingkungan sistem:AWS_ACCESS_KEY_IDdanAWS_SECRET_ACCESS_KEY.

  3. Dalam file kredensia default (lokasi file ini bervariasi menurut platform).

  4. Kredensi disampaikan melaluiAmazon EC2layanan kontainer jikaAWS_CONTAINER_CREDENTIALS_RELATIVE_URIvariabel lingkungan diatur dan manajer keamanan memiliki izin untuk mengakses variabel.

  5. Dikredensi profil instans, yang ada dalam metadata instance yang terkait dengan peran IAM untuk instans EC2.

  6. Kredensi Token Identity Web dari lingkungan atau wadah.

Parameterkredensi profil instanslangkah dalam rantai penyedia default hanya tersedia saat menjalankan aplikasi Anda padaAmazon EC2misalnya, tetapi memberikan kemudahan terbesar penggunaan dan keamanan terbaik ketika bekerja denganAmazon EC2contoh. Anda juga dapat melewati sebuahInstanceProfileCredentialsProvidercontoh langsung ke konstruktor klien untuk mendapatkan kredensia profil misalnya tanpa melanjutkan melalui seluruh rantai penyedia default.

Misalnya:

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

Saat menggunakan pendekatan ini, SDK mengambil sementaraAWSkredensia yang memiliki izin yang sama dengan yang terkait dengan peran IAM yang terkait denganAmazon EC2misalnya dalam profil instans. Meskipun kredensi ini bersifat sementara dan akhirnya akan berakhir,InstanceProfileCredentialsProvidersecara berkala menyegarkan mereka untuk Anda sehingga kredensi yang diperoleh terus memungkinkan akses keAWS.

penting

Penyegaran kredenal otomatis terjadicumaketika Anda menggunakan konstruktor klien default, yang menciptakan sendiriInstanceProfileCredentialsProvidersebagai bagian dari rantai penyedia default, atau ketika Anda melewatiInstanceProfileCredentialsProvidercontoh langsung ke konstruktor klien. Jika Anda menggunakan metode lain untuk mendapatkan atau meneruskan kredensi profil instans, Anda bertanggung jawab untuk memeriksa dan menyegarkan kredensi kedaluwarsa.

Jika konstruktor klien tidak dapat menemukan kredensia menggunakan rantai penyedia kredensia, itu akan melemparAmazonClientException.

Panduan: Menggunakan peran IAM untuk instans EC2

Panduan berikut menunjukkan kepada Anda cara untuk mengambil objek dariAmazon S3menggunakan peran IAM untuk mengelola akses.

Buat IAM Role

Buat peran IAM yang memberikan akses hanya bacaAmazon S3.

  1. Buka konsol IAM.

  2. Di panel navigasi, pilihPeranmakaBuat Peran Baru.

  3. Masukkan nama peran, lalu pilihLangkah Selanjutnya. Ingat nama ini, karena Anda akan membutuhkannya ketika Anda meluncurkanAmazon EC2contoh.

  4. PadaPilih Tipe Peranhalaman, di bawah AWS layananPeran, pilih Amazon EC2 .

  5. PadaMengatur Izinhalaman, di bawahPilih Templat Kebijakan, pilih Amazon S3Akses Hanya BacamakaLangkah Selanjutnya.

  6. PadaTinjauhalaman, pilihBuat Peran.

Luncurkan Instans EC2 dan Tentukan Peran IAM Anda

Anda dapat meluncurkanAmazon EC2instans dengan peran IAM menggunakanAmazon EC2konsol atauAWS SDK for Java.

  • Untuk meluncurkan sebuahAmazon EC2instans menggunakan konsol, ikuti petunjuk dalamMemulai denganAmazon EC2Instans Linuxdi dalamAmazon EC2Panduan Pengguna untuk Instans Linux.

    Ketika Anda mencapaiMeninjau Peluncuran instanshalaman, pilihMengedit detail instans. MasukPeran 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 sebuahAmazon EC2instans dengan peran IAM menggunakanAWS SDK for Java, lihatJalankan sebuahAmazon EC2Instans.

Buat Aplikasi Anda

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

Selanjutnya, salinAWS SDK for Javaperpustakaan ke direktori yang baru dibuat. Jika Anda mengunduhAWS SDK for Javake~/Downloadsdirektori, 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 sajaGetS3Object.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 sajabuild.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 kredensi yang disimpan dalam program. Oleh karena itu, kecuali Anda memiliki AndaAWSkredensia yang ditentukan sudah, kode akan melemparAmazonServiceException. Misalnya:

$ 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 yang Disusun ke Instans EC2 Anda

Transfer program keAmazon EC2contoh menggunakan salinan aman ( ), bersama denganAWS SDK for Javaperpustakaan. 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 Penggunamungkin “ec2-user”, “root”, atau “ubuntu”. Untuk mendapatkan nama DNS publik dari instans Anda, bukaKonsol EC2dan carilahDNS Publikvalue dalamDeskripsitab (misalnya,ec2-198-51-100-1.compute-1.amazonaws.com).

Dalam perintah sebelumnya:

  • GetS3Object.classadalah program Anda dikompilasi

  • build.xmladalah file semut yang digunakan untuk membangun dan menjalankan program Anda

  • sanglibdanthird-partydirektori adalah folder pustaka yang sesuai dariAWS SDK for Java.

  • Parameter-rswitch menunjukkan bahwascpharus melakukan salinan rekursif dari semua isilibrarydanthird-partydirektori dalamAWS SDK for Javadistribusi.

  • Parameter-pswitch menunjukkan bahwascpharus menjaga izin dari file sumber ketika salinan mereka ke tujuan.

    catatan

    Parameter-pswitch hanya berfungsi di Linux, macOS, atau Unix. Jika Anda menyalin file dari Windows, Anda mungkin perlu memperbaiki izin file pada instans Anda menggunakan perintah berikut:

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

Jalankan Program Sampel pada Instans EC2

Untuk menjalankan program, hubungkan keAmazon EC2contoh. Untuk informasi selengkapnya, lihatConnect ke Instans Linux Andadi dalamAmazon EC2Panduan Pengguna untuk Instans Linux.

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

sudo yum install ant

Kemudian, jalankan program menggunakanantsebagai berikut:

ant run

Program ini akan menulis isi dari AndaAmazon S3keberatan jendela perintah Anda.