View a markdown version of this page

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 para Java, AWS SDK para .NET y AWS SDK para 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 Consola de administración de AWS 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 obtener información sobre la autenticación de solicitudes mediante el AWS SDK para Java, consulte Uso de archivos de configuración y credenciales compartidos para configurar globalmente los AWS SDK y las herramientas y Autenticación y acceso mediante AWS SDK y herramientas en la Guía de referencia de AWS SDK y herramientas.

.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 de una 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 SDK para .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 SDK para .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 configurar y ejecutar ejemplos de código, consulte Introducción al SDK de AWS para .NET en la Guía para desarrolladores del SDK de AWS para .NET.

ejemplo
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); } } } }
PHP

En esta sección, se explica el uso de una clase de la versión 3 de AWS SDK para PHP para enviar solicitudes autenticadas con las credenciales de usuario de IAM o su Cuenta de AWS. Para obtener más información acerca de la API del SDK de AWS para Ruby, consulte SDK de AWS para Ruby, versión 2.

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.

ejemplo
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 para PHP.

Ruby

A fin de poder utilizar la versión 3 de AWS SDK para 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 sobre la configuración de credenciales compartidas, consulte Realización de solicitudes con las credenciales de usuario de IAM o de una 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.

ejemplo
# 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, 'amzn-s3-demo-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 true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" 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, 'amzn-s3-demo-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 true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" 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
ejemplo

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" "errors" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/smithy-go" ) // 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() { ctx := context.Background() sdkConfig, err := config.LoadDefaultConfig(ctx) 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(ctx, &s3.ListBucketsInput{}) if err != nil { var ae smithy.APIError if errors.As(err, &ae) && ae.ErrorCode() == "AccessDenied" { fmt.Println("You don't have permission to list buckets for this account.") } else { 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