Verwenden von IAM-Rollen zum Gewähren von Zugriff aufAWSRessourcen aufAmazon EC2 - AWS SDK for Java 1.x

Version AWS SDK for Java 1.x wurde am 31. Juli 2024 in den Wartungsmodus versetzt und wird end-of-supportam 31. Dezember 2025 verfügbar sein. Wir empfehlen Ihnen, auf den zu migrieren AWS SDK for Java 2.x, um weiterhin neue Funktionen, Verfügbarkeitsverbesserungen und Sicherheitsupdates zu erhalten.

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:

  1. in den Java-Systemeigenschaften: aws.accessKeyId und aws.secretKey

  2. in System-Umgebungsvariablen: AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY

  3. in der Standarddatei für Anmeldeinformationen (der Speicherort dieser Datei hängt von der jeweiligen Plattform ab)

  4. Anmeldeinformationen, die über dieAmazon EC2Container Service, wenn derAWS_CONTAINER_CREDENTIALS_RELATIVE_URIDie Umgebungsvariable ist festgelegt und der Sicherheitsmanager verfügt über die Berechtigung zum Zugriff auf die Variable.

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

  6. 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,InstanceProfileCredentialsProviderAktualisiert 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.

  1. Öffnen Sie die IAM-Konsole.

  2. Wechseln Sie im Navigationsbereich zu Roles (Rollen) und klicken Sie auf Create New Role (Neue Rolle erstellen).

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

  4. Auf derRollentyp wählenseite, unter AWS-ServiceRollenSelect Amazon EC2 aus.

  5. Auf derBerechtigungen festlegenseite, unterWählen Sie eine RichtlinienvorlageSelect Amazon S3Schreibgeschützter Zugriff, dannNächster Schrittaus.

  6. 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 CodeAmazonServiceExceptionaus. 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-Konsole öffnen und den Wert Public DNS auf der Registerkarte Description beachten (z. B. ec2-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 und third-party sind die entsprechenden Bibliotheksordner aus dem AWS SDK for Java.

  • Der Schalter -r gibt an, dass scp sämtliche Inhalte der Verzeichnisse library und third-party in der AWS SDK for Java-Distribution rekursiv kopieren sollte.

  • Der Schalter -p sorgt dafür, dass scp die Berechtigungen der Quelldateien beibehalten soll, während diese zum Ziel kopiert werden.

    Anmerkung

    Die-pswitch 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.