Realización de solicitudes con las credenciales de usuario de IAM o Cuenta de AWS - Amazon Simple Storage Service

Realización de solicitudes con las credenciales de usuario de IAM o Cuenta de AWS

Puede usar sus credenciales de seguridad de usuario de IAM o su Cuenta de AWS para enviar solicitudes autenticadas a Amazon S3. En esta sección se proporcionan ejemplos de cómo enviar solicitudes autenticadas con AWS SDK for Java, AWS SDK for .NET y AWS SDK for PHP. Para ver una lista de los SDK de AWS disponibles, consulte Código de muestra y bibliotecas.

Cada uno de estos SDK de AWS utiliza una cadena de proveedores de credenciales específica del SDK para encontrar y utilizar las credenciales, y realizar acciones en nombre del propietario de las credenciales. Todas estas cadenas de proveedores de credenciales tienen en común que todas buscan el archivo de credenciales local de AWS.

Para obtener más información, consulte los siguientes temas:

Para crear un archivo local de credenciales de AWS

La forma más sencilla de configurar credenciales para los SDK de AWS es utilizar un archivo de credenciales de AWS. Si utiliza AWS Command Line Interface (AWS CLI), es posible que ya tenga configurado un archivo local de credenciales de AWS. De lo contrario, utilice el siguiente procedimiento para configurar un archivo de credenciales:

  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. Cree un usuario con permisos limitados a los servicios y acciones a los que desea que tenga acceso el código. Para obtener más información acerca de cómo crear un usuario nuevo, consulte Creación de usuarios de IAM (consola) y siga las instrucciones a través del paso 8.

  3. Elija Download .csv (Descargar .csv) para guardar una copia local de sus credenciales de AWS.

  4. En su equipo, vaya al directorio principal y cree un directorio .aws. En sistemas basados en Unix, como Linux u OS X, se encuentra en la siguiente ubicación:

    ~/.aws

    En Windows, se encuentra en la siguiente ubicación:

    %HOMEPATH%\.aws
  5. En el directorio .aws, cree un archivo denominado credentials.

  6. Abra el archivo .csv de credenciales que descargó de la consola de IAM y copie su contenido en el archivo de credentials con el siguiente formato:

    [default] aws_access_key_id = your_access_key_id aws_secret_access_key = your_secret_access_key
  7. Guarde el archivo credentials y elimine el archivo .csv que descargó en el paso 3.

El archivo de credenciales compartidas ahora está configurado en el equipo local y está listo para su uso con los SDK de AWS.

Envío de solicitudes autenticadas mediante los SDK de AWS

Utilice los SDK de AWS para enviar solicitudes autenticadas. Para obtener más información sobre el envío de solicitudes autenticadas, consulte Credenciales de seguridad de AWS o IAM Identity Center Authentication (Autenticación del Centro de identidades de IAM).

Java

Para enviar solicitudes autenticadas a Amazon S3 mediante sus credenciales de usuario de IAM o su Cuenta de AWS, haga lo siguiente:

  • Use la clase AmazonS3ClientBuilder para crear una instancia AmazonS3Client.

  • Ejecute uno de los métodos de AmazonS3Client para enviar solicitudes a Amazon S3. El cliente generará la firma necesaria a partir de las credenciales que proporcione y la incluirá en la solicitud.

En el siguiente ejemplo se realizan las tareas anteriores. Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Prueba de los ejemplos de código de Java de 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

Para enviar solicitudes autenticadas mediante sus credenciales de usuario de IAM o su Cuenta de AWS:

  • Cree una instancia de la clase AmazonS3Client.

  • Ejecute uno de los métodos de AmazonS3Client para enviar solicitudes a Amazon S3. El cliente generará la firma necesaria a partir de las credenciales que se le proporcionan y la incluirá en la solicitud que envíe a Amazon S3.

Para obtener más información, consulte Realización de solicitudes con las credenciales de usuario de IAM o Cuenta de AWS.

nota
  • Puede crear el cliente AmazonS3Client sin facilitar sus credenciales de seguridad. Las solicitudes enviadas con este cliente son solicitudes anónimas y no tienen firma. Amazon S3 devuelve un error si envía solicitudes anónimas para un recurso que no esté disponible públicamente.

  • Puede crear una Cuenta de AWS y crear los usuarios necesarios. También puede administrar las credenciales para esos usuarios. Necesita estas credenciales para realizar la tarea del siguiente ejemplo. Para obtener más información, consulte Configuración de credenciales de AWS en la Guía para desarrolladores de AWS SDK for .NET.

    A continuación, también puede configurar la aplicación para recuperar perfiles y credenciales de forma activa y luego usar explícitamente dichas credenciales al crear un cliente del servicio de AWS. Para obtener más información, consulte Acceso a credenciales y perfiles en una aplicación en la Guía para desarrolladores de AWS SDK for .NET.

En el siguiente ejemplo de código C# se muestra cómo realizar las tareas anteriores. Para obtener información acerca de cómo ejecutar los ejemplos de .NET que aparecen en esta guía y para ver cómo almacenar sus credenciales en un archivo de configuración, consulte Ejecución de ejemplos de código .NET de 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); } } } }

Para ver ejemplos funcionales, consulte Información general de los objetos de Amazon S3 y Descripción general de los buckets. Puede probar estos ejemplos con credenciales de usuario de IAM o su Cuenta de AWS.

Por ejemplo, para enumerar todas las claves de objetos de su bucket, consulte Descripción de claves de objeto mediante programación.

PHP

En esta sección, se explica el uso de una clase de la versión 3 de AWS SDK for PHP para enviar solicitudes autenticadas con las credenciales de usuario de IAM o su Cuenta de AWS. Se parte de la base de que usted ya sigue las instrucciones para Uso del AWS SDK for PHP y ejecución de ejemplos de PHP y ha instalado AWS SDK for PHP correctamente.

El siguiente ejemplo de PHP muestra cómo el cliente realiza una solicitud con las credenciales de seguridad para enumerar todos los buckets de la cuenta.

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

Puede crear el cliente S3Client sin facilitar sus credenciales de seguridad. Las solicitudes enviadas con este cliente son solicitudes anónimas y no tienen firma. Amazon S3 devuelve un error si envía solicitudes anónimas para un recurso que no esté disponible públicamente. Para obtener más información, consulte Creación de clientes anónimos en la Documentación de AWS SDK for PHP.

Para ver ejemplos funcionales, consulte Información general de los objetos de Amazon S3. Puede probar estos ejemplos con credenciales de usuario de IAM o su Cuenta de AWS.

Para ver un ejemplo de enumeración de claves de objetos en un bucket, consulte Descripción de claves de objeto mediante programación.

Ruby

A fin de poder utilizar la versión 3 de AWS SDK for Ruby para hacer llamadas a Amazon S3, debe establecer las credenciales de acceso de AWS que utiliza el SDK para comprobar el acceso a los buckets y los objetos. Si ha configurado las credenciales compartidas en el perfil de credenciales de AWS de su sistema local, la versión 3 del SDK para Ruby puede utilizarlas, lo que le evitará tener que declararlas en el código. Para obtener más información acerca de cómo configurar las credenciales compartidas, consulte Realización de solicitudes con las credenciales de usuario de IAM o Cuenta de AWS.

En el siguiente fragmento de código de Ruby, se utilizan las credenciales de un archivo de credenciales de AWS compartido en un equipo local para autenticar una solicitud para obtener todos los nombres de claves de objeto de un bucket específico. Hace lo siguiente:

  1. Crea una instancia de la clase Aws::S3::Client.

  2. Realiza una solicitud a Amazon S3 enumerando los objetos de un bucket con el método list_objects_v2 de Aws::S3::Client. El cliente genera el valor de firma necesario a partir de las credenciales del archivo de credenciales de AWS del equipo y lo incluye en la solicitud que envía a Amazon S3.

  3. Imprime la matriz de nombres de claves de objeto en el terminal.

# 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__

Aunque no tenga un archivo de credenciales de AWS local, puede crear el recurso Aws::S3::Client y ejecutar código en los buckets y los objetos de Amazon S3. Las solicitudes que se envían utilizando la versión 3 del SDK para Ruby son anónimas; de forma predeterminada, no tienen firma. Amazon S3 devuelve un error si envía solicitudes anónimas para un recurso que no esté disponible públicamente.

Puede utilizar y ampliar el fragmento de código anterior para aplicaciones del SDK para Ruby como se muestra en el siguiente ejemplo, que es más robusto.

# 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

En el siguiente ejemplo, se utilizan credenciales de AWS cargadas automáticamente por el SDK para Go desde el archivo de credenciales compartido.

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) } } }

Recursos relacionados