Version AWS SDK for Java 1.x wurde am 31. Juli 2024 in den Wartungsmodus versetzt und wird end-of-support
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden von IAM-Rollen zum Gewähren von Zugriff aufAWSRessourcen aufAmazon EC2
Alle Anforderungen anAmazon Web Services(AWS) muss kryptografisch mit den Anmeldeinformationen signiert sein, die vonAWSaus. Sie könnenIAM rolesum bequem sicheren Zugriff zu gewährenAWSRessourcen von IhremAmazon EC2Instanzen.
In diesem Thema finden Sie Informationen zur Verwendung von IAM-Rollen mit Java SDK-Anwendungen aufAmazon EC2aus. Weitere Informationen zu IAM-Instances finden Sie unterIAM-Rollen fürAmazon EC2imAmazon EC2-Benutzerhandbuch für Linux-Instances
Die standardmäßige Anbieterkette und EC2-Instance-Profile
Wenn Ihre Anwendung eine erstelltAWS-Client mit dem Standardkonstruktor sucht der Client mit demAnbieterkette für Standarddatenin der folgenden Reihenfolge:
-
in den Java-Systemeigenschaften:
aws.accessKeyId
undaws.secretKey
-
in System-Umgebungsvariablen:
AWS_ACCESS_KEY_ID
undAWS_SECRET_ACCESS_KEY
-
in der Standarddatei für Anmeldeinformationen (der Speicherort dieser Datei hängt von der jeweiligen Plattform ab)
-
Anmeldeinformationen, die über dieAmazon EC2Container Service, wenn der
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
Die Umgebungsvariable ist festgelegt und der Sicherheitsmanager verfügt über die Berechtigung zum Zugriff auf die Variable. -
in den Anmeldeinformationen des Instance-Profils, die zu den Instance-Metadaten gehören, die mit der IAM-Rolle für die EC2-Instance verknüpft sind
-
Web-Identitätstoken-Anmeldeinformationen aus der Umgebung oder dem Container.
Der Schritt Anmeldeinformationen des Instance-Profils in der standardmäßigen Anbieterkette ist nur verfügbar, wenn Ihre Anwendung auf einer Amazon EC2-Instance ausgeführt wird. Er ist allerdings am einfachsten und bietet die beste Sicherheit beim Umgang mit Amazon EC2-Instances. Sie können auch eine InstanceProfileCredentialsProvider-Instance direkt an den Client-Konstruktor übergeben und erhalten so Anmeldeinformationen des Instance-Profils ohne Verarbeitung der gesamten standardmäßigen Anbieterkette.
Beispiel:
AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withCredentials(new InstanceProfileCredentialsProvider(false)) .build();
Wenn Sie diesen Ansatz verwenden, ruft das SDK temporär abAWSAnmeldeinformationen mit den gleichen Berechtigungen wie diejenigen der IAM-Rolle, die mit derAmazon EC2-Instance in seinem Instance-Profil. Obwohl diese Anmeldeinformationen vorübergehend sind und schließlich ablaufen würden,InstanceProfileCredentialsProvider
Aktualisiert sie in regelmäßigen Abständen für Sie, damit die erhaltenen Anmeldeinformationen weiterhin aufAWSaus.
Wichtig
Die Anmeldeinformationen werden nur dann automatisch aktualisiert, wenn Sie den standardmäßigen Client-Konstruktor verwenden, der seinen eigenen InstanceProfileCredentialsProvider
als Teil der standardmäßigen Anbieterkette erstellt, oder wenn Sie eine InstanceProfileCredentialsProvider
-Instance direkt an den Client-Konstruktor übergeben. Wenn Sie Anmeldeinformationen des Instance-Profils auf andere Weise abrufen oder übergeben, sind Sie selbst für die Überprüfung und ggf. für die Aktualisierung abgelaufener Anmeldeinformationen zuständig.
Wenn der Client-Konstruktor keine Anmeldeinformationen mithilfe der standardmäßigen Anbieterkette von Anmeldeinformationen finden kann, wird eine AmazonClientException ausgelöst.
Vorgehensweise: Verwenden von IAM-Rollen für EC2-Instances
Die folgende Anleitung zeigt, wie Sie ein Objekt von abrufen könnenAmazon S3Verwenden einer IAM-Rolle zum Verwalten des Zugriffs.
Erstellen einer IAM-Rolle
Erstellen Sie eine IAM-Rolle, die Lesezugriff auf Amazon S3 gewährt.
-
Öffnen Sie die IAM-Konsole
. -
Wechseln Sie im Navigationsbereich zu Roles (Rollen) und klicken Sie auf Create New Role (Neue Rolle erstellen).
-
Geben Sie einen Namen für die Rolle ein und klicken Sie dann auf Next Step. Notieren Sie sich diesen Namen, da Sie ihn benötigen, wenn Sie die Amazon EC2-Instance starten.
-
Auf derRollentyp wählenseite, unter AWS-ServiceRollenSelect Amazon EC2 aus.
-
Auf derBerechtigungen festlegenseite, unterWählen Sie eine RichtlinienvorlageSelect Amazon S3Schreibgeschützter Zugriff, dannNächster Schrittaus.
-
Wählen Sie auf der Seite Review (Prüfen) Create Role (Rolle erstellen) aus.
Starten einer EC2-Instance und Angeben der IAM-Rolle
Sie können einAmazon EC2-Instance mit einer IAM-Rolle mit derAmazon EC2-Konsole oder dasAWS SDK for Javaaus.
-
So starten Sie einAmazon EC2Befolgen Sie mit der -Konsole die Anweisungen unterErste Schritte mitAmazon EC2Linux InstancesimAmazon EC2-Benutzerhandbuch für Linux-Instances
Wenn Sie die Seite Review Instance Launch erreichen, klicken Sie auf Edit instance details. In :IAM-RolleWählen Sie die zuvor erstellte IAM-Rolle aus. Befolgen Sie die Anweisungen und schließen Sie den Vorgang ab.
Anmerkung
Zum Herstellen einer Verbindung mit der Instance müssen Sie eine Sicherheitsgruppe und ein Schlüsselpaar neu erstellen oder vorhandene Anmeldeinformationen auswählen.
-
So starten Sie einAmazon EC2-Instance mit einer IAM-Rolle mit derAWS SDK for Javafinden Sie unterAusführen eines sAmazon EC2-Instanceaus.
Erstellen Ihrer Anwendung
Lassen Sie uns die Beispielanwendung zum Ausführen auf der EC2-Instance erstellen. Zuerst erstellen Sie ein Verzeichnis, in dem Sie die Tutorial-Dateien abspeichern können (z. B. GetS3ObjectApp
).
Kopieren Sie als Nächstes die AWS SDK for Java-Bibliotheken in Ihr neu erstelltes Verzeichnis. Wenn Sie das AWS SDK for Java in Ihr ~/Downloads
-Verzeichnis heruntergeladen haben, können Sie sie mit folgenden Befehlen kopieren:
cp -r ~/Downloads/aws-java-sdk-{1.7.5}/lib . cp -r ~/Downloads/aws-java-sdk-{1.7.5}/third-party .
Legen Sie eine neue Datei namens GetS3Object.java
an und fügen Sie den folgenden Code ein:
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(); } }
Legen Sie eine weitere neue Datei namens build.xml
an und fügen Sie folgende Zeilen ein:
<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>
Erstellen und starten Sie das geänderte Programm. Beachten Sie, dass keine Anmeldeinformationen im Programm gespeichert werden. Deshalb, es sei denn, Sie haben IhreAWSAnmeldeinformationen, die bereits angegeben sind, löst der CodeAmazonServiceException
aus. Beispiel:
$ 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
Übertragen des kompilierten Programms an Ihre EC2-Instance
Übertragen Sie das Programm per SCP (Secure Copy, Amazon EC2 ) zusammen mit den -Bibliotheken auf Ihre AWS SDK for Java-Instance. Die Reihenfolge der Befehle sieht in etwa wie folgt aus:
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
Anmerkung
Abhängig von der verwendeten Linux-Distribution lautet der user name (Benutzername) "ec2-user", "root" oder "ubuntu". Sie können den öffentlichen DNS-Namen Ihrer Instance abrufen, indem Sie die EC2-Konsoleec2-198-51-100-1.compute-1.amazonaws.com
).
Bei den vorhergehenden Befehlen:
-
ist
GetS3Object.class
Ihr kompiliertes Programm, -
build.xml
ist die Ant-Datei zum Erstellen und Ausführen Ihres Programms und -
die Verzeichnisse
lib
undthird-party
sind die entsprechenden Bibliotheksordner aus dem AWS SDK for Java. -
Der Schalter
-r
gibt an, dassscp
sämtliche Inhalte der Verzeichnisselibrary
undthird-party
in der AWS SDK for Java-Distribution rekursiv kopieren sollte. -
Der Schalter
-p
sorgt dafür, dassscp
die Berechtigungen der Quelldateien beibehalten soll, während diese zum Ziel kopiert werden.Anmerkung
Die
-p
switch funktioniert nur unter Linux, macOS oder Unix. Wenn Sie Dateien von Windows kopieren, müssen Sie die Dateiberechtigungen auf Ihrer Instance mit dem folgenden Befehl korrigieren:
chmod -R u+rwx GetS3Object.class build.xml lib third-party
Ausführen des Beispielprogramms auf der EC2-Instance
Verbinden Sie sich zum Ausführen des Programms mit der Amazon EC2-Instance. Weitere Informationen finden Sie unterHerstellen einer Verbindung mit Ihrer Linux-InstanceimAmazon EC2-Benutzerhandbuch für Linux-Instances
Wenn
ant
auf Ihrer Instance nicht verfügbar ist, installieren Sie es mit folgendem Befehl:
sudo yum install ant
Führen Sie das Programm dann mithilfe von ant
wie folgt aus:
ant run
Das Programm schreibt den Inhalt Ihres Amazon S3-Objekts in Ihr Befehlsfenster.