La AWS SDK for Java versione 1.x è entrata in modalità manutenzione il 31 luglio 2024 e sarà disponibile il 31 end-of-support
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo di ruoli IAM per concedere l'accesso aAWSRisorse suAmazon EC2
Tutte le richieste aAmazon Web Services(AWS) deve essere firmato crittograficamente utilizzando le credenziali rilasciate daAWS. È possibile utilizzareRuoli IAMper garantire comodamente un accesso sicuro aAWSrisorse dal tuoAmazon EC2istanze.
In questo argomento vengono fornite le informazioni su come utilizzare i ruoli IAM con applicazioni Java SDK in esecuzione suAmazon EC2. Per ulteriori informazioni sulle istanze IAM, consultaRuoli IAM perAmazon EC2nellaAmazon EC2Guida per l'utente per istanze Linux.
La catena di provider predefinita e i profili di istanza EC2
Se la tua applicazione crea unAWSclient che utilizza il costruttore predefinito, quindi il client cercherà le credenziali utilizzando ilcatena di provider di credenziali predefinite, nel seguente ordine:
-
Nelle proprietà del sistema Java:
aws.accessKeyId
eaws.secretKey
. -
Nelle variabili di ambiente del sistema:
AWS_ACCESS_KEY_ID
eAWS_SECRET_ACCESS_KEY
. -
Nel file delle credenziali predefinito (il percorso di questo file varia in base alla piattaforma).
-
Credenziali consegnate tramite ilAmazon EC2servizio container se il servizio container
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
è impostata la variabile di ambiente e security manager ha il permesso di accedere alla variabile. -
Nelle credenziali del profilo di istanza, disponibili all'interno dei metadati dell'istanza associati al ruolo IAM per l'istanza EC2.
-
Credenziali Web Identity Token dall'ambiente o dal contenitore.
Lacredenziali dell'istanzanella catena di provider predefinita è disponibile solo quando si esegue l'applicazione su unAmazon EC2ma offre la massima semplicità di utilizzo e la massima sicurezza durante l'utilizzo conAmazon EC2istanze. Puoi anche passare un'istanza InstanceProfileCredentialsProvider direttamente al costruttore client per ottenere le credenziali del profilo di istanza senza passare attraverso l'intera catena di provider predefinita.
Ad esempio:
AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withCredentials(new InstanceProfileCredentialsProvider(false)) .build();
Quando si utilizza questo approccio, l'SDK recupera temporaneamenteAWScredenziali che hanno le stesse autorizzazioni di quelle associate al ruolo IAM associato al ruolo IAM associato alAmazon EC2Istanza nel suo profilo dell'istanza. Sebbene queste credenziali siano temporanee e alla fine scadano,InstanceProfileCredentialsProvider
Le aggiorna periodicamente da per l'utente, affinché le credenziali ottenute continuino a consentire l'accesso aAWS.
Importante
L'aggiornamento automatico delle credenziali avvienesoloquando si utilizza il costruttore client predefinito, che ne crea unoInstanceProfileCredentialsProvider
come parte della catena di provider predefinita o quando si passa unInstanceProfileCredentialsProvider
istanza direttamente al costruttore client. Se si utilizza un altro metodo per ottenere o passare le credenziali del profilo di istanza, è responsabile del controllo e dell'aggiornamento delle credenziali scadute.
Se il costruttore client non riesce a trovare le credenziali utilizzando la catena del provider di credenziali, verrà generato unAmazonClientException.
Procedura guidata: Utilizzo di ruoli IAM per istanze EC2
Le procedure guidate seguenti illustrano come recuperare un oggetto daAmazon S3utilizzo di un ruolo IAM per gestire l'accesso.
Creare un ruolo IAM
Crea un ruolo IAM che concede accesso in sola lettura a Amazon S3.
-
Aprire la console IAM
. -
Nel riquadro di navigazione selezionareRuoli, quindiCreazione di nuovo ruolo.
-
Inserisci un nome per il ruolo, quindi seleziona Next Step (Fase successiva). Ricorda questo nome, poiché sarà necessario all'avvio del tuoAmazon EC2istanza.
-
SulSeleziona il tipo di ruolopagina, sotto AWS servizioRuoli, seleziona Amazon EC2 .
-
SulImpostazione delle autorizzazionipagina, sottoSeleziona modello di policy, seleziona Amazon S3Read Only Access (Accesso in sola lettura a ), quindiFase successiva.
-
SulReview (Revisione)page, selezionaCreazione di ruolo.
Avvio di un'istanza EC2 e specifica del ruolo IAM
È possibile lanciare unAmazon EC2istanza con un ruolo IAM utilizzando ilAmazon EC2console o ilAWS SDK for Java.
-
Per lanciare unAmazon EC2utilizzando la console, segui le indicazioni fornite inNozioni di base suAmazon EC2Istanze LinuxnellaAmazon EC2Guida per l'utente per istanze Linux.
Quando raggiungi la pagina Review Instance Launch (Verifica del lancio dell'istanza), seleziona Edit instance details (Modifica dettagli istanza). Nello statoRuolo IAM, selezionare il ruolo IAM creato in precedenza. Completa la procedura come descritto.
Nota
Dovrai creare o utilizzare un gruppo di sicurezza e una coppia di chiavi esistenti per connetterti all'istanza.
-
Per lanciare unAmazon EC2istanza con un ruolo IAM utilizzando ilAWS SDK for Java, consultaEseguire una diAmazon EC2Istanza.
Crea la tua applicazione
Creiamo l'applicazione di esempio da eseguire sull'istanza EC2. Innanzitutto, crea una directory che puoi usare per contenere i tuoi file tutorial (ad esempio,GetS3ObjectApp
).
Successivamente, copia del fileAWS SDK for Javalibrerie nella tua directory appena creata. Se è stata scaricata laAWS SDK for Javaal tuo~/Downloads
directory, è possibile copiarle utilizzando i comandi seguenti:
cp -r ~/Downloads/aws-java-sdk-{1.7.5}/lib . cp -r ~/Downloads/aws-java-sdk-{1.7.5}/third-party .
Apri un nuovo file, chiamaloGetS3Object.java
e aggiungere il seguente codice:
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(); } }
Apri un nuovo file, chiamalobuild.xml
e aggiungere le seguenti righe:
<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>
Creare ed eseguire il programma modificato. Notare che nel programma non sono presenti credenziali. Pertanto, a meno che tu non abbia il tuoAWScredenziali già specificate, il codice verrà generatoAmazonServiceException
. Ad esempio:
$ 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
Trasferisci il programma compilato all'istanza EC2
Trasferisci il programma sul tuoAmazon EC2istanza che utilizza la copia sicura ( ), insieme alAWS SDK for JavaLibrerie . La sequenza di comandi è simile alla seguente.
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
Nota
A seconda della distribuzione Linux utilizzata,nome utentepotrebbe essere «ec2-user», «root» o «ubuntu». Per ottenere il nome DNS pubblico dell'istanza, aprire laConsole EC2ec2-198-51-100-1.compute-1.amazonaws.com
).
Nei comandi precedenti:
-
GetS3Object.class
è il tuo programma compilato -
build.xml
è il file ant utilizzato per creare ed eseguire il programma -
lo
lib
ethird-party
le directory sono le cartelle di libreria corrispondenti dalAWS SDK for Java. -
La
-r
l'interruttore indica chescp
dovrebbe fare una copia ricorsiva di tutti i contenuti dellibrary
ethird-party
directory nelAWS SDK for Javadistribuzione. -
La
-p
l'interruttore indica chescp
dovrebbe preservare le autorizzazioni dei file di origine quando li copia nella destinazione.Nota
La
-p
funziona solo su Linux, macOS o Unix. Se si copiano file da Windows, potrebbe essere necessario correggere le autorizzazioni del file sull'istanza utilizzando il seguente comando:
chmod -R u+rwx GetS3Object.class build.xml lib third-party
Eseguire il programma di esempio sull'istanza EC2
Per eseguire il programma, connettiti al tuoAmazon EC2istanza. Per ulteriori informazioni, consultaConnessione a un'istanza LinuxnellaAmazon EC2Guida per l'utente per istanze Linux.
Se
ant
non è disponibile nell'istanza, installarla utilizzando il seguente comando:
sudo yum install ant
Quindi, esegui il programma utilizzandoant
come segue:
ant run
Il programma scriverà il contenuto del tuoAmazon S3passare alla finestra dei comandi.