AWS SDK for Java 1.x telah memasuki mode pemeliharaan pada 31 Juli 2024, dan akan mencapai end-of-support
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:
-
Dalam properti sistem Java:
aws.accessKeyId
danaws.secretKey
. -
Dalam variabel lingkungan sistem:
AWS_ACCESS_KEY_ID
danAWS_SECRET_ACCESS_KEY
. -
Dalam file kredensia default (lokasi file ini bervariasi menurut platform).
-
Kredensi disampaikan melaluiAmazon EC2layanan kontainer jika
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
variabel lingkungan diatur dan manajer keamanan memiliki izin untuk mengakses variabel. -
Dikredensi profil instans, yang ada dalam metadata instance yang terkait dengan peran IAM untuk instans EC2.
-
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,InstanceProfileCredentialsProvider
secara 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 sendiriInstanceProfileCredentialsProvider
sebagai bagian dari rantai penyedia default, atau ketika Anda melewatiInstanceProfileCredentialsProvider
contoh 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.
-
Buka konsol IAM
. -
Di panel navigasi, pilihPeranmakaBuat Peran Baru.
-
Masukkan nama peran, lalu pilihLangkah Selanjutnya. Ingat nama ini, karena Anda akan membutuhkannya ketika Anda meluncurkanAmazon EC2contoh.
-
PadaPilih Tipe Peranhalaman, di bawah Layanan AWSPeran, pilih Amazon EC2 .
-
PadaMengatur Izinhalaman, di bawahPilih Templat Kebijakan, pilih Amazon S3Akses Hanya BacamakaLangkah Selanjutnya.
-
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~/Downloads
direktori, 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 EC2ec2-198-51-100-1.compute-1.amazonaws.com
).
Dalam perintah sebelumnya:
-
GetS3Object.class
adalah program Anda dikompilasi -
build.xml
adalah file semut yang digunakan untuk membangun dan menjalankan program Anda -
sang
lib
danthird-party
direktori adalah folder pustaka yang sesuai dariAWS SDK for Java. -
Parameter
-r
switch menunjukkan bahwascp
harus melakukan salinan rekursif dari semua isilibrary
danthird-party
direktori dalamAWS SDK for Javadistribusi. -
Parameter
-p
switch menunjukkan bahwascp
harus menjaga izin dari file sumber ketika salinan mereka ke tujuan.catatan
Parameter
-p
switch 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 menggunakanant
sebagai berikut:
ant run
Program ini akan menulis isi dari AndaAmazon S3keberatan jendela perintah Anda.