Esecuzione di richieste mediante l'Account AWS o le credenziali utente IAM - Amazon Simple Storage Service

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

Esecuzione di richieste mediante l'Account AWS o le credenziali utente IAM

Per inviare richieste autenticate ad Amazon S3, è possibile utilizzare l'Account AWS o le credenziali di sicurezza utente IAM. In questa sezione sono riportati esempi di come è possibile inviare richieste autenticate mediante AWS SDK for Java, AWS SDK for .NET e AWS SDK for PHP. Per un elenco degli SDK AWS disponibili, consulta Codici di esempio e librerie.

Ciascuno di questi SDK AWS utilizza una catena di provider di credenziali specifici di SDK per trovare e utilizzare le credenziali utente ed eseguire operazioni per conto del proprietario delle credenziali. La caratteristica comune a tutte queste catene di provider di credenziali è la ricerca del file locale di credenziali AWS.

Per ulteriori informazioni, consulta gli argomenti riportati di seguito.

Come creare un file locale di credenziali AWS

Il modo più semplice per configurare le credenziali per gli SDK AWS consiste nell'utilizzo di un file di credenziali AWS. Se utilizzi AWS Command Line Interface (AWS CLI), è possibile che sia stato già configurato un file delle credenziali AWS locale. Altrimenti, per impostare un file delle credenziali, attenersi alla procedura riportata di seguito.

  1. Accedi alla AWS Management Console e apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Creare un nuovo utente con autorizzazioni limitate ai servizi e alle operazioni a cui si desidera che il codice abbia accesso. Per ulteriori informazioni sulla creazione di un nuovo utente, consulta Creazione di utenti IAM (Console) e segui le istruzioni descritte fino al passaggio 8.

  3. Scegliere Scarica .csv per salvare una copia locale delle credenziali AWS.

  4. Sul computer, accedere alla directory principale e creare una directory .aws. Nei sistemi basati su Unix, ad esempio Linux oppure OS X, si trova nella seguente posizione:

    ~/.aws

    In Windows, si trova nella seguente posizione:

    %HOMEPATH%\.aws
  5. Nella directory .aws creare un nuovo file denominato credentials.

  6. Aprire il file delle credenziali .csv scaricato dalla console IAM e copiarne il contenuto nel file credentials utilizzando il seguente formato:

    [default] aws_access_key_id = your_access_key_id aws_secret_access_key = your_secret_access_key
  7. Salvare il file credentials ed eliminare il file .csv scaricato al passaggio 3.

Il file delle credenziali condiviso è ora configurato sul computer locale ed è pronto per essere utilizzato con gli SDK AWS.

Invio di richieste autenticate tramite gli SDK AWS

Utilizzare gli SDK AWS per inviare richieste autenticate. Per ulteriori informazioni sull'invio di richieste autenticate, consulta Credenziali di sicurezza AWS o Autenticazione IAM Identity Center.

Java

Per inviare richieste autenticate ad Amazon S3 utilizzando l'Account AWS o le credenziali utente IAM, completa le seguenti operazioni:

  • Usare la classe AmazonS3ClientBuilder per creare una istanza AmazonS3Client.

  • Eseguire uno dei metodi AmazonS3Client per inviare le richieste ad Amazon S3. Il client genera la firma necessaria dalle credenziali fornite e la include nella richiesta.

L'esempio seguente esegue le precedenti operazioni. Per informazioni su come creare e testare un esempio di utilizzo, consultare Test degli esempi di codice Java di Amazon S3.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; import java.io.IOException; import java.util.List; public class MakingRequests { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Get a list of objects in the bucket, two at a time, and // print the name and size of each object. ListObjectsRequest listRequest = new ListObjectsRequest().withBucketName(bucketName).withMaxKeys(2); ObjectListing objects = s3Client.listObjects(listRequest); while (true) { List<S3ObjectSummary> summaries = objects.getObjectSummaries(); for (S3ObjectSummary summary : summaries) { System.out.printf("Object \"%s\" retrieved with size %d\n", summary.getKey(), summary.getSize()); } if (objects.isTruncated()) { objects = s3Client.listNextBatchOfObjects(objects); } else { break; } } } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

Per inviare richieste autenticate utilizzando l'Account AWS o le credenziali utente IAM:

  • Crea un'istanza della classe AmazonS3Client.

  • Eseguire uno dei metodi AmazonS3Client per inviare le richieste ad Amazon S3. Il client genera la firma necessaria dalle credenziali fornite e la include nella richiesta inviata ad Amazon S3.

Per ulteriori informazioni, consulta Esecuzione di richieste mediante l'Account AWS o le credenziali utente IAM.

Nota
  • È possibile creare il client AmazonS3Client senza specificare le credenziali di sicurezza. Le richieste inviate mediante questo client sono anonime e senza firma. Amazon S3 restituisce un errore se si inviano richieste anonime per una risorsa non disponibile pubblicamente.

  • È possibile creare un Account AWS e gli utenti necessari. È inoltre possibile gestire le credenziali per tali utenti. Queste credenziali sono necessarie per eseguire l'attività nell'esempio seguente. Per ulteriori informazioni, consulta Configurazione delle credenziali di AWS nella Guida per gli sviluppatori di AWS SDK for .NET.

    È inoltre possibile configurare l'applicazione per recuperare attivamente profili e credenziali e quindi utilizzare esplicitamente tali credenziali durante la creazione di un client di servizio AWS. Per ulteriori informazioni, consulta Accesso a credenziali e profili in un'applicazione nella Guida per gli sviluppatori di AWS SDK for .NET.

L'esempio seguente di codice C# mostra come eseguire le precedenti operazioni. Per informazioni sull'esecuzione degli esempi .NET descritti nella presente guida e per le istruzioni su come archiviare le credenziali in un file di configurazione, consultare Esecuzione degli esempi di codice .NET di Amazon S3.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class MakeS3RequestTest { private const string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { using (client = new AmazonS3Client(bucketRegion)) { Console.WriteLine("Listing objects stored in a bucket"); ListingObjectsAsync().Wait(); } } static async Task ListingObjectsAsync() { try { ListObjectsRequest request = new ListObjectsRequest { BucketName = bucketName, MaxKeys = 2 }; do { ListObjectsResponse response = await client.ListObjectsAsync(request); // Process the response. foreach (S3Object entry in response.S3Objects) { Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size); } // If the response is truncated, set the marker to get the next // set of keys. if (response.IsTruncated) { request.Marker = response.NextMarker; } else { request = null; } } while (request != null); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }

Per gli esempi di utilizzo, consultare Panoramica degli oggetti di Amazon S3 e Panoramica dei bucket. Puoi testare questi esempi utilizzando l'Account AWS o le credenziali di un utente IAM.

Ad esempio, per elencare tutte le chiavi degli oggetti incluse nel bucket, consultare Elenco delle chiavi oggetto a livello di programmazione.

PHP

In questa sezione viene spiegato come usare una classe dalla versione 3 di AWS SDK for PHP per inviare richieste autenticate mediante l'Account AWS o le credenziali utente IAM. Si presume che siano già state seguite le istruzioni riportate in Utilizzo AWS SDK for PHP ed esecuzione degli esempi PHP e che AWS SDK for PHP sia stato correttamente installato.

Il seguente esempio di codice PHP mostra come il client esegue una richiesta utilizzando le credenziali di sicurezza per elencare tutti i bucket per l'account.

require 'vendor/autoload.php'; use Aws\S3\Exception\S3Exception; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $s3 = new S3Client([ 'region' => 'us-east-1', 'version' => 'latest', ]); // Retrieve the list of buckets. $result = $s3->listBuckets(); try { // Retrieve a paginator for listing objects. $objects = $s3->getPaginator('ListObjects', [ 'Bucket' => $bucket ]); echo "Keys retrieved!" . PHP_EOL; // Print the list of objects to the page. foreach ($objects as $object) { echo $object['Key'] . PHP_EOL; } } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }
Nota

È possibile creare il client S3Client senza specificare le credenziali di sicurezza. Le richieste inviate mediante questo client sono anonime e senza firma. Amazon S3 restituisce un errore se si inviano richieste anonime per una risorsa non disponibile pubblicamente. Per ulteriori informazioni, vedere Creazione di client anonimi nella Documentazione di AWS SDK for PHP.

Per esempi funzionanti, consulta Panoramica degli oggetti di Amazon S3. Puoi testare questi esempi utilizzando l'Account AWS o le credenziali di un utente IAM.

Per un esempio dell'elenco delle chiavi degli oggetti incluse in un bucket, consultare Elenco delle chiavi oggetto a livello di programmazione.

Ruby

Prima di poter utilizzare la versione 3 di AWS SDK for Ruby per effettuare chiamate ad Amazon S3, è necessario impostare le credenziali di accesso AWS utilizzate da SDK per verificare l'accesso ai bucket e agli oggetti. Se le credenziali impostate nel profilo delle credenziali AWS sono state condivise sul sistema locale, la versione 3 di SDK per Ruby le può utilizzare senza necessità di dichiararle nel codice. Per ulteriori informazioni sull'impostazione di credenziali condivise, consulta Esecuzione di richieste mediante l'Account AWS o le credenziali utente IAM.

Il seguente frammento di codice Ruby utilizza le credenziali in un file di credenziali AWS condiviso su un computer locale per autenticare una richiesta intesa a riunire tutti i nomi chiave degli oggetti in uno specifico bucket. Esegue queste operazioni:

  1. Crea un'istanza della classe Aws::S3::Client.

  2. Effettua una richiesta ad Amazon S3 enumerando gli oggetti in un bucket utilizzando il metodo list_objects_v2 di Aws::S3::Client. Il client genera il valore di firma necessario dalle credenziali nel file delle credenziali AWS sul computer e lo include nella richiesta che invia ad Amazon S3.

  3. Stampa la serie di nomi chiave degli oggetti al terminale.

# Prerequisites: # - An existing Amazon S3 bucket. require "aws-sdk-s3" # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if all operations succeed; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-west-2') # exit 1 unless list_bucket_objects?(s3_client, 'doc-example-bucket') def list_bucket_objects?(s3_client, bucket_name) puts "Accessing the bucket named '#{bucket_name}'..." objects = s3_client.list_objects_v2( bucket: bucket_name, max_keys: 50 ) if objects.count.positive? puts "The object keys in this bucket are (first 50 objects):" objects.contents.each do |object| puts object.key end else puts "No objects found in this bucket." end return true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" return false end # Example usage: def run_me region = "us-west-2" bucket_name = "BUCKET_NAME" s3_client = Aws::S3::Client.new(region: region) exit 1 unless list_bucket_objects?(s3_client, bucket_name) end run_me if $PROGRAM_NAME == __FILE__

Se non si dispone di un file delle credenziali AWS locale, è comunque possibile creare la risorsa Aws::S3::Client ed eseguire il codice su bucket e oggetti Amazon S3. Le richieste che vengono inviate utilizzando la versione 3 di SDK per Ruby sono richieste anonime, senza firma, per impostazione predefinita. Amazon S3 restituisce un errore se si inviano richieste anonime per una risorsa non disponibile pubblicamente.

Puoi utilizzare ed espandere il precedente snippet di codice per applicazioni SDK per Ruby, come nel seguente esempio, più complesso.

# Prerequisites: # - An existing Amazon S3 bucket. require "aws-sdk-s3" # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if all operations succeed; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-west-2') # exit 1 unless list_bucket_objects?(s3_client, 'doc-example-bucket') def list_bucket_objects?(s3_client, bucket_name) puts "Accessing the bucket named '#{bucket_name}'..." objects = s3_client.list_objects_v2( bucket: bucket_name, max_keys: 50 ) if objects.count.positive? puts "The object keys in this bucket are (first 50 objects):" objects.contents.each do |object| puts object.key end else puts "No objects found in this bucket." end return true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" return false end # Example usage: def run_me region = "us-west-2" bucket_name = "BUCKET_NAME" s3_client = Aws::S3::Client.new(region: region) exit 1 unless list_bucket_objects?(s3_client, bucket_name) end run_me if $PROGRAM_NAME == __FILE__
Go

L'esempio seguente utilizza credenziali AWS caricate automaticamente dall'SDK for Go dal file delle credenziali condiviso.

package main import ( "context" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3" ) // main uses the AWS SDK for Go V2 to create an Amazon Simple Storage Service // (Amazon S3) client and list up to 10 buckets in your account. // This example uses the default settings specified in your shared credentials // and config files. func main() { sdkConfig, err := config.LoadDefaultConfig(context.TODO()) if err != nil { fmt.Println("Couldn't load default configuration. Have you set up your AWS account?") fmt.Println(err) return } s3Client := s3.NewFromConfig(sdkConfig) count := 10 fmt.Printf("Let's list up to %v buckets for your account.\n", count) result, err := s3Client.ListBuckets(context.TODO(), &s3.ListBucketsInput{}) if err != nil { fmt.Printf("Couldn't list buckets for your account. Here's why: %v\n", err) return } if len(result.Buckets) == 0 { fmt.Println("You don't have any buckets!") } else { if count > len(result.Buckets) { count = len(result.Buckets) } for _, bucket := range result.Buckets[:count] { fmt.Printf("\t%v\n", *bucket.Name) } } }

Risorse correlate