

La AWS SDK para .NET V3 ha entrado en modo de mantenimiento.

Le recomendamos que migre a la [AWS SDK para .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Para obtener información y detalles adicionales sobre cómo migrar, consulta nuestro [anuncio sobre el modo de mantenimiento](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Comenzar a utilizar AWS SDK for JavaScript AWS SDK para .NET
<a name="net-dg-config"></a>

Para usar AWS SDK para .NET, debe instalar su cadena de herramientas y configurar una serie de elementos esenciales que la aplicación necesita para acceder a servicios de AWS. Entre ellos se incluyen:
+ Una cuenta de usuario o un rol adecuados
+ Información de autenticación de esa cuenta de usuario o para asumir ese rol
+ Especificación de la región de AWS
+ Paquetes o ensamblados de AWSSDK

Algunos de los temas de esta sección contienen información sobre cómo configurar estos elementos esenciales.

En otros temas de esta sección y en otras secciones se proporciona información sobre formas más avanzadas de configurar su proyecto.

**Topics**
+ [Instalación y configuración de la cadena de herramientas](net-dg-dev-env.md)
+ [Configuración de la autenticación de SDK](creds-idc.md)
+ [Recorrido rápido](quick-start.md)
+ [Inicio de un nuevo proyecto](net-dg-start-new-project.md)
+ [Configuración de la región de AWS](net-dg-region-selection.md)
+ [Instalación de paquetes de AWSSDK con NuGet](net-dg-install-assemblies.md)
+ [Instalación de ensamblados de AWSSDK sin NuGet](net-dg-install-without-nuget.md)
+ [Resolución de credenciales y perfil](creds-assign.md)
+ [Usuarios y roles](net-dg-users-roles.md)
+ [Configuración avanzada](net-dg-advanced-config.md)
+ [Uso de credenciales heredadas](net-dg-legacy-creds.md)

# Instalación y configuración de la cadena de herramientas
<a name="net-dg-dev-env"></a>

Para utilizar AWS SDK para .NET, debe tener instaladas algunas herramientas de desarrollo.

## Desarrollo multiplataforma
<a name="net-dg-dev-env-cross"></a>

Lo siguiente es necesario para el desarrollo multiplataforma de .NET en Windows, Linux o macOS:
+ Microsoft [.NET Core SDK](https://learn.microsoft.com/en-us/dotnet/fundamentals/), versión 2.1, 3.1 o posterior, que incluye la interfaz de línea de comandos (CLI) de .NET (**`dotnet`**) y el tiempo de ejecución de .NET Core.
+ Un editor de código o entorno de desarrollo integrado (IDE) adecuado para el sistema operativo y los requisitos. Normalmente, es uno que proporciona cierto soporte para .NET Core.

  Entre los ejemplos se incluyen [Microsoft Visual Studio Code (VS Code)](https://code.visualstudio.com/), [JetBrains Rider](https://www.jetbrains.com/rider/) y [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/).
+ (Opcional) Un kit de herramientas de AWS, si hay uno disponible para el editor escogido y para su sistema operativo.

  Entre los ejemplos se incluyen [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html), [AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/welcome.html) y [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html).

## Windows con Visual Studio y .NET Core
<a name="net-dg-dev-env-winvs"></a>

Lo siguiente es necesario para el desarrollo en Windows con Visual Studio y .NET Core:
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1, 3.1 o posterior

  Esto normalmente se incluye de forma predeterminada al instalar una versión reciente de Visual Studio.
+ (Opcional) AWS Toolkit for Visual Studio, que es un complemento que proporciona una interfaz de usuario para administrar los perfiles locales y recursos de AWS desde Visual Studio. Para instalar el kit de herramientas, consulte [Configuración del AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/getting-set-up.html).

  Para obtener más información, consulte la [Guía del usuario de AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/).

## Siguiente paso
<a name="net-dg-dev-env-next"></a>

[Configure la autenticación del SDK con AWS](creds-idc.md)

# Configure la autenticación del SDK con AWS
<a name="creds-idc"></a>

Debes establecer cómo se autentica tu código AWS al desarrollar con Servicios de AWS. Existen diferentes formas de configurar el acceso programático a AWS los recursos, según el entorno y el AWS acceso del que disponga. 

Para ver los distintos métodos de autenticación del SDK, consulte [Autenticación y acceso](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) en la *Guía de referencia sobre herramientas AWS SDKs y herramientas*.

En este tema se presupone que un nuevo usuario se está desarrollando a nivel local, que su empresa no le ha proporcionado un método de autenticación y que lo utilizará AWS IAM Identity Center para obtener credenciales temporales. Si el entorno no se basa en estos supuestos, es posible que parte de la información de este tema no se aplique a su caso o que ya se le haya proporcionado parte de la información.

 La configuración de este entorno requiere varios pasos, que se resumen de la siguiente manera:

1. [Inicie sesión con las credenciales de la consola](#login-con-creds)

1. [Habilitar y configurar el Centro de identidades de IAM](#idc-config-sso)

1. [Configuración de SDK para usar IAM Identity Center](#idc-config-sdk)

1. [Inicie una sesión en el portal de AWS acceso](#idc-start-portal)

## Inicie sesión con las credenciales de la consola
<a name="login-con-creds"></a>

Puede usar sus credenciales de inicio de sesión AWS de Management Console actuales para acceder a AWS los servicios mediante programación. Tras un flujo de autenticación basado en un navegador, AWS genera credenciales temporales que funcionan en todas las herramientas de desarrollo locales, como la AWS CLI Herramientas de AWS para PowerShell y el AWS SDK para .NET v3.

Con este proceso, puede autenticarse mediante las credenciales raíz creadas durante la configuración inicial de la cuenta, un usuario de IAM o una identidad federada de su proveedor de identidad y la AWS CLI, o bien gestionar Herramientas de AWS para PowerShell automáticamente las credenciales temporales por usted. Este enfoque mejora la seguridad al eliminar la necesidad de almacenar localmente las credenciales a largo plazo. 

Al ejecutar el `aws login` comando desde la AWS CLI, puede seleccionar una de las sesiones de consola activas o iniciar sesión mediante el flujo de autenticación basado en el navegador, lo que generará credenciales temporales automáticamente. El token de credencial temporal caducará en 15 minutos, pero el AWS SDK para .NET v3 actualizará automáticamente el token cuando sea necesario durante tus solicitudes. 

**aviso**  
Esta función no es compatible con los destinos de.NET Framework.

**importante**  
Si utiliza las credenciales de la consola para la autenticación, la aplicación debe hacer referencia a los siguientes NuGet paquetes para que la resolución de AWS inicio de sesión pueda funcionar:  
**AWSSDK4. Iniciar sesión**
Si no se hace referencia a estos paquetes, se producirá una excepción de tiempo de ejecución.
+ [Inicie sesión con las credenciales de la consola mediante AWS CLI.](https://docs.aws.amazon.com/sdkref/latest/guide/access-login.html)

El `config` archivo tendrá este aspecto una vez que haya iniciado sesión siguiendo los pasos indicados anteriormente en la AWS CLI. 

```
[default]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1

[my-dev-profile]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1
```

## Habilitar y configurar el Centro de identidades de IAM
<a name="idc-config-sso"></a>

Para usar IAM Identity Center, primero debe estar habilitado y configurado. Para obtener más información sobre cómo hacerlo con el SDK, consulte el **paso 1** del tema sobre la [autenticación del Centro de Identidad de IAM](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html) en la *AWS SDKs Guía de referencia sobre herramientas*. En concreto, siga las instrucciones necesarias en **No he establecido el acceso a través del Centro de identidades de IAM**.

## Configuración de SDK para usar IAM Identity Center
<a name="idc-config-sdk"></a>

La información sobre cómo configurar el SDK para usar el Centro de Identidad de IAM se encuentra en el **paso 2** del tema sobre la [autenticación del Centro de Identidad de IAM](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html) en la Guía de referencia sobre *herramientas AWS SDKs y herramientas*. Tras completar esta configuración, el sistema debe contener los siguientes elementos:
+ El AWS CLI, que se utiliza para iniciar una sesión en el portal de AWS acceso antes de ejecutar la aplicación.
+ El AWS `config` archivo compartido que contiene un [`[default]`perfil](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile) con un conjunto de valores de configuración a los que se puede hacer referencia desde el SDK. Para encontrar la ubicación de este archivo, consulte [Ubicación de los archivos compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html) en la *Guía de referencia de AWS SDKs and Tools*. AWS SDK para .NET Utiliza el proveedor del token de inicio de sesión único del perfil para adquirir las credenciales antes de enviar las solicitudes a AWSél. El valor `sso_role_name`, que es un rol de IAM conectado a un conjunto de permisos del Centro de identidades de IAM, debería permitir el acceso a los Servicios de AWS utilizados en la aplicación.

  El siguiente archivo `config` de ejemplo muestra la configuración de un perfil predeterminado con el proveedor de token de SSO. La configuración `sso_session` del perfil hace referencia a la sección `sso-session` nombrada. La `sso-session` sección contiene la configuración para iniciar una sesión en el portal de AWS acceso.

  ```
  [default]
  sso_session = my-sso
  sso_account_id = 111122223333
  sso_role_name = SampleRole
  region = us-east-1
  output = json
  
  [sso-session my-sso]
  sso_region = us-east-1
  sso_start_url = https://provided-domain.awsapps.com/start
  sso_registration_scopes = sso:account:access
  ```

**importante**  
Si lo utilizas AWS IAM Identity Center para la autenticación, tu aplicación debe hacer referencia a los siguientes NuGet paquetes para que la resolución del SSO funcione:  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
Si no se hace referencia a estos paquetes, se producirá una excepción de *tiempo de ejecución*.

## Inicie una sesión en el portal de AWS acceso
<a name="idc-start-portal"></a>

Antes de ejecutar una aplicación para acceder Servicios de AWS, necesita una sesión activa en el portal de AWS acceso para que el SDK utilice la autenticación del IAM Identity Center a fin de resolver las credenciales. En función de la duración de las sesiones configuradas, el acceso terminará por caducar y SDK detectará un error de autenticación. Para iniciar sesión en el portal de AWS acceso, ejecute el siguiente comando en. AWS CLI

```
aws sso login
```

Como tiene una configuración de perfil predeterminada, no necesita llamar al comando con una opción `--profile`. Si la configuración del proveedor de token de SSO utiliza un perfil con nombre, el comando es `aws sso login --profile named-profile`.

Para comprobar si ya tiene una sesión activa, ejecute el siguiente AWS CLI comando.

```
aws sts get-caller-identity
```

La respuesta a este comando debe indicar la cuenta y el conjunto de permisos del Centro de identidades de IAM configurados en el archivo compartido `config`.

**nota**  
Si ya tiene una sesión activa en el portal de AWS acceso y la ejecuta`aws sso login`, no tendrá que proporcionar credenciales.  
Es posible que el proceso de inicio de sesión le pida que permita el AWS CLI acceso a sus datos. Como AWS CLI se basa en el SDK para Python, los mensajes de permiso pueden contener variaciones del `botocore` nombre.

## Información adicional
<a name="idc-additional-info"></a>
+ Para obtener más información sobre cómo usar IAM Identity Center y el SSO en un entorno de desarrollo, consulte [Inicio de sesión único](sso.md) en la sección [Autenticación avanzada](advanced-auth.md). Esta información incluye métodos alternativos y más avanzados, así como tutoriales que muestran cómo utilizar estos métodos.
+ Para obtener más opciones de autenticación para el SDK, como el uso de perfiles y variables de entorno, consulta el capítulo de [configuración](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) de la *AWS SDKs Guía de referencia de herramientas*.
+ Para obtener más información sobre las prácticas recomendadas, consulte [Prácticas recomendadas de seguridad en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la *Guía del usuario de IAM*.
+ Para crear AWS credenciales de corta duración, consulte [Credenciales de seguridad temporales](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) en la *Guía del usuario de IAM*.
+ Para obtener más información sobre otros proveedores de credenciales, consulte los proveedores de [credenciales estandarizados en la Guía](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html) de referencia de *herramientas AWS SDKs y herramientas*.

# Recorrido rápido por AWS SDK para .NET
<a name="quick-start"></a>

Esta sección proporciona tutoriales básicos para los desarrolladores que no están familiarizados con AWS SDK para .NET.

**nota**  
Antes de usar estos tutoriales, primero debe haber [instalado su cadena de herramientas](net-dg-dev-env.md) y haber [configurado la autenticación de SDK](creds-idc.md).

Para obtener información acerca del desarrollo de software para servicios de AWS específicos junto con los ejemplo de código, consulte [Trabaje con AWS servicios](working-with-aws-services.md). Para ver otros ejemplos de código, consulte [SDK para .NET ejemplos de código](csharp_code_examples.md).

**Topics**
+ [Aplicación multiplataforma sencilla](quick-start-s3-1-cross.md)
+ [Aplicación sencilla basada en Windows](quick-start-s3-1-winvs.md)
+ [Pasos a seguir a continuación](quick-start-next-steps.md)

# Aplicación multiplataforma sencilla que utiliza la herramienta AWS SDK para .NET
<a name="quick-start-s3-1-cross"></a>

En este tutorial se utiliza AWS SDK para .NET y .NET Core para el desarrollo multiplataforma. En el tutorial se muestra cómo utilizar SDK para enumerar los [buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/) que posee y, opcionalmente, crear un bucket.

Llevará a cabo este tutorial utilizando herramientas multiplataforma como la interfaz de la línea de comandos (CLI) .NET. Para ver otras formas de configurar el entorno de desarrollo, consulte [Instalación y configuración de la cadena de herramientas](net-dg-dev-env.md).

**Necesario para el desarrollo multiplataforma de .NET en Windows, Linux o macOS:**
+ Microsoft [.NET Core SDK](https://learn.microsoft.com/en-us/dotnet/fundamentals/), versión 2.1, 3.1 o posterior, que incluye la interfaz de línea de comandos (CLI) de .NET (**`dotnet`**) y el tiempo de ejecución de .NET Core.
+ Un editor de código o entorno de desarrollo integrado (IDE) adecuado para el sistema operativo y los requisitos. Normalmente, es uno que proporciona cierto soporte para .NET Core.

  Entre los ejemplos se incluyen [Microsoft Visual Studio Code (VS Code)](https://code.visualstudio.com/), [JetBrains Rider](https://www.jetbrains.com/rider/) y [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/).

**nota**  
Antes de usar estos tutoriales, primero debe haber [instalado su cadena de herramientas](net-dg-dev-env.md) y haber [configurado la autenticación de SDK](creds-idc.md).

## Pasos
<a name="s3-1-cross-steps"></a>
+ [Creación del proyecto](#s3-1-cross-create-project)
+ [Crear el código](#s3-1-cross-code)
+ [Ejecución de la aplicación](#s3-1-cross-run)
+ [Eliminación](#s3-1-cross-clean-up)

## Creación del proyecto
<a name="s3-1-cross-create-project"></a>

1. Abra un símbolo del sistema o un terminal. Busque o cree una carpeta del sistema operativo en la que pueda crear un proyecto .NET.

1. En esa carpeta, ejecute el siguiente comando para crear el proyecto .NET.

   ```
   dotnet new console --name S3CreateAndList
   ```

1. Vaya a la carpeta `S3CreateAndList` recién creada y ejecute los siguientes comandos:

   ```
   dotnet add package AWSSDK.S3
   dotnet add package AWSSDK.SecurityToken
   dotnet add package AWSSDK.SSO
   dotnet add package AWSSDK.SSOOIDC
   ```

   Con los comandos anteriores se instalan los paquetes Nuget desde el [Administrador de paquetes NuGet](https://www.nuget.org/profiles/awsdotnet). Como sabemos exactamente qué paquetes NuGet necesitamos en este tutorial, podemos realizar este paso ahora. También es común que los paquetes requeridos se conozcan durante el desarrollo. Cuando esto sucede, se puede ejecutar un comando similar en ese momento.

## Crear el código
<a name="s3-1-cross-code"></a>

1. En la carpeta `S3CreateAndList`, busque y abra `Program.cs` en su editor de código.

1. Reemplace el contenido con el siguiente código y guarde el archivo.

   ```
   using System;
   using System.Threading.Tasks;
   
   // NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC
   using Amazon.Runtime;
   using Amazon.Runtime.CredentialManagement;
   using Amazon.S3;
   using Amazon.S3.Model;
   using Amazon.SecurityToken;
   using Amazon.SecurityToken.Model;
   
   namespace S3CreateAndList
   {
       class Program
       {
           // This code is part of the quick tour in the developer guide.
           // See https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/quick-start.html
           // for complete steps.
           // Requirements:
           // - An SSO profile in the SSO user's shared config file with sufficient privileges for
   		//   STS and S3 buckets.
           // - An active SSO Token.
           //    If an active SSO token isn't available, the SSO user should do the following:
           //    In a terminal, the SSO user must call "aws sso login".
   
           // Class members.
           static async Task Main(string[] args)
           {
               // Get SSO credentials from the information in the shared config file.
               // For this tutorial, the information is in the [default] profile.
               var ssoCreds = LoadSsoCredentials("default");
   
               // Display the caller's identity.
               var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds);
               Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}");
   
               // Create the S3 client is by using the SSO credentials obtained earlier.
               var s3Client = new AmazonS3Client(ssoCreds);
   
               // Parse the command line arguments for the bucket name.
               if (GetBucketName(args, out String bucketName))
               {
                   // If a bucket name was supplied, create the bucket.
                   // Call the API method directly
                   try
                   {
                       Console.WriteLine($"\nCreating bucket {bucketName}...");
                       var createResponse = await s3Client.PutBucketAsync(bucketName);
                       Console.WriteLine($"Result: {createResponse.HttpStatusCode.ToString()}");
                   }
                   catch (Exception e)
                   {
                       Console.WriteLine("Caught exception when creating a bucket:");
                       Console.WriteLine(e.Message);
                   }
               }
   
               // Display a list of the account's S3 buckets.
               Console.WriteLine("\nGetting a list of your buckets...");
               var listResponse = await s3Client.ListBucketsAsync();
               Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}");
               foreach (S3Bucket b in listResponse.Buckets)
               {
                   Console.WriteLine(b.BucketName);
               }
               Console.WriteLine();
           }
   
           // 
           // Method to parse the command line.
           private static Boolean GetBucketName(string[] args, out String bucketName)
           {
               Boolean retval = false;
               bucketName = String.Empty;
               if (args.Length == 0)
               {
                   Console.WriteLine("\nNo arguments specified. Will simply list your Amazon S3 buckets." +
                     "\nIf you wish to create a bucket, supply a valid, globally unique bucket name.");
                   bucketName = String.Empty;
                   retval = false;
               }
               else if (args.Length == 1)
               {
                   bucketName = args[0];
                   retval = true;
               }
               else
               {
                   Console.WriteLine("\nToo many arguments specified." +
                     "\n\ndotnet_tutorials - A utility to list your Amazon S3 buckets and optionally create a new one." +
                     "\n\nUsage: S3CreateAndList [bucket_name]" +
                     "\n - bucket_name: A valid, globally unique bucket name." +
                     "\n - If bucket_name isn't supplied, this utility simply lists your buckets.");
                   Environment.Exit(1);
               }
               return retval;
           }
   
           //
           // Method to get SSO credentials from the information in the shared config file.
           static AWSCredentials LoadSsoCredentials(string profile)
           {
               var chain = new CredentialProfileStoreChain();
               if (!chain.TryGetAWSCredentials(profile, out var credentials))
                   throw new Exception($"Failed to find the {profile} profile");
               return credentials;
           }
       }
   
       // Class to read the caller's identity.
       public static class Extensions
       {
           public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient)
           {
               var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest());
               return response.Arn;
           }
       }
   }
   ```

## Ejecución de la aplicación
<a name="s3-1-cross-run"></a>

1. Ejecute el siguiente comando.

   ```
   dotnet run
   ```

1. Examine la salida para ver el número de buckets de Amazon S3 que posee, si los hay, y sus nombres.

1. Elija un nombre para un nuevo bucket de Amazon S3. Use “dotnet-quicktour-s3-1-cross-” como base y agréguele algo único, como un GUID o su nombre. Asegúrese de seguir las reglas de nomenclatura de bucket, como se describe en [Reglas de nomenclatura de buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules) en la [Guía del usuario de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/).

1. Ejecute el siguiente comando, reemplazando *amzn-s3-demo-bucket* por el nombre del bucket elegido.

   ```
   dotnet run amzn-s3-demo-bucket
   ```

1. Examine la salida para ver el nuevo bucket que se creó.

## Eliminación
<a name="s3-1-cross-clean-up"></a>

Mientras realizaba este tutorial, ha creado algunos recursos que puede decidir limpiar en este momento.
+ Si no quiere conservar el bucket que la aplicación creó en un paso anterior, elimínelo mediante la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).
+ Si no quiere conservar el proyecto de .NET, elimine la carpeta `S3CreateAndList` del entorno de desarrollo.

## Pasos siguientes
<a name="s3-1-cross-next"></a>

Vuelva al [menú de recorrido rápido](quick-start.md) o vaya directamente al [final de este recorrido rápido](quick-start-next-steps.md).

# Aplicación sencilla basada en Windows que utiliza la herramienta AWS SDK para .NET
<a name="quick-start-s3-1-winvs"></a>

Este tutorial utiliza AWS SDK para .NET en Windows con Visual Studio y .NET Core. En el tutorial se muestra cómo utilizar SDK para enumerar los [buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/) que posee y, opcionalmente, crear un bucket.

Llevará a cabo este tutorial en Windows mediante Visual Studio y .NET Core. Para ver otras formas de configurar el entorno de desarrollo, consulte [Instalación y configuración de la cadena de herramientas](net-dg-dev-env.md).

**Necesario para el desarrollo en Windows con Visual Studio y .NET Core:**
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1, 3.1 o posterior

  Esto normalmente se incluye de forma predeterminada al instalar una versión reciente de Visual Studio.

**nota**  
Antes de usar estos tutoriales, primero debe haber [instalado su cadena de herramientas](net-dg-dev-env.md) y haber [configurado la autenticación de SDK](creds-idc.md).

## Pasos
<a name="s3-1-winvs-steps"></a>
+ [Creación del proyecto](#s3-1-winvs-create-project)
+ [Crear el código](#s3-1-winvs-code)
+ [Ejecución de la aplicación](#s3-1-winvs-run)
+ [Eliminación](#s3-1-winvs-clean-up)

## Creación del proyecto
<a name="s3-1-winvs-create-project"></a>

1. Abra Visual Studio y cree un nuevo proyecto que utilice la versión C\$1 de la plantilla **Aplicación de consola**; es decir, con la descripción: “... para crear una aplicación de línea de comandos que pueda ejecutarse en .NET...”. Asigne un nombre al proyecto `S3CreateAndList`.
**nota**  
No elija la versión .NET Framework de la plantilla de aplicación de consola o, si la elige, asegúrese de utilizar .NET Framework 4.7.2 o una versión posterior.

1. Con el proyecto recién creado cargado, seleccione **Herramientas** > **Administrador de paquetes NuGet** > **Administrar paquetes NuGet en la solución**.

1. Busque los siguientes paquetes NuGet e instálelos en el proyecto: `AWSSDK.S3`, `AWSSDK.SecurityToken`, `AWSSDK.SSO` y `AWSSDK.SSOOIDC`

   Con este proceso se instalan los paquetes NuGet desde el [Administrador de paquetes NuGet](https://www.nuget.org/profiles/awsdotnet). Como sabemos exactamente qué paquetes NuGet necesitamos en este tutorial, podemos realizar este paso ahora. También es común que los paquetes requeridos se conozcan durante el desarrollo. Cuando esto suceda, siga un proceso similar para instalarlos en ese momento.

1. Si tiene la intención de ejecutar la aplicación desde el símbolo del sistema, abra un símbolo del sistema ahora y vaya a la carpeta que contendrá la salida de compilación. Suele ser algo así como `S3CreateAndList\S3CreateAndList\bin\Debug\net6.0`, pero dependerá del entorno.

## Crear el código
<a name="s3-1-winvs-code"></a>

1. En el proyecto `S3CreateAndList`, busque y abra `Program.cs` en el IDE.

1. Reemplace el contenido con el siguiente código y guarde el archivo.

   ```
   using System;
   using System.Threading.Tasks;
   
   // NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC
   using Amazon.Runtime;
   using Amazon.Runtime.CredentialManagement;
   using Amazon.S3;
   using Amazon.S3.Model;
   using Amazon.SecurityToken;
   using Amazon.SecurityToken.Model;
   
   namespace S3CreateAndList
   {
       class Program
       {
           // This code is part of the quick tour in the developer guide.
           // See https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/quick-start.html
           // for complete steps.
           // Requirements:
           // - An SSO profile in the SSO user's shared config file with sufficient privileges for
   		//   STS and S3 buckets.
           // - An active SSO Token.
           //    If an active SSO token isn't available, the SSO user should do the following:
           //    In a terminal, the SSO user must call "aws sso login".
   
           // Class members.
           static async Task Main(string[] args)
           {
               // Get SSO credentials from the information in the shared config file.
               // For this tutorial, the information is in the [default] profile.
               var ssoCreds = LoadSsoCredentials("default");
   
               // Display the caller's identity.
               var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds);
               Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}");
   
               // Create the S3 client is by using the SSO credentials obtained earlier.
               var s3Client = new AmazonS3Client(ssoCreds);
   
               // Parse the command line arguments for the bucket name.
               if (GetBucketName(args, out String bucketName))
               {
                   // If a bucket name was supplied, create the bucket.
                   // Call the API method directly
                   try
                   {
                       Console.WriteLine($"\nCreating bucket {bucketName}...");
                       var createResponse = await s3Client.PutBucketAsync(bucketName);
                       Console.WriteLine($"Result: {createResponse.HttpStatusCode.ToString()}");
                   }
                   catch (Exception e)
                   {
                       Console.WriteLine("Caught exception when creating a bucket:");
                       Console.WriteLine(e.Message);
                   }
               }
   
               // Display a list of the account's S3 buckets.
               Console.WriteLine("\nGetting a list of your buckets...");
               var listResponse = await s3Client.ListBucketsAsync();
               Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}");
               foreach (S3Bucket b in listResponse.Buckets)
               {
                   Console.WriteLine(b.BucketName);
               }
               Console.WriteLine();
           }
   
           // 
           // Method to parse the command line.
           private static Boolean GetBucketName(string[] args, out String bucketName)
           {
               Boolean retval = false;
               bucketName = String.Empty;
               if (args.Length == 0)
               {
                   Console.WriteLine("\nNo arguments specified. Will simply list your Amazon S3 buckets." +
                     "\nIf you wish to create a bucket, supply a valid, globally unique bucket name.");
                   bucketName = String.Empty;
                   retval = false;
               }
               else if (args.Length == 1)
               {
                   bucketName = args[0];
                   retval = true;
               }
               else
               {
                   Console.WriteLine("\nToo many arguments specified." +
                     "\n\ndotnet_tutorials - A utility to list your Amazon S3 buckets and optionally create a new one." +
                     "\n\nUsage: S3CreateAndList [bucket_name]" +
                     "\n - bucket_name: A valid, globally unique bucket name." +
                     "\n - If bucket_name isn't supplied, this utility simply lists your buckets.");
                   Environment.Exit(1);
               }
               return retval;
           }
   
           //
           // Method to get SSO credentials from the information in the shared config file.
           static AWSCredentials LoadSsoCredentials(string profile)
           {
               var chain = new CredentialProfileStoreChain();
               if (!chain.TryGetAWSCredentials(profile, out var credentials))
                   throw new Exception($"Failed to find the {profile} profile");
               return credentials;
           }
       }
   
       // Class to read the caller's identity.
       public static class Extensions
       {
           public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient)
           {
               var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest());
               return response.Arn;
           }
       }
   }
   ```

1. Compilación de la aplicación.
**nota**  
Si usa una versión antigua de Visual Studio, es posible que se produzca un error de compilación similar al siguiente:  
“La función ‘async main’ no está disponible en C\$1 7.0. Utilice la versión 7.1 o superior del lenguaje”.  
Si aparece este error, configure el proyecto para que utilice una versión posterior del lenguaje. Por lo general, esto se lleva a cabo en las propiedades del proyecto, en **Compilación** > **Avanzado**.

## Ejecución de la aplicación
<a name="s3-1-winvs-run"></a>

1. Ejecute la aplicación sin argumentos de línea de comandos. Haga esto en el símbolo del sistema (si ya tiene abierto uno) o desde el IDE.

1. Examine la salida para ver el número de buckets de Amazon S3 que posee, si los hay, y sus nombres.

1. Elija un nombre para un nuevo bucket de Amazon S3. Use “dotnet-quicktour-s3-1-winvs-” como base y agréguele algo único, como un GUID o su nombre. Asegúrese de seguir las reglas de nomenclatura de bucket, como se describe en [Reglas de nomenclatura de buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules) en la [Guía del usuario de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/).

1. Vuelva a ejecutar la aplicación, esta vez proporcionando el nombre del bucket.

   En la línea de comandos, reemplace *amzn-s3-demo-bucket* en el siguiente comando por el nombre del bucket que ha elegido.

   ```
   S3CreateAndList amzn-s3-demo-bucket
   ```

   O bien, si está ejecutando la aplicación en el IDE, seleccione **Proyecto** > **Propiedades de S3CreateAndList** > **Depurar** e introduzca el nombre del bucket ahí.

1. Examine la salida para ver el nuevo bucket que se creó.

## Eliminación
<a name="s3-1-winvs-clean-up"></a>

Mientras realizaba este tutorial, ha creado algunos recursos que puede decidir limpiar en este momento.
+ Si no quiere conservar el bucket que la aplicación creó en un paso anterior, elimínelo mediante la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).
+ Si no quiere conservar el proyecto de .NET, elimine la carpeta `S3CreateAndList` del entorno de desarrollo.

## Pasos siguientes
<a name="s3-1-winvs-next"></a>

Vuelva al [menú de recorrido rápido](quick-start.md) o vaya directamente al [final de este recorrido rápido](quick-start-next-steps.md).

# Pasos a seguir a continuación
<a name="quick-start-next-steps"></a>

Asegúrese de limpiar los recursos sobrantes que haya creado mientras realiza estos tutoriales. Pueden ser recursos de AWS o recursos del entorno de desarrollo, como archivos y carpetas.

Ahora que ya se ha paseado por AWS SDK para .NET, probablemente quiera [iniciar un proyecto](net-dg-start-new-project.md).

# Inicio de un nuevo proyecto
<a name="net-dg-start-new-project"></a>

Hay varias técnicas que puede utilizar para iniciar un nuevo proyecto para acceder a servicios de AWS. Estas son algunas de ellas:
+ Si no tiene experiencia en el desarrollo de .NET en AWS o no está familiarizado con AWS SDK para .NET, puede ver ejemplos completos en [Recorrido rápido](quick-start.md), que sirve de introducción a SDK.
+ Puede iniciar un proyecto básico utilizando la CLI de .NET. Para ver un ejemplo de esto, abra una línea de comandos o un terminal, cree una carpeta o un directorio y acceda a él y, a continuación, introduzca lo siguiente.

  ```
  dotnet new console --name [SOME-NAME]
  ```

  Se crea un proyecto vacío al que puede agregar código y paquetes NuGet. Para obtener más información, consulte la [Guía de .NET Core](https://learn.microsoft.com/en-us/dotnet/fundamentals/).

  Para ver una lista de plantillas de proyectos, utilice lo siguiente: `dotnet new --list`
+ AWS Toolkit for Visual Studio incluye plantillas de proyecto de C\$1 para una serie de servicios de AWS. Después de [instalar el kit de herramientas](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html) en Visual Studio, puede acceder a las plantillas mientras crea un nuevo proyecto.

  Para saber cómo, vaya a [Uso de los servicios de AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/working-with-services.html) en la [Guía del usuario de AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/). Varios de los ejemplos de esa sección sirven para crear nuevos proyectos.
+ Si desarrolla con Visual Studio en Windows, pero sin AWS Toolkit for Visual Studio, utilice las técnicas habituales para crear un nuevo proyecto.

  Para ver un ejemplo, abra Visual Studio y seleccione **Archivo** > **Nuevo** > **Proyecto**. Busque “.net core” y elija la versión C\$1 de la plantilla **Aplicación de consola (.NET Core)** o **Aplicación WPF (.NET Core)**. Se crea un proyecto vacío al que puede agregar código y paquetes NuGet.

Encontrará algunos ejemplos de cómo trabajar con servicios de AWS en [Ejemplos de código con orientacionesBibliotecas y marcos de trabajo de alto nivel](tutorials-examples.md).

**importante**  
Si utiliza AWS IAM Identity Center para la autenticación, la aplicación debe hacer referencia a los siguientes paquetes NuGet para que la resolución de SSO funcione:  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
Si no se hace referencia a estos paquetes, se producirá una excepción de *tiempo de ejecución*.

# Configuración de la región de AWS
<a name="net-dg-region-selection"></a>

Las regiones de AWS permiten acceder a servicios de AWS que se encuentran físicamente en una región geográfica determinada. Esto puede ser útil para evitar redundancias y para que sus datos y aplicaciones se ejecuten cerca del lugar desde donde accederá a ellos usted y sus usuarios.

Para ver la lista actual de todas las regiones y puntos de conexión compatibles de cada servicio de AWS, consulte [Puntos de conexión y cuotas de servicios](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) en la *Referencia general de AWS*. Para ver una lista de los puntos de conexión regionales existentes, consulte [Puntos de conexión de servicios de AWS](https://docs.aws.amazon.com/general/latest/gr/rande.html). Para ver información detallada sobre las regiones, consulte [Especificar qué regiones de AWS puede usar su cuenta](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html).

Puede crear un cliente de servicio de AWS que vaya a una [región en particular](#per-client). También puede configurar la aplicación con una región que se utilizará en [todos los clientes de servicio de AWS](#globally). Estos dos casos se explican a continuación.

## Creación de un cliente de servicio con una región particular
<a name="per-client"></a>

Se puede especificar la región de cualquiera de los clientes de servicio de AWS de la aplicación. La configuración de la región de esta manera prevalece sobre cualquier configuración global de ese cliente de servicio concreto.

### Región existente
<a name="w2aab9c21c11b5"></a>

En este ejemplo se muestra cómo crear una instancia de un [cliente de Amazon EC2](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Client.html) en una región existente. Se utilizan campos de [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html) definidos.

```
using (AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USWest2))
{
  // Make a request to EC2 in the us-west-2 Region using ec2Client
}
```

### Nueva región mediante la clase RegionEndpoint
<a name="w2aab9c21c11b7"></a>

En este ejemplo se muestra cómo crear un nuevo punto de conexión de región mediante [RegionEndpoint.GetBySystemName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/MRegionEndpointGetBySystemNameString.html).

```
var newRegion = RegionEndpoint.GetBySystemName("us-west-new");
using (var ec2Client = new AmazonEC2Client(newRegion))
{
  // Make a request to EC2 in the new Region using ec2Client
}
```

### Nueva región mediante la clase de configuración de cliente de servicio
<a name="w2aab9c21c11b9"></a>

En este ejemplo se muestra cómo utilizar la propiedad `ServiceURL` de la clase de configuración de cliente de servicio para especificar la región, en este caso, la clase [AmazonEC2Config](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Config.html).

Esta técnica funciona incluso si el punto de conexión de la región no sigue el patrón de punto de conexión de región habitual.

```
var ec2ClientConfig = new AmazonEC2Config
{
    // Specify the endpoint explicitly
    ServiceURL = "https://ec2.us-west-new.amazonaws.com"
};

using (var ec2Client = new AmazonEC2Client(ec2ClientConfig))
{
  // Make a request to EC2 in the new Region using ec2Client
}
```

## Especificación de una región para todos los clientes de servicio
<a name="globally"></a>

Hay varias maneras de especificar una región para todos los clientes de servicio de AWS que la aplicación cree. Esta región se usa con los clientes de servicio que no se crean con una región particular.

AWS SDK para .NET busca un valor de región en el siguiente orden:

### Perfiles
<a name="w2aab9c21c15b7"></a>

Establezca un perfil que la aplicación o SDK haya cargado. Para obtener más información, consulte [Resolución de credenciales y perfil](creds-assign.md).

### Variables de entorno
<a name="w2aab9c21c15b9"></a>

Establezca la variable de entorno `AWS_REGION`.

En Linux o macOS:

```
export AWS_REGION='us-west-2'
```

En Windows:

```
set AWS_REGION=us-west-2
```

**nota**  
Si esta variable de entorno se establece para todo el sistema (mediante `export` o `setx`), afectará a todos los SDK y kits de herramientas, no solo a AWS SDK para .NET.

### Clase AWSConfigs
<a name="w2aab9c21c15c11"></a>

Establézcala como una propiedad [AWSConfigs.AWSRegion](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html).

```
AWSConfigs.AWSRegion = "us-west-2";
using (var ec2Client = new AmazonEC2Client())
{
  // Make request to Amazon EC2 in us-west-2 Region using ec2Client
}
```

## Resolución de la región
<a name="net-dg-region-resolution"></a>

Si no se utiliza ninguno de los métodos descritos anteriormente para especificar una Región de AWS, AWS SDK para .NET intenta encontrar una región en la que pueda operar el cliente de servicio de AWS.

**Orden de resolución de la región**

1. Archivos de configuración de la aplicación, como `app.config` y `web.config`

1. Variables de entorno (`AWS_REGION` y `AWS_DEFAULT_REGION`)

1. Un perfil con el nombre especificado por un valor en `AWSConfigs.AWSProfileName`

1. Un perfil con el nombre especificado por la variable de entorno `AWS_PROFILE`

1. El perfil `[default]`

1. Metadatos de la instancia de Amazon EC2 (si se ejecuta en una instancia de EC2)

Si no se encuentra ninguna región, SDK lanza una excepción que indica que el cliente de servicio de AWS no tiene ninguna región configurada.

## Información especial sobre la región de China (Pekín)
<a name="net-dg-region-cn-north-1"></a>

Para utilizar servicios en la región de China (Pekín), debe disponer de una cuenta y de credenciales específicas de la región de China (Pekín). Las cuentas y credenciales de otras regiones de AWS no funcionarán en la región China (Pekín). De igual modo, las cuentas y credenciales de la región China (Pekín) no funcionarán en otras regiones de AWS. Para obtener más información acerca de los puntos de enlace y los protocolos disponibles en la región de China (Pekín), consulte [Puntos finales de la región de Pekín](https://docs.amazonaws.cn/en_us/aws/latest/userguide/endpoints-Beijing.html).

## Información especial sobre nuevos servicios de AWS
<a name="net-dg-region-new-services"></a>

Los servicios nuevos de AWS se pueden lanzar inicialmente en algunas regiones y pasar a ser compatibles más adelante en otras regiones. En estos casos, no es necesario instalar el último SDK para acceder a las nuevas regiones para ese servicio. Puede especificar las regiones que se han agregado recientemente para cada cliente o de forma global, como se ha indicado anteriormente.

# Instalación de paquetes de AWSSDK con NuGet
<a name="net-dg-install-assemblies"></a>

[NuGet](https://www.nuget.org/) es un sistema de administración de paquetes de la plataforma .NET. Con NuGet, se pueden instalar [paquetes de AWSSDK](https://www.nuget.org/profiles/awsdotnet), así como otras extensiones diversas, en el proyecto. Para obtener más información, consulte el repositorio [aws/dotnet](https://github.com/aws/dotnet) en el sitio web de GitHub.

NuGet siempre tiene las versiones más recientes de los paquetes de AWSSDK, así como las versiones anteriores. NuGet tiene en cuenta las dependencias entre paquetes e instala todos los paquetes necesarios de forma automática.

**aviso**  
La lista de paquetes NuGet puede incluir uno llamado simplemente “AWSSDK” (sin identificador anexo). NO instale este paquete NuGet; es heredado y no debe usarse en los proyectos nuevos.

Los paquetes instalados con NuGet se almacenan con su proyecto en lugar de en una ubicación central. De este modo podrá instalar versiones de ensamblados específicos de una aplicación determinada sin que se generen problemas de compatibilidad con otras aplicaciones. Para obtener más información acerca de NuGet, consulte la [documentación de NuGet](https://learn.microsoft.com/en-us/nuget/).

**nota**  
Si no puede o no tiene permiso para descargar e instalar paquetes NuGet en cada proyecto, puede obtener los ensamblados de AWSSDK y almacenarlos localmente (o en las instalaciones).  
Si es su caso y aún no ha obtenido los ensamblados de AWSSDK, consulte [Obtención de ensamblados de AWSSDK](net-dg-obtain-assemblies.md). Para obtener información sobre cómo utilizar los ensamblados almacenados localmente, consulte [Instalación de ensamblados de AWSSDK sin NuGet](net-dg-install-without-nuget.md).

## Uso de NuGet desde la línea de comandos o un terminal
<a name="package-install-nuget"></a>

1. Acceda a los [paquetes de AWSSDK en NuGet](https://www.nuget.org/profiles/awsdotnet) y determine qué paquetes necesita en el proyecto; por ejemplo, **[AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3/)**.

1. Copie el comando de la CLI de .NET de la página web de ese paquete, como se muestra en el siguiente ejemplo.

   **`dotnet add package AWSSDK.S3 --version 3.3.110.19`**

1. En el directorio del proyecto, ejecute ese comando de la CLI de .NET. NuGet también instala cualquier dependencia, como por ejemplo [AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core).

**nota**  
Si solo desea la última versión de un paquete NuGet, puede excluir del comando la información de versión, como se muestra en el siguiente ejemplo.  
**`dotnet add package AWSSDK.S3`**

## Uso de NuGet desde el Explorador de soluciones de Visual Studio
<a name="package-install-gui"></a>

1. En el **Explorador de soluciones**, haga clic con el botón derecho en el proyecto y, a continuación, elija **Administrar paquetes NuGet** en el menú contextual.

1. En el panel izquierdo del **Administrador de paquetes NuGet**, elija **Examinar**. A continuación, puede utilizar el cuadro de búsqueda para buscar el paquete que desea instalar. NuGet también instala cualquier dependencia, como por ejemplo [AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core).

   En la siguiente imagen se muestra la instalación del paquete **AWSSDK.S3**.  
![\[Paquete AWSSDK.S3 que se muestra en NuGet Packages Manager.\]](http://docs.aws.amazon.com/es_es/sdk-for-net/v3/developer-guide/images/nuget-install-vs-dlg.png)

## Uso de NuGet desde la Consola del administrador de paquetes
<a name="package-install-cmd"></a>

En Visual Studio, seleccione **Herramientas** > **Administrador de paquetes NuGet** > **Consola del Administrador de paquetes**.

Puede instalar los paquetes de AWSSDK que desee desde la consola del Administrador de paquetes utilizando el comando **`Install-Package`**. Por ejemplo, para instalar [AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3), utilice el siguiente comando.

```
PM> Install-Package AWSSDK.S3
```

NuGet también instala cualquier dependencia, como por ejemplo [AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core).

Si necesita instalar una versión previa de un paquete, utilice la opción `-Version` y especifique la versión del paquete que quiera, como se muestra en el siguiente ejemplo.

```
PM> Install-Package AWSSDK.S3 -Version 3.3.106.6
```

Para obtener más información sobre los comandos de la consola del Administrador de paquetes, consulte la [referencia de PowerShell](https://learn.microsoft.com/en-us/nuget/reference/powershell-reference) en la [documentación de NuGet](https://learn.microsoft.com/en-us/nuget/) de Microsoft.

# Instalación de ensamblados de AWSSDK sin NuGet
<a name="net-dg-install-without-nuget"></a>

En este tema se describe cómo puede utilizar los ensamblados de AWSSDK que ha obtenido y ha almacenado localmente (o en las instalaciones), como se describe en [Obtención de ensamblados de AWSSDK](net-dg-obtain-assemblies.md). Este **no** es el método recomendado para administrar las referencias de SDK, pero en algunos entornos es obligatorio.

**nota**  
El método recomendado para administrar las referencias de SDK es descargar e instalar solo los paquetes NuGet que se necesiten en cada proyecto. Este método se describe en [Instalación de paquetes de AWSSDK con NuGet](net-dg-install-assemblies.md).

**Para instalar ensamblados de AWSSDK**

1. Cree una carpeta en el área del proyecto de ensamblados de AWSSDK necesarios. A modo de ejemplo, podría denominar esta carpeta `AwsAssemblies`

1. Si aún no lo ha hecho, [obtenga los ensamblados de AWSSDK](net-dg-obtain-assemblies.md), que se colocarán en una carpeta local de descargas o instalación. Copie los archivos DLL de los ensamblados necesarios de esa carpeta de descargas en el proyecto (en la carpeta `AwsAssemblies`, según nuestro ejemplo).

   Asegúrese de copiar también las dependencias. Encontrará información sobre las dependencias en el sitio web de [GitHub](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/generator/ServiceModels/_sdk-versions.json).

1. Haga referencia a los ensamblados necesarios de la siguiente manera.

------
#### [ Cross-platform development ]

   1. Abra el archivo `.csproj` del proyecto y agregue un elemento `<ItemGroup>`.

   1. En el elemento `<ItemGroup>`, agregue un elemento `<Reference>` con un atributo `Include` para cada ensamblado necesario.

      En Amazon S3, por ejemplo, agregaríamos las siguientes líneas al archivo `.csproj` del proyecto.

      **En Linux y macOS:**

      ```
      <ItemGroup>
        <Reference Include="./AwsAssemblies/AWSSDK.Core.dll" />
        <Reference Include="./AwsAssemblies/AWSSDK.S3.dll" />
      </ItemGroup>
      ```

      **En Windows:**

      ```
      <ItemGroup>
        <Reference Include="AwsAssemblies\AWSSDK.Core.dll" />
        <Reference Include="AwsAssemblies\AWSSDK.S3.dll" />
      </ItemGroup>
      ```

   1. Guarde el archivo `.csproj` del proyecto.

------
#### [ Windows with Visual Studio and .NET Core ]

   1. En Visual Studio, cargue el proyecto y abra **Proyecto** > **Agregar referencia**.

   1. Pulse el botón **Examinar** en la parte inferior del cuadro de diálogo. Navegue hasta la carpeta del proyecto y la subcarpeta en la que copió los archivos DLL necesarios (`AwsAssemblies`, por ejemplo).

   1. Seleccione todos los archivos DLL y, luego, seleccione **Agregar** y **Aceptar**.

   1. Guarde el proyecto.

------

# Resolución de credenciales y perfil
<a name="creds-assign"></a>

AWS SDK para .NET busca credenciales en un determinado orden y usa el primer conjunto disponible para la aplicación actual.

**Orden de búsqueda de credenciales**

1. Credenciales establecidas de forma explícita en el cliente de servicio de AWS, tal y como se describe en [Acceso a las credenciales y perfiles en una aplicación](creds-locate.md).
**nota**  
Este tema está en la sección [Consideraciones especiales](special-considerations.md) porque no es el método preferido para especificar credenciales.

1. Un perfil de credenciales con el nombre especificado por un valor en [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html#properties).

1. Un perfil de credenciales con el nombre especificado por la variable de entorno `AWS_PROFILE`.

1. El perfil de credenciales `[default]`.

1. [SessionAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSessionAWSCredentials.html) creadas a partir de las variables de entorno `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` y `AWS_SESSION_TOKEN`, si no están todas vacías.

1.  [BasicAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TBasicAWSCredentials.html) creadas a partir de las variables de entorno `AWS_ACCESS_KEY_ID` y `AWS_SECRET_ACCESS_KEY`, si ambas no están vacías.

1. El [proveedor de credenciales de contenedor](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html).

1. Metadatos de la instancia de Amazon EC2.

Si la aplicación se ejecuta en una instancia de Amazon EC2, como un entorno de producción, utilice un rol de IAM tal como se describe en [Concesión de acceso mediante un rol de IAM](net-dg-hosm.md). Si no es el caso (como, por ejemplo, en las pruebas de versión preliminar) almacene las credenciales en un archivo de credenciales de AWS al que la aplicación web tenga acceso en el servidor.

## Resolución de perfiles
<a name="net-dg-config-creds-profile-resolution"></a>

Con dos tipos de mecanismos de almacenamiento de credenciales diferentes, es importante saber cómo configurar AWS SDK para .NET para usarlos. La propiedad [AWSConfigs.AWSProfilesLocation](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) controla la forma en que AWS SDK para .NET busca perfiles de credenciales.


****  

| AWSProfilesLocation | Comportamiento de resolución de perfiles | 
| --- | --- | 
|  null (no establecido) o vacío  |  Busque en SDK Store si la plataforma lo admite y, a continuación, busque el archivo de credenciales de AWS compartido en la [ubicación predeterminada](creds-file.md). Si el perfil no está en ninguna de esas ubicaciones, busque en `~/.aws/config` (Linux o macOS) o en `%USERPROFILE%\.aws\config` (Windows).  | 
|  Ruta a un archivo en el formato del archivo de credenciales de AWS  |  Busque *solo* en el archivo especificado el perfil con el nombre indicado.  | 

## Uso de credenciales de cuentas de usuario federado
<a name="net-dg-config-creds-saml"></a>

Las aplicaciones que usan AWS SDK para .NET ([AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core/) versión 3.1.6.0 y posterior) pueden usar cuentas de usuario federado a través de Servicios de federación de Active Directory (AD FS) para obtener acceso a servicios de AWS mediante el lenguaje de marcado de aserción de seguridad (SAML).

La compatibilidad del acceso federado significa que los usuarios pueden autenticarse mediante su Active Directory. Las credenciales temporales se conceden al usuario automáticamente. Estas credenciales temporales, que son válidas durante una hora, se usan cuando la aplicación invoca servicios de AWS. El SDK gestiona la administración de las credenciales temporales. Para las cuentas de usuario unidas a un dominio, si su aplicación realiza una llamada, pero las credenciales han caducado, el usuario vuelve a autenticarse automáticamente y se conceden credenciales actualizadas (para las cuentas que no unidas a un dominio, se le pide al usuario que escriba las credenciales antes de la segunda autenticación).

Para usar este soporte en su aplicación de .NET, primero debe configurar el perfil de rol mediante un cmdlet de PowerShell. Para saber cómo, consulte la [documentación de AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/saml-pst.html).

Después de configurar el perfil del rol, haga referencia al perfil en la aplicación. Hay varias formas de hacerlo; una de ellas consiste en utilizar la propiedad [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) del mismo modo que se utilizaría con otros perfiles de credenciales.

El ensamblado de *AWS Security Token Service* ([AWSSDK.SecurityToken](https://www.nuget.org/packages/AWSSDK.SecurityToken/)) proporciona la compatibilidad con SAML para obtener credenciales de AWS. Para usar credenciales de cuentas de usuario federado, asegúrese de que este ensamblado está disponible para la aplicación.

## Especificación de roles o credenciales temporales
<a name="net-dg-config-creds-assign-role"></a>

En el caso de las aplicaciones que se ejecutan en instancias de Amazon EC2, el modo más seguro de administrar las credenciales es usar roles de IAM, como se describe en [Concesión de acceso mediante un rol de IAM](net-dg-hosm.md).

Para los escenarios de aplicación en los que el software ejecutable está disponible para los usuarios externos a su organización, recomendamos que diseñe el software para usar *credenciales de seguridad temporales*. Además de proporcionar acceso restringido a los recursos de AWS, estas credenciales tienen la ventaja de caducar después de un período de tiempo especificado. Para obtener más información sobre cómo usar credenciales de seguridad temporales, consulte lo siguiente:
+  [Credenciales de seguridad temporales](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 
+  [Grupos de identidades de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)

## Uso de credenciales de proxy
<a name="net-dg-config-creds-proxy"></a>

Si el software se comunica con AWS a través de un proxy, puede especificar credenciales para el proxy mediante la propiedad `ProxyCredentials` en la clase `Config` de un servicio. La clase `Config` de un servicio suele formar parte del espacio de nombres principal del servicio. Ejemplos de ello son los siguientes [AmazonCloudDirectoryConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudDirectory/TCloudDirectoryConfig.html) del espacio de nombres [Amazon.CloudDirectory](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudDirectory/NCloudDirectory.html) y [AmazonGameLiftConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/TGameLiftConfig.html) del espacio de nombres [Amazon.GameLift](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/NGameLift.html).

Por ejemplo, en [Amazon S3](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html) se podría usar un código similar al siguiente, donde `SecurelyStoredUserName` y `SecurelyStoredPassword` son el nombre de usuario y la contraseña del proxy especificados en un objeto [NetworkCredential](https://learn.microsoft.com/en-us/dotnet/api/system.net.networkcredential).

```
AmazonS3Config config = new AmazonS3Config();
config.ProxyCredentials = new NetworkCredential(SecurelyStoredUserName, SecurelyStoredPassword);
```

**nota**  
Las versiones anteriores del SDK usaban `ProxyUsername` y `ProxyPassword`, pero estas propiedades están obsoletas.

# Información adicional acerca de los usuarios y los roles
<a name="net-dg-users-roles"></a>

Para desarrollar con .NET en AWS o ejecutar aplicaciones .NET en AWS, debe tener una combinación de usuarios, conjuntos de permisos y roles de servicio que sean adecuados para estas tareas.

Los usuarios, conjuntos de permisos y roles de servicio específicos que cree, así como la forma en que los utilice, dependerán de los requisitos de las aplicaciones. A continuación, se muestra información adicional sobre por qué se podrían usar y cómo crearlos.

## Usuarios y conjuntos de permisos
<a name="net-dg-users-roles-user"></a>

Aunque es posible utilizar una cuenta de usuario de IAM con credenciales de larga duración para acceder a los servicios de AWS, esta práctica ya no es recomendable y se debe evitar. Incluso durante el desarrollo, se recomienda crear usuarios y conjuntos de permisos en AWS IAM Identity Center y utilizar credenciales temporales proporcionadas por un origen de identidad.

Para el desarrollo, puede usar el usuario que ha creado o que le han proporcionado en [Configuración de la autenticación de SDK](creds-idc.md). Si tiene los permisos de Consola de administración de AWS adecuados, también puede crear diferentes conjuntos de permisos con los privilegios mínimos para ese usuario o crear nuevos usuarios específicamente para proyectos de desarrollo, lo que proporciona conjuntos de permisos con los privilegios mínimos. El curso de acción que elija, si corresponde, depende de las circunstancias.

Para obtener más información sobre estos usuarios y conjuntos de permisos y sobre cómo crearlos, consulte [Autenticación y acceso](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) en la *Guía de referencia de las herramientas y los SDK de AWS* e [Introducción](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) en la *Guía del usuario de AWS IAM Identity Center*.

## Roles de servicio
<a name="net-dg-users-roles-service-role"></a>

Puede configurar un rol de servicio de AWS para acceder a los servicios de AWS en nombre de los usuarios. Este tipo de acceso es adecuado si varias personas van a ejecutar la aplicación de forma remota; por ejemplo, en una instancia de Amazon EC2 que haya creado para este fin.

El proceso de creación de un rol de servicio varía en función de la situación, pero básicamente es el siguiente.

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Elija **Roles** y después **Crear rol**.

1. Elija el **servicio de AWS**, busque y seleccione **EC2** (por ejemplo) y, a continuación, elija el caso de uso de **EC2** (por ejemplo).

1. Seleccione **Siguiente: Permisos** y seleccione las [políticas adecuadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) para los servicios de AWS que la aplicación va a utilizar.
**aviso**  
***NO*** elija la política **AdministratorAccess** porque esa política permite permisos de lectura y escritura en casi todo el contenido de la cuenta.

1. Seleccione **Siguiente: Etiquetas** e introduzca las etiquetas que desee.

   Encontrará información sobre las etiquetas en [Control de acceso a los recursos de AWS mediante etiquetas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) en la [Guía del usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

1. Seleccione **Siguiente: Revisar** y proporcione un **nombre de rol** y una **descripción del rol**. A continuación, elija **Crear rol**.

Puede encontrar información general sobre los roles de IAM en [Identidades de IAM (usuarios, grupos de usuarios y roles)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html) en la [Guía del usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/). Encuentre información detallada sobre los roles en el tema [Roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) de esa guía.

**Información adicional sobre los roles**
+ Use [roles de IAM para tareas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) para tareas de Amazon Elastic Container Service (Amazon ECS).
+ Use [roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) para aplicaciones que se ejecutan en instancias de Amazon EC2.

# Configuración avanzada para su proyecto de AWS SDK para .NET
<a name="net-dg-advanced-config"></a>

Los temas de esta sección contienen información sobre más tareas y métodos de configuración que podrían interesarle.

**Topics**
+ [AWSSDK.Extensiones. NETCore.Configuración y IConfiguration](net-dg-config-netcore.md)
+ [Configuración de otros parámetros de la aplicación](net-dg-config-other.md)
+ [Referencia de los archivos de configuración para el AWS SDK para .NET](net-dg-config-ref.md)

# Uso de AWSSDK .Extensions. NETCore.Setup y la interfaz IConfiguration
<a name="net-dg-config-netcore"></a>

(Este tema se titulaba anteriormente «Configuración AWS SDK para .NET con .NET Core»)

Uno de los mayores cambios en .NET Core es la eliminación de `ConfigurationManager` y de los archivos `app.config` y `web.config` estándar que se usaban con aplicaciones de .NET Framework y ASP.NET.

La configuración en .NET Core se basa en pares clave-valor establecidos por proveedores de configuración. Los proveedores de configuración leen los datos de configuración en pares clave-valor desde diversos orígenes de configuración, incluidos argumentos de línea de comandos, archivos de directorio, variables de entorno y archivos de configuración.

**nota**  
Para obtener más información, consulte [Configuración en ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration).

Para facilitar su uso AWS SDK para .NET con.NET Core, puede utilizar las [AWSSDK.Extensions. NETCore.Paquete de configuración.](https://www.nuget.org/packages/AWSSDK.Extensions.NETCore.Setup/) NuGet Al igual que muchas bibliotecas de.NET Core, añade métodos de extensión a la `IConfiguration` interfaz para facilitar la AWS configuración.

El código fuente de este paquete está GitHub en[https://github.com/aws/aws-sdk-net/tree/aws-sdk-net-v3.7/extensions/src/AWSSDK.Extensions.NETCore.Setup](https://github.com/aws/aws-sdk-net/tree/aws-sdk-net-v3.7/extensions/src/AWSSDK.Extensions.NETCore.Setup).

## Uso de AWSSDK .Extensions. NETCore.Configuración
<a name="net-core-configuration-builder"></a>

Suponga que crea una aplicación ASP.NET Core Model-View-Controller (MVC), que puede realizarse con la plantilla de **aplicación web ASP.NET Core** en Visual Studio o ejecutándola `dotnet new mvc ...` en la CLI de.NET Core. Al crear una aplicación de este tipo, el constructor de `Startup.cs` administra la configuración leyendo varios orígenes de entrada de proveedores de configuración, como `appsettings.json`.

```
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
```

Para usar el `Configuration` objeto para obtener las *AWS*opciones, primero agregue el paquete. `AWSSDK.Extensions.NETCore.Setup` NuGet Luego, agregue sus opciones al archivo de configuración como se describe a continuación.

Fíjese en que uno de los archivos agregados al proyecto es `appsettings.Development.json`. Corresponde a un `EnvironmentName` establecido en **Development**. Durante el desarrollo, pondremos la configuración en este archivo, que solo se lee durante las pruebas locales. Al implementar una instancia de Amazon EC2 `EnvironmentName` configurada en **Producción**, este archivo se ignora y se recurre a las credenciales AWS SDK para .NET de IAM y a la región configuradas para la instancia de Amazon EC2.

Los siguientes ajustes de configuración muestran ejemplos de los valores que se pueden agregar en el archivo `appsettings.Development.json` del proyecto para proporcionar la configuración de AWS .

```
{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  },
  "SupportEmail": "TechSupport@example.com"
}
```

Para obtener acceso a un ajuste en un archivo *CSHTML* utilice la directiva `Configuration`.

```
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration

<h1>Contact</h1>

<p>
    <strong>Support:</strong> <a href='mailto:@Configuration["SupportEmail"]'>@Configuration["SupportEmail"]</a><br />
</p>
```

Para acceder a las AWS opciones definidas en el archivo desde el código, llame al método de `GetAWSOptions` extensión agregado a. `IConfiguration`

Para crear un cliente de servicio a partir de estas opciones, llame a `CreateServiceClient`. En el siguiente ejemplo se muestra cómo crear un cliente de servicio de Amazon S3 (Asegúrese de añadir el [AWSSDKpaquete.S3](https://www.nuget.org/packages/AWSSDK.S3) NuGet a su proyecto).

```
var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();
```

También puede crear varios clientes de servicio con ajustes incompatibles utilizando varias entradas en el archivo `appsettings.Development.json`, tal y como se muestra en los siguientes ejemplos, donde la configuración de `service1` incluye la región `us-west-2` y la configuración de `service2` incluye la *URL* del punto de conexión especial.

```
{
  "service1": {
    "Profile": "default",
    "Region": "us-west-2"
  },
  "service2": {
    "Profile": "default",
    "ServiceURL": "URL"
  }
}
```

A continuación, puede obtener las opciones para un servicio específico mediante la entrada del archivo JSON. Por ejemplo, utilice lo siguiente para obtener la configuración de `service1`.

```
var options = Configuration.GetAWSOptions("service1");
```

### Valores permitidos en el archivo appsettings
<a name="net-core-appsettings-values"></a>

Los siguientes valores de configuración de la aplicación se pueden establecer en el archivo `appsettings.Development.json`. Los nombres de los campos deben escribirse con las mayúsculas y minúsculas mostradas aquí. Para obtener más información sobre esta configuración, consulte la clase `[AWS.Runtime.ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)`.
+ Region
+ Profile
+ ProfilesLocation
+ SignatureVersion
+ RegionEndpoint
+ UseHttp
+ ServiceURL
+ AuthenticationRegion
+ AuthenticationServiceName
+ MaxErrorRetry
+ LogResponse
+ BufferSize
+ ProgressUpdateInterval
+ ResignRetries
+ AllowAutoRedirect
+ LogMetrics
+ DisableLogging
+ UseDualstackEndpoint

## Inserción de dependencias de ASP.NET Core
<a name="net-core-dependency-injection"></a>

Las *AWSSDK.Extensions. NETCore NuGet El paquete .Setup* también se integra con un nuevo sistema de inyección de dependencias en ASP.NET Core. El método `ConfigureServices` de la clase `Startup` de la aplicación es donde se agregan los servicios MVC. Si la aplicación usa Entity Framework, también es donde se inicializa.

```
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();
}
```

**nota**  
Hay disponible información general sobre la inserción de dependencias en .NET Core en el [sitio de documentación de .NET Core](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection).

El `AWSSDK.Extensions.NETCore.Setup` NuGet paquete agrega nuevos métodos de extensión `IServiceCollection` que puede usar para agregar AWS servicios a la inyección de dependencias. El siguiente código muestra cómo añadir las AWS opciones de lectura `IConfiguration` para añadir Amazon S3 y DynamoDB a la lista de servicios. (Asegúrese de añadir los DBv2 NuGet paquetes [AWSSDK.S3 y [AWSSDK.Dynamo](https://www.nuget.org/packages/AWSSDK.DynamoDBv2)](https://www.nuget.org/packages/AWSSDK.S3) a su proyecto).

```
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
    services.AddAWSService<IAmazonS3>();
    services.AddAWSService<IAmazonDynamoDB>();
}
```

Ahora, si sus controladores MVC usan `IAmazonS3` o `IAmazonDynamoDB` como parámetros en sus constructores, el sistema de inserción de dependencias pasa esos servicios.

```
public class HomeController : Controller
{
    IAmazonS3 S3Client { get; set; }

    public HomeController(IAmazonS3 s3Client)
    {
        this.S3Client = s3Client;
    }

    ...

}
```

# Configuración de otros parámetros de la aplicación
<a name="net-dg-config-other"></a>

**nota**  
La información de este tema es específica de proyectos basados en .NET Framework. Los archivos `App.config` y `Web.config` no están presentes de forma predeterminada en proyectos basados en .NET Core.

## Abrir para ver el contenido de .NET Framework
<a name="w2aab9c31b9b5b1"></a>

Hay varios parámetros de la aplicación que se pueden configurar:
+  `AWSLogging` 
+  `AWSLogMetrics` 
+  `AWSRegion` 
+  `AWSResponseLogging` 
+  `AWS.DynamoDBContext.TableNamePrefix` 
+  `AWS.S3.UseSignatureVersion4` 
+  `AWSEndpointDefinition` 
+  [AWS Terminales generados por el servicio](#config-setting-service-generated-awsendpointdefinition) 

Estos parámetros se pueden configurar en el archivo `App.config` o `Web.config` de la aplicación. Aunque también puedes configurarlos con la AWS SDK para .NET API, te recomendamos que utilices el archivo de la aplicación. `.config` Aquí se describen ambos enfoques.

Para obtener más información sobre cómo usar el elemento `<aws>` tal como se describe más adelante en este tema, consulte [Referencia de archivos de configuración de AWS SDK para .NET](net-dg-config-ref.md).

### AWSLogging
<a name="config-setting-awslogging"></a>

Configura la manera en que el SDK debe registrar los eventos, si es que debe hacerlo. Por ejemplo, el enfoque recomendado es utilizar el elemento `<logging>`, que es un elemento secundario del elemento `<aws>`:

```
<aws>
  <logging logTo="Log4Net"/>
</aws>
```

Otra opción:

```
<add key="AWSLogging" value="log4net"/>
```

Los valores posibles son:

** `None` **  
Desactivación del registro de eventos. Este es el valor predeterminado.

** `log4net` **  
Registro mediante log4net.

** `SystemDiagnostics` **  
Registro mediante la clase `System.Diagnostics`.

Puede definir diferentes valores para el atributo `logTo`, separado por comas. El siguiente ejemplo define los registros `log4net` y `System.Diagnostics` en el archivo `.config`:

```
<logging logTo="Log4Net, SystemDiagnostics"/>
```

Otra opción:

```
<add key="AWSLogging" value="log4net, SystemDiagnostics"/>
```

Como alternativa, mediante la AWS SDK para .NET API, combine los valores de la [LoggingOptions](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TLoggingOptions.html)enumeración y establezca la propiedad [AWSConfigs.Logging](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html):

```
AWSConfigs.Logging = LoggingOptions.Log4Net | LoggingOptions.SystemDiagnostics;
```

Los cambios en esta configuración solo se aplican a las instancias de AWS cliente nuevas.

### AWSLogMétricas
<a name="config-setting-awslogmetrics"></a>

Especifica si el SDK debería o no registrar métricas de desempeño. Para definir la configuración de registro de las métricas en el archivo `.config`, defina el valor del atributo `logMetrics` en el elemento `<logging>`, que es un elemento secundario del elemento `<aws>`:

```
<aws>
  <logging logMetrics="true"/>
</aws>
```

De forma alternativa, defina la clave `AWSLogMetrics` en la sección `<appSettings>`:

```
<add key="AWSLogMetrics" value="true">
```

Como alternativa, para configurar el registro de métricas con la AWS SDK para .NET API, configure [AWSConfigs. LogMetrics](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)propiedad:

```
AWSConfigs.LogMetrics = true;
```

Esta opción configura la propiedad `LogMetrics` de forma predeterminada para todos los clientes y configuraciones. Los cambios en esta configuración solo se aplican a las instancias de AWS clientes nuevas.

### AWSRegion
<a name="config-setting-awsregion"></a>

Configura la AWS región predeterminada para los clientes que no han especificado una región de forma explícita. Para definir la región en el archivo `.config`, le recomendamos especificar el valor del atributo `region` en el elemento `aws`:

```
<aws region="us-west-2"/>
```

De forma alternativa, defina la clave *AWSRegion* en la sección `<appSettings>`:

```
<add key="AWSRegion" value="us-west-2"/>
```

[Como alternativa, para configurar la región con la AWS SDK para .NET API, defina. AWSConfigs AWSRegion](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)propiedad:

```
AWSConfigs.AWSRegion = "us-west-2";
```

Para obtener más información sobre la creación de un AWS cliente para una región específica, consulte [Selección de AWS regiones](net-dg-region-selection.md). Los cambios en esta configuración solo se aplican a las instancias de AWS clientes nuevas.

### AWSResponseRegistro
<a name="config-setting-awsresponselogging"></a>

Se configura cuando el SDK debería registrar respuestas del servicio. Los valores posibles son:

** `Never` **  
No registrar nunca respuestas del servicio. Es el valor predeterminado.

** `Always` **  
Registrar siempre respuestas del servicio.

** `OnError` **  
Registrar solo respuestas del servicio cuando se produzcan errores.

Para definir la configuración del registro de servicios en el archivo `.config`, le recomendamos que defina el valor del atributo `logResponses` en el elemento `<logging>`, que es un elemento secundario del elemento `<aws>`:

```
<aws>
  <logging logResponses="OnError"/>
</aws>
```

También puede configurar la clave de *AWSResponseregistro* en la `<appSettings>` sección:

```
<add key="AWSResponseLogging" value="OnError"/>
```

Como alternativa, para configurar el registro del servicio con la AWS SDK para .NET API, configure [AWSConfigs. ResponseLogging](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)propiedad en uno de los valores de la [ResponseLoggingOption](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TResponseLoggingOption.html)enumeración:

```
AWSConfigs.ResponseLogging = ResponseLoggingOption.OnError;
```

Los cambios en esta configuración surtirán efecto de inmediato.

### `AWS.DynamoDBContext.TableNamePrefix`
<a name="config-setting-aws-dynamodbcontext-tablenameprefix"></a>

Configura el `TableNamePrefix` predeterminado. Se utilizará `DynamoDBContext` si no se ha configurado manualmente.

Para definir el prefijo del nombre de tabla en el archivo `.config`, le recomendamos definir el valor del atributo `tableNamePrefix` en el elemento `<dynamoDBContext>`, que es un elemento secundario del elemento `<dynamoDB>`, que a su vez es un elemento secundario del elemento `<aws>`:

```
<dynamoDBContext tableNamePrefix="Test-"/>
```

De forma alternativa, defina la clave `AWS.DynamoDBContext.TableNamePrefix` en la sección `<appSettings>`:

```
<add key="AWS.DynamoDBContext.TableNamePrefix" value="Test-"/>
```

Como alternativa, para establecer el prefijo del nombre de la tabla con la AWS SDK para .NET API, establezca la propiedad [AWSConfigsDBContextTableNamePrefix.Dynamo](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html):

```
AWSConfigs.DynamoDBContextTableNamePrefix = "Test-";
```

Los cambios en esta configuración solo serán efectivos en las instancias `DynamoDBContextConfig` y `DynamoDBContext` creadas recientemente.

### `AWS.S3.UseSignatureVersion4`
<a name="config-setting-aws-s3-usesignatureversion4"></a>

Configura si el cliente de Amazon S3 debería utilizar o no la versión 4 de Signature con solicitudes.

Para establecer la versión 4 de Signature para Amazon S3 en el archivo `.config`, el método recomendado es establecer el valor del atributo `useSignatureVersion4` del elemento `<s3>`, que es un elemento secundario del elemento `<aws>`:

```
<aws>
  <s3 useSignatureVersion4="true"/>
</aws>
```

De forma alternativa, establezca la clave `AWS.S3.UseSignatureVersion4` en `true` en la sección `<appSettings>`:

```
<add key="AWS.S3.UseSignatureVersion4" value="true"/>
```

Como alternativa, para configurar la firma en la versión 4 de la firma con la AWS SDK para .NET API, establezca la [AWSConfigspropiedad.S3 UseSignatureVersion](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 4 en: `true`

```
AWSConfigs.S3UseSignatureVersion4 = true;
```

De forma predeterminada, esta configuración es `false`, pero la versión 4 de Signature puede utilizarse de forma predeterminada en algunos casos o en algunas regiones. Si la configuración es `true`, se utilizará la versión 4 de Signature para todas las solicitudes. Los cambios en esta configuración solo surten efecto en las instancias de cliente de Amazon S3 nuevas.

### AWSEndpointDefinición
<a name="config-setting-awsendpointdefinition"></a>

Configura si el SDK debería utilizar un archivo de configuración personalizado que define las regiones y los puntos de enlace.

Para definir el archivo de definición del punto de enlace en el archivo `.config`, le recomendamos configurar el valor del atributo `endpointDefinition` en el elemento `<aws>`.

```
<aws endpointDefinition="c:\config\endpoints.json"/>
```

Como alternativa, puede configurar la clave de *AWSEndpointdefinición* en la `<appSettings>` sección:

```
<add key="AWSEndpointDefinition" value="c:\config\endpoints.json"/>
```

Como alternativa, para configurar el archivo de definición del punto final con la AWS SDK para .NET API, configure el [AWSConfigs. EndpointDefinition](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)propiedad:

```
AWSConfigs.EndpointDefinition = @"c:\config\endpoints.json";
```

Si no se proporciona ningún nombre de archivo, no se utilizará el archivo de configuración personalizado. Los cambios en esta configuración solo se aplican a las instancias de AWS clientes nuevas. El archivo endpoint.json está disponible en [https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/endpoints.json](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/endpoints.json).

### AWS Puntos finales generados por el servicio
<a name="config-setting-service-generated-awsendpointdefinition"></a>

Algunos AWS servicios generan sus propios puntos de enlace en lugar de consumir un punto final regional. Los clientes de estos servicios consumen una URL de servicio específica de dicho servicio y sus recursos. Dos ejemplos de estos servicios son Amazon CloudSearch y AWS IoT. Los siguientes ejemplos muestran cómo puede obtener los puntos de enlace para dichos servicios.

#### Ejemplo de Amazon CloudSearch Endpoints
<a name="cs-endpoints-example"></a>

El CloudSearch cliente de Amazon se utiliza para acceder al servicio de CloudSearch configuración de Amazon. Utiliza el servicio de CloudSearch configuración de Amazon para crear, configurar y gestionar los dominios de búsqueda. Para crear un dominio de búsqueda, cree un [CreateDomainRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCreateDomainRequest.html)objeto y proporcione la `DomainName` propiedad. Cree un [AmazonCloudSearchClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCloudSearchClient.html)objeto mediante el objeto de solicitud. Llame al método [CreateDomain](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/MCloudSearchCreateDomainCreateDomainRequest.html). El [CreateDomainResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCreateDomainResponse.html)objeto devuelto por la llamada contiene una `DomainStatus` propiedad que tiene los `SearchService` puntos finales `DocService` y los extremos. Crea un [AmazonCloudSearchDomainConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearchDomain/TCloudSearchDomainConfig.html)objeto y úsalo para inicializar cualquier `SearchService` instancia `DocService` de la [AmazonCloudSearchDomainClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearchDomain/TCloudSearchDomainClient.html)clase.

```
// Create domain and retrieve DocService and SearchService endpoints
DomainStatus domainStatus;
using (var searchClient = new AmazonCloudSearchClient())
{
    var request = new CreateDomainRequest
    {
        DomainName = "testdomain"
    };
    domainStatus = searchClient.CreateDomain(request).DomainStatus;
    Console.WriteLine(domainStatus.DomainName + " created");
}

// Test the DocService endpoint
var docServiceConfig = new AmazonCloudSearchDomainConfig
{
    ServiceURL = "https://" + domainStatus.DocService.Endpoint
};
using (var domainDocService = new AmazonCloudSearchDomainClient(docServiceConfig))
{
    Console.WriteLine("Amazon CloudSearchDomain DocService client instantiated using the DocService endpoint");
    Console.WriteLine("DocService endpoint = " + domainStatus.DocService.Endpoint);

    using (var docStream = new FileStream(@"C:\doc_source\XMLFile4.xml", FileMode.Open))
    {
        var upload = new UploadDocumentsRequest
        {
            ContentType = ContentType.ApplicationXml,
            Documents = docStream
        };
        domainDocService.UploadDocuments(upload);
    }
}

// Test the SearchService endpoint
var searchServiceConfig = new AmazonCloudSearchDomainConfig
{
    ServiceURL = "https://" + domainStatus.SearchService.Endpoint
};
using (var domainSearchService = new AmazonCloudSearchDomainClient(searchServiceConfig))
{
    Console.WriteLine("Amazon CloudSearchDomain SearchService client instantiated using the SearchService endpoint");
    Console.WriteLine("SearchService endpoint = " + domainStatus.SearchService.Endpoint);

    var searchReq = new SearchRequest
    {
        Query = "Gambardella",
        Sort = "_score desc",
        QueryParser = QueryParser.Simple
    };
    var searchResp = domainSearchService.Search(searchReq);
}
```

#### AWS IoT Ejemplo de puntos finales
<a name="iotlong-endpoints-example"></a>

Para obtener el punto final AWS IoT, cree un [AmazonIoTClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/TIoTClient.html)objeto y llame al [DescribeEndPoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/MIoTDescribeEndpointDescribeEndpointRequest.html)método. El [DescribeEndPointResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/TDescribeEndpointResponse.html)objeto devuelto contiene el`EndpointAddress`. Cree un [AmazonIotDataConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IotData/TIotDataConfig.html)objeto, establezca la `ServiceURL` propiedad y utilice el objeto para crear una instancia de la [AmazonIotDataClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IotData/TIotDataClient.html)clase.

```
string iotEndpointAddress;
using (var iotClient = new AmazonIoTClient())
{
    var endPointResponse = iotClient.DescribeEndpoint();
    iotEndpointAddress = endPointResponse.EndpointAddress;
}

var ioTdocServiceConfig = new AmazonIotDataConfig
{
    ServiceURL = "https://" + iotEndpointAddress
};
using (var dataClient = new AmazonIotDataClient(ioTdocServiceConfig))
{
    Console.WriteLine("AWS IoTData client instantiated using the endpoint from the IotClient");
}
```

# Referencia de los archivos de configuración para el AWS SDK para .NET
<a name="net-dg-config-ref"></a>

**nota**  
La información de este tema es específica de proyectos basados en .NET Framework. Los archivos `App.config` y `Web.config` no están presentes de forma predeterminada en proyectos basados en .NET Core.

## Abrir para ver el contenido de .NET Framework
<a name="w2aab9c31c11b5b1"></a>

Puede usar un archivo `App.config` o `Web.config` del proyecto de .NET para especificar la configuración de AWS, como credenciales de AWS, opciones de registro, puntos de conexión de servicio de AWS y regiones de AWS, así como algunos ajustes de servicios de AWS, como Amazon DynamoDB, Amazon EC2 y Amazon S3. En la siguiente información se describe cómo dar formato correctamente a un archivo `App.config` o `Web.config` para especificar estos tipos de configuración.

**nota**  
Aunque puede continuar usando el elemento `<appSettings>` en un archivo `App.config` o `Web.config` para especificar la configuración de AWS, recomendamos usar los elementos `<configSections>` y `<aws>`, como se describe posteriormente en este tema. Para obtener más información sobre el elemento `<appSettings>`, consulte los ejemplos del elemento `<appSettings>` en [Configuración de la aplicación de AWS SDK para .NET](net-dg-config.md).

**nota**  
Aunque puede continuar usando las siguientes propiedades de la clase [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) en un archivo de código para especificar la configuración de AWS, las siguientes propiedades están en desuso y es posible que no se admitan en versiones futuras:  
 `DynamoDBContextTableNamePrefix` 
 `EC2UseSignatureVersion4` 
 `LoggingOptions` 
 `LogMetrics` 
 `ResponseLoggingOption` 
 `S3UseSignatureVersion4` 
En general, recomendamos que, en lugar de usar propiedades de la clase `AWSConfigs` en un archivo de código para especificar la configuración de AWS, debe usar los elementos `<configSections>` y `<aws>` en un archivo `App.config` o `Web.config` para especificar la configuración de AWS, como se describe posteriormente en este tema. Para obtener más información sobre las propiedades anteriores, consulte los ejemplos de código de `AWSConfigs` en [Configuración de la aplicación de AWS SDK para .NET](net-dg-config.md).

**Topics**
+ [Declaración de una sección de configuración de AWS](#net-dg-config-ref-declaring)
+ [Elementos permitidos](#net-dg-config-ref-elements)
+ [Referencia de elementos](#net-dg-config-ref-elements-ref)

### Declaración de una sección de configuración de AWS
<a name="net-dg-config-ref-declaring"></a>

La configuración de AWS se especifica en un archivo `App.config` o `Web.config` desde el elemento `<aws>`. Antes de que pueda empezar a usar el elemento `<aws>`, debe crear un elemento `<section>` (que es un elemento secundario del elemento `<configSections>`) y establecer su atributo `name` en `aws` y su atributo `type` en `Amazon.AWSSection, AWSSDK.Core`, como se muestra en el siguiente ejemplo:

```
<?xml version="1.0"?>
<configuration>
  ...
  <configSections>
    <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/>
  </configSections>
  <aws>
    <!-- Add your desired AWS settings declarations here. -->
  </aws>
  ...
</configuration>
```

El editor de Visual Studio no proporciona relleno de código automático (IntelliSense) para el elemento `<aws>` o sus elementos secundarios.

Para ayudarle a crear una versión con formato correcto del elemento `<aws>`, llame al método `Amazon.AWSConfigs.GenerateConfigTemplate`. De este modo se devuelve una versión canónica del elemento `<aws>` como una cadena bien escrita, que puede adaptar a sus necesidades. En las siguientes secciones se describen los atributos y elementos secundarios del elemento `<aws>`.

### Elementos permitidos
<a name="net-dg-config-ref-elements"></a>

A continuación se muestra una lista de las relaciones lógicas entre los elementos permitidos en una sección de configuración de AWS. Puede generar la versión más reciente de esta lista llamando al método `Amazon.AWSConfigs.GenerateConfigTemplate`, que devuelve una versión canónica del elemento `<aws>` como una cadena que puede adaptar a sus necesidades.

```
<aws
  endpointDefinition="string value"
  region="string value"
  profileName="string value"
  profilesLocation="string value">
  <logging
    logTo="None, Log4Net, SystemDiagnostics"
    logResponses="Never | OnError | Always"
    logMetrics="true | false"
    logMetricsFormat="Standard | JSON"
    logMetricsCustomFormatter="NameSpace.Class, Assembly" />
  <dynamoDB
    conversionSchema="V1 | V2">
    <dynamoDBContext
      tableNamePrefix="string value">
      <tableAliases>
        <alias
          fromTable="string value"
          toTable="string value" />
      </tableAliases>
      <map
        type="NameSpace.Class, Assembly"
        targetTable="string value">
        <property
          name="string value"
          attribute="string value"
          ignore="true | false"
          version="true | false"
          converter="NameSpace.Class, Assembly" />
      </map>
    </dynamoDBContext>
  </dynamoDB>
  <s3
    useSignatureVersion4="true | false" />
  <ec2
    useSignatureVersion4="true | false" />
  <proxy
    host="string value"
    port="1234"
    username="string value"
    password="string value" />
</aws>
```

### Referencia de elementos
<a name="net-dg-config-ref-elements-ref"></a>

A continuación se muestra una lista de los elementos permitidos en una sección de configuración de AWS. Para cada elemento, se listan sus atributos y elementos principales y secundarios permitidos.

**Topics**
+ [alias](#net-dg-config-ref-elements-alias)
+ [`aws`](#net-dg-config-ref-elements-aws)
+ [dynamoDB](#net-dg-config-ref-elements-dynamodb)
+ [dynamoDBContext](#net-dg-config-ref-elements-ddbcontext)
+ [ec2](#net-dg-config-ref-elements-ec2)
+ [registrar](#net-dg-config-ref-elements-logging)
+ [map](#net-dg-config-ref-elements-map)
+ [propiedad](#net-dg-config-ref-elements-property)
+ [proxy](#net-dg-config-ref-elements-proxy)
+ [s3](#net-dg-config-ref-elements-s3)

#### alias
<a name="net-dg-config-ref-elements-alias"></a>

El elemento `<alias>` representa un solo elemento de una colección de uno o varios mapeos a la tabla y desde la tabla que especifica una tabla distinta de una configurada para un tipo. Este elemento se asigna a una instancia de la clase `Amazon.Util.TableAlias` a partir de la propiedad `Amazon.AWSConfigs.DynamoDBConfig.Context.TableAliases` en el AWS SDK para .NET. La reasignación se lleva a cabo antes de la aplicación de un prefijo de nombre de tabla.

Este elemento puede incluir los siguientes atributos:

** `fromTable` **  
La parte desde la tabla del mapeo a la tabla y desde la tabla. Este atributo se asigna a la propiedad `Amazon.Util.TableAlias.FromTable` en AWS SDK para .NET.

** `toTable` **  
La parte a la tabla de la asignación a la tabla y desde la tabla. Este atributo se asigna a la propiedad `Amazon.Util.TableAlias.ToTable` en AWS SDK para .NET.

El elemento principal del elemento `<alias>` es el elemento `<tableAliases>`.

El elemento `<alias>` no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento `<alias>` en uso:

```
<alias
  fromTable="Studio"
  toTable="Studios" />
```

#### `aws`
<a name="net-dg-config-ref-elements-aws"></a>

El elemento `<aws>` representa el elemento superior en una sección de configuración de AWS. Este elemento puede incluir los siguientes atributos:

** `endpointDefinition` **  
Ruta absoluta a un archivo de configuración personalizado que define las regiones y los puntos de conexión de AWS que se van a usar. Este atributo se asigna a la propiedad `Amazon.AWSConfigs.EndpointDefinition` en AWS SDK para .NET.

** `profileName` **  
Nombre de perfil de las credenciales de AWS almacenadas que se usarán para realizar llamadas a servicios. Este atributo se asigna a la propiedad `Amazon.AWSConfigs.AWSProfileName` en AWS SDK para .NET.

** `profilesLocation` **  
Ruta absoluta a la ubicación del archivo de credenciales compartido con otros AWS SDK. De forma predeterminada, el archivo de credenciales se almacena en el directorio `.aws` del directorio de inicio del usuario actual. Este atributo se asigna a la propiedad `Amazon.AWSConfigs.AWSProfilesLocation` en AWS SDK para .NET.

** `region` **  
ID de región de AWS predeterminado para clientes que no han especificado una región de forma explícita. Este atributo se asigna a la propiedad `Amazon.AWSConfigs.AWSRegion` en AWS SDK para .NET.

El elemento `<aws>` no tiene elemento principal.

El elemento `<aws>` puede incluir los siguientes elementos secundarios:
+  `<dynamoDB>` 
+  `<ec2>` 
+  `<logging>` 
+  `<proxy>` 
+  `<s3>` 

A continuación, mostramos un ejemplo del elemento `<aws>` en uso:

```
<aws
  endpointDefinition="C:\Configs\endpoints.xml"
  region="us-west-2"
  profileName="development"
  profilesLocation="C:\Configs">
  <!-- ... -->
</aws>
```

#### dynamoDB
<a name="net-dg-config-ref-elements-dynamodb"></a>

El elemento `<dynamoDB>` representa una colección de ajustes de Amazon DynamoDB. Este elemento puede incluir el atributo *conversionSchema*, que representa la versión que se va a usar para la conversión entre objetos de .NET y DynamoDB. Los valores permitidos son V1 y V2. Este atributo se asigna a la clase `Amazon.DynamoDBv2.DynamoDBEntryConversion` en AWS SDK para .NET. Para obtener más información, consulte [Serie DynamoDB: esquemas de conversión](http://blogs.aws.amazon.com/net/post/Tx2TCOGWG7ARUH5/DynamoDB-Series-Conversion-Schemas).

El elemento principal del elemento `<dynamoDB>` es el elemento `<aws>`.

El elemento `<dynamoDB>` puede incluir el elemento secundario `<dynamoDBContext>`.

A continuación, mostramos un ejemplo del elemento `<dynamoDB>` en uso:

```
<dynamoDB
  conversionSchema="V2">
  <!-- ... -->
</dynamoDB>
```

#### dynamoDBContext
<a name="net-dg-config-ref-elements-ddbcontext"></a>

El elemento `<dynamoDBContext>` representa una colección de ajustes específicos del contexto de Amazon DynamoDB. Este elemento puede incluir el atributo *tableNamePrefix*, que representa el prefijo de nombre de tabla predeterminado que usará el contexto de DynamoDB si no se configura manualmente. Este atributo se asigna a la propiedad `Amazon.Util.DynamoDBContextConfig.TableNamePrefix` a partir de la propiedad `Amazon.AWSConfigs.DynamoDBConfig.Context.TableNamePrefix` de AWS SDK para .NET. Para obtener más información, consulte la sección sobre las [mejoras realizadas en el SDK de DynamoDB](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK).

El elemento principal del elemento `<dynamoDBContext>` es el elemento `<dynamoDB>`.

El elemento `<dynamoDBContext>` puede incluir los siguientes elementos secundarios:
+  `<alias>` (una o varias instancias)
+  `<map>` (una o varias instancias)

A continuación, mostramos un ejemplo del elemento `<dynamoDBContext>` en uso:

```
<dynamoDBContext
  tableNamePrefix="Test-">
  <!-- ... -->
</dynamoDBContext>
```

#### ec2
<a name="net-dg-config-ref-elements-ec2"></a>

El elemento `<ec2>` representa una colección de ajustes de Amazon EC2. El elemento puede incluir el atributo *useSignatureVersion4*, que especifica si la versión 4 de Signature se usará para todas las solicitudes (true) o no (false, el valor predeterminado). Este atributo se asigna a la propiedad `Amazon.Util.EC2Config.UseSignatureVersion4` a partir de la propiedad `Amazon.AWSConfigs.EC2Config.UseSignatureVersion4` de AWS SDK para .NET.

El elemento principal del elemento `<ec2>` es el elemento.

El elemento `<ec2>` no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento `<ec2>` en uso:

```
<ec2
  useSignatureVersion4="true" />
```

#### registrar
<a name="net-dg-config-ref-elements-logging"></a>

El elemento `<logging>` representa una colección de ajustes para el registro de respuestas y el registro de métricas de desempeño. Este elemento puede incluir los siguientes atributos:

** `logMetrics` **  
Si las métricas de desempeño se van a registrar para todos los clientes y configuraciones (true); de lo contrario, false. Este atributo se asigna a la propiedad `Amazon.Util.LoggingConfig.LogMetrics` a partir de la propiedad `Amazon.AWSConfigs.LoggingConfig.LogMetrics` de AWS SDK para .NET.

** `logMetricsCustomFormatter` **  
Tipo de datos y nombre del ensamblado de un formateador personalizado para registrar métricas. Este atributo se asigna a la propiedad `Amazon.Util.LoggingConfig.LogMetricsCustomFormatter` a partir de la propiedad `Amazon.AWSConfigs.LoggingConfig.LogMetricsCustomFormatter` de AWS SDK para .NET.

** `logMetricsFormat` **  
Formato en que se presentan las métricas de registro (se asigna a la propiedad `Amazon.Util.LoggingConfig.LogMetricsFormat` a partir de la propiedad `Amazon.AWSConfigs.LoggingConfig.LogMetricsFormat` del AWS SDK para .NET).  
Entre los valores permitidos se incluyen:    
** `JSON` **  
Utilizar el formato JSON.  
** `Standard` **  
Utilizar el formato predeterminado.

** `logResponses` **  
Cuándo se deben registrar respuestas del servicio (se asigna a la propiedad `Amazon.Util.LoggingConfig.LogResponses` a partir de la propiedad `Amazon.AWSConfigs.LoggingConfig.LogResponses` en AWS SDK para .NET).  
Entre los valores permitidos se incluyen:    
** `Always` **  
Registrar siempre respuestas del servicio.  
** `Never` **  
No registrar nunca respuestas del servicio.  
** `OnError` **  
Registrar solo respuestas del servicio cuando haya errores.

** `logTo` **  
Dónde se deben registrar (se asigna a la propiedad `LogTo` a partir de la propiedad `Amazon.AWSConfigs.LoggingConfig.LogTo` en AWS SDK para .NET).  
Los valores permitidos incluyen una o varias de estas opciones:    
** `Log4Net` **  
Registrarse en log4net.  
** `None` **  
Deshabilitar el registro.  
** `SystemDiagnostics` **  
Registrarse en System.Diagnostics.

El elemento principal del elemento `<logging>` es el elemento `<aws>`.

El elemento `<logging>` no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento `<logging>` en uso:

```
<logging
  logTo="SystemDiagnostics"
  logResponses="OnError"
  logMetrics="true"
  logMetricsFormat="JSON"
  logMetricsCustomFormatter="MyLib.Util.MyMetricsFormatter, MyLib" />
```

#### map
<a name="net-dg-config-ref-elements-map"></a>

El elemento `<map>` representa un solo elemento de una colección de mapeos de tipo a tabla de tipos de .NET a tablas de DynamoDB (se asigna a una instancia de la clase `TypeMapping` a partir de la propiedad `Amazon.AWSConfigs.DynamoDBConfig.Context.TypeMappings` en AWS SDK para .NET). Para obtener más información, consulte la sección sobre las [mejoras realizadas en el SDK de DynamoDB](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK).

Este elemento puede incluir los siguientes atributos:

** `targetTable` **  
Tabla de DynamoDB a la que se aplica el mapeo. Este atributo se asigna a la propiedad `Amazon.Util.TypeMapping.TargetTable` en AWS SDK para .NET.

** `type` **  
Tipo y nombre del ensamblado al que se aplica el mapeo. Este atributo se asigna a la propiedad `Amazon.Util.TypeMapping.Type` en AWS SDK para .NET.

El elemento principal del elemento `<map>` es el elemento `<dynamoDBContext>`.

El elemento `<map>` puede incluir una o varias instancias del elemento secundario `<property>`.

A continuación, mostramos un ejemplo del elemento `<map>` en uso:

```
<map
  type="SampleApp.Models.Movie, SampleDLL"
  targetTable="Movies">
  <!-- ... -->
</map>
```

#### propiedad
<a name="net-dg-config-ref-elements-property"></a>

El elemento `<property>` representa una propiedad DynamoDB. (Este elemento se asigna a una instancia de la clase Amazon.Util.PropertyConfig a partir del método `AddProperty` en el AWS SDK para .NET). Para obtener más información, consulte las secciones sobre las [mejoras realizadas en el SDK de DynamoDB](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK) y los [atributos de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DeclarativeTagsList.html).

Este elemento puede incluir los siguientes atributos:

** `attribute` **  
Nombre de un atributo para la propiedad, como el nombre de una clave de rango. Este atributo se asigna a la propiedad `Amazon.Util.PropertyConfig.Attribute` en AWS SDK para .NET.

** `converter` **  
Tipo de convertidor que se debe usar para esta propiedad. Este atributo se asigna a la propiedad `Amazon.Util.PropertyConfig.Converter` en AWS SDK para .NET.

** `ignore` **  
Si debe hacerse caso omiso de la propiedad asociada (true); de lo contrario, false. Este atributo se asigna a la propiedad `Amazon.Util.PropertyConfig.Ignore` en AWS SDK para .NET.

** `name` **  
El nombre de la propiedad. Este atributo se asigna a la propiedad `Amazon.Util.PropertyConfig.Name` en AWS SDK para .NET.

** `version` **  
Si esta propiedad debe almacenar el número de versión del elemento (true); de lo contrario, false. Este atributo se asigna a la propiedad `Amazon.Util.PropertyConfig.Version` en AWS SDK para .NET.

El elemento principal del elemento `<property>` es el elemento `<map>`.

El elemento `<property>` no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento `<property>` en uso:

```
<property
  name="Rating"
  converter="SampleApp.Models.RatingConverter, SampleDLL" />
```

#### proxy
<a name="net-dg-config-ref-elements-proxy"></a>

El elemento `<proxy>` representa los ajustes para configurar un proxy que AWS SDK para .NET usará. Este elemento puede incluir los siguientes atributos:

**host**  
Nombre de host o dirección IP del servidor proxy. Estos atributos se asignan a la propiedad `Amazon.Util.ProxyConfig.Host` a partir de la propiedad `Amazon.AWSConfigs.ProxyConfig.Host` de AWS SDK para .NET.

**contraseña**  
Contraseña para autenticarse con el servidor proxy. Estos atributos se asignan a la propiedad `Amazon.Util.ProxyConfig.Password` a partir de la propiedad `Amazon.AWSConfigs.ProxyConfig.Password` de AWS SDK para .NET.

**puerto**  
Número de puerto del proxy. Estos atributos se asignan a la propiedad `Amazon.Util.ProxyConfig.Port` a partir de la propiedad `Amazon.AWSConfigs.ProxyConfig.Port` de AWS SDK para .NET.

**nombre de usuario**  
Nombre de usuario para autenticarse con el servidor proxy. Estos atributos se asignan a la propiedad `Amazon.Util.ProxyConfig.Username` a partir de la propiedad `Amazon.AWSConfigs.ProxyConfig.Username` de AWS SDK para .NET.

El elemento principal del elemento `<proxy>` es el elemento `<aws>`.

El elemento `<proxy>` no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento `<proxy>` en uso:

```
<proxy
  host="192.0.2.0"
  port="1234"
  username="My-Username-Here"
  password="My-Password-Here" />
```

#### s3
<a name="net-dg-config-ref-elements-s3"></a>

El elemento `<s3>` representa una colección de ajustes de Amazon S3. El elemento puede incluir el atributo *useSignatureVersion4*, que especifica si la versión 4 de Signature se usará para todas las solicitudes (true) o no (false, el valor predeterminado). Este atributo se asigna a la propiedad `Amazon.AWSConfigs.S3Config.UseSignatureVersion4` en AWS SDK para .NET.

El elemento principal del elemento `<s3>` es el elemento `<aws>`.

El elemento `<s3>` no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento `<s3>` en uso:

```
<s3 useSignatureVersion4="true" />
```

# Uso de credenciales heredadas
<a name="net-dg-legacy-creds"></a>

En los temas de esta sección se proporciona información sobre el uso de credenciales a corto o largo plazo sin usar AWS IAM Identity Center.

**aviso**  
Para evitar riesgos de seguridad, no utilice a los usuarios de IAM para la autenticación cuando desarrolle software especialmente diseñado o trabaje con datos reales. En cambio, utilice la federación con un proveedor de identidades como [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html).

**nota**  
La información de este tema se refiere a las circunstancias en las que necesita obtener y administrar credenciales a corto o largo plazo de forma manual. Para obtener información adicional sobre las credenciales a corto y largo plazo, consulte [Otras formas de autenticación](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html) en la *Guía de referencia de AWS SDKs and Tools*.  
Para conocer las mejores prácticas de seguridad AWS IAM Identity Center, utilícelas como se describe en[Configuración de la autenticación de SDK](creds-idc.md).

## Advertencias y directrices importantes para las credenciales
<a name="net-dg-config-creds-warnings-and-guidelines"></a>

**Advertencias para las credenciales**
+ ***NO*** utilices las credenciales raíz de tu cuenta para acceder a AWS los recursos. Estas credenciales proporcionan acceso ilimitado a la cuenta y son difíciles de revocar.
+ ***NO*** incluya claves de acceso literales ni información sobre credenciales en sus archivos de aplicación. Si lo hace, puede crear un riesgo de exposición accidental de sus credenciales si, por ejemplo, carga el proyecto en un repositorio público.
+ ***NO*** incluya archivos que contengan credenciales en el área del proyecto.
+ Tenga en cuenta que todas las credenciales almacenadas en el AWS `credentials` archivo compartido se almacenan en texto sin formato.

**Guía adicional para administrar las credenciales de forma segura**

Para obtener información general sobre cómo administrar las credenciales de forma segura, consulte AWS las credenciales de [AWS seguridad](https://docs.aws.amazon.com/general/latest/gr/Welcome.html#aws-security-credentials) en la Guía del usuario de IAM [Referencia general de AWS](https://docs.aws.amazon.com/general/latest/gr/)y las [prácticas recomendadas y los casos de uso de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) en la Guía del [usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/). Además de esas conversaciones, tenga en cuenta lo siguiente:
+ Cree usuarios adicionales, como los usuarios del Centro de identidades de IAM y utilice sus credenciales en lugar de las credenciales de usuario raíz de AWS . Las credenciales de otros usuarios se pueden revocar si es necesario o son de naturaleza temporal. Además, puede aplicar una política a cada usuario para acceder solo a determinados recursos y acciones y, por lo tanto, adoptar una política de permisos con privilegios mínimos.
+ Use [roles de IAM para tareas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) para tareas de Amazon Elastic Container Service (Amazon ECS).
+ Use [roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) para aplicaciones que se ejecutan en instancias de Amazon EC2.
+ Use [credenciales temporales](creds-assign.md#net-dg-config-creds-assign-role) o variables de entorno de aplicaciones disponibles para los usuarios ajenos a su organización.

**Topics**
+ [Advertencias y directrices importantes para las credenciales](#net-dg-config-creds-warnings-and-guidelines)
+ [Uso del archivo de AWS credenciales compartido](creds-file.md)
+ [Uso de SDK Store (solo Windows)](sdk-store.md)

# Uso del archivo de AWS credenciales compartido
<a name="creds-file"></a>

(Asegúrese de revisar las [advertencias y las directrices de credenciales importantes](net-dg-legacy-creds.md#net-dg-config-creds-warnings-and-guidelines)).

Una forma de proporcionar credenciales para las aplicaciones consiste en crear perfiles en el *archivo de credenciales de AWS compartido* y, a continuación, almacenar las credenciales en esos perfiles. Este archivo puede ser utilizado por el otro AWS SDKs. También lo pueden usar los [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/) AWS kits de herramientas de [Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/) y [VS Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/). [AWS Tools for Windows PowerShell[JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/)](https://docs.aws.amazon.com/powershell/latest/userguide/)

**aviso**  
Para evitar riesgos de seguridad, no utilice a los usuarios de IAM para la autenticación cuando desarrolle software especialmente diseñado o trabaje con datos reales. En cambio, utilice la federación con un proveedor de identidades como [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html).

**nota**  
La información de este tema se refiere a las circunstancias en las que necesita obtener y administrar credenciales a corto o largo plazo de forma manual. Para obtener información adicional sobre las credenciales a corto y largo plazo, consulte [Otras formas de autenticación](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html) en la Guía de *referencia de herramientas AWS SDKs y herramientas*.  
Para conocer las mejores prácticas de seguridad AWS IAM Identity Center, utilícelas como se describe en[Configuración de la autenticación de SDK](creds-idc.md).

## Información general
<a name="creds-file-general-info"></a>

De forma predeterminada, el archivo de AWS credenciales compartidas se encuentra en el `.aws` directorio de su directorio principal y tiene un nombre`credentials`, es decir, `~/.aws/credentials` (Linux o macOS) o `%USERPROFILE%\.aws\credentials` (Windows). Para obtener información sobre ubicaciones alternativas, consulte [Ubicación de los archivos compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html) en la *[Guía de referencia de herramientas AWS SDKs y herramientas](https://docs.aws.amazon.com/sdkref/latest/guide/overview.html)*. Consulte también [Acceso a las credenciales y perfiles en una aplicación](creds-locate.md).

El archivo de AWS credenciales compartidas es un archivo de texto sin formato y tiene un formato determinado. Para obtener información sobre el formato de los archivos de AWS credenciales, consulte [Formato del archivo de credenciales](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-creds) en la *Guía de referencia de AWS SDKs and Tools*.

Puede administrar los perfiles del archivo de AWS credenciales compartido de varias maneras.
+ Utilice cualquier editor de texto para crear y actualizar el archivo de AWS credenciales compartidas.
+ Utilice [Amazon.Runtime. CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)espacio de nombres de la AWS SDK para .NET API, como se muestra más adelante en este tema.
+ [Utilice comandos y procedimientos para los [Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html)AWS kits de herramientas de [Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html) y VS [JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-credentials.html)Code.](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-credentials.html)
+ Con comandos de [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html); por ejemplo, `aws configure set aws_access_key_id` y `aws configure set aws_secret_access_key`

## Ejemplos de administración de perfiles
<a name="creds-file-examples"></a>

En las siguientes secciones se muestran ejemplos de perfiles en el archivo de AWS credenciales compartidas. Algunos de los ejemplos muestran el resultado, que se puede obtener mediante cualquiera de los métodos de administración de credenciales mencionados anteriormente. En otros ejemplos se muestra cómo utilizar un método en particular.

### El perfil predeterminado.
<a name="creds-file-default"></a>

El archivo de AWS credenciales compartidas casi siempre tendrá un perfil denominado *default*. Aquí es donde AWS SDK para .NET busca las credenciales si no hay otros perfiles definidos.

El perfil `[default]` suele parecerse a lo siguiente.

```
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

### Creación de un perfil mediante programación
<a name="creds-file-create-programmatically"></a>

En este ejemplo, se muestra cómo crear un perfil y guardarlo en el archivo de AWS credenciales compartidas mediante programación. [Utiliza las siguientes clases de Amazon.Runtime. CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)espacio de nombres: [CredentialProfileOptions](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfileOptions.html), y. [CredentialProfile[SharedCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSharedCredentialsFile.html)](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)

```
using Amazon.Runtime.CredentialManagement;
...

// Do not include credentials in your code.
WriteProfile("my_new_profile", SecurelyStoredKeyID, SecurelyStoredSecretAccessKey);
...

void WriteProfile(string profileName, string keyId, string secret)
{
    Console.WriteLine($"Create the [{profileName}] profile...");
    var options = new CredentialProfileOptions
    {
        AccessKey = keyId,
        SecretKey = secret
    };
    var profile = new CredentialProfile(profileName, options);
    var sharedFile = new SharedCredentialsFile();
    sharedFile.RegisterProfile(profile);
}
```

**aviso**  
Por lo general, un código como este no debería estar en la aplicación. Si lo incluye en su aplicación, tome las debidas precauciones para garantizar que las claves de texto sin formato no puedan verse en el código, en la red o incluso en la memoria del ordenador.

Este es el perfil que se ha creado en este ejemplo.

```
[my_new_profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

### Actualización de un perfil existente mediante programación
<a name="creds-file-update-programmatically"></a>

En este ejemplo se muestra cómo actualizar mediante programación el perfil que creado anteriormente. [Utiliza las siguientes clases de Amazon.Runtime. CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)espacio de nombres: y. [CredentialProfile[SharedCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSharedCredentialsFile.html)](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html) También usa la [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html)clase del espacio de nombres [Amazon](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/N.html).

```
using Amazon.Runtime.CredentialManagement;
...

AddRegion("my_new_profile", RegionEndpoint.USWest2);
...

void AddRegion(string profileName, RegionEndpoint region)
{
    var sharedFile = new SharedCredentialsFile();
    CredentialProfile profile;
    if (sharedFile.TryGetProfile(profileName, out profile))
    {
        profile.Region = region;
        sharedFile.RegisterProfile(profile);
    }
}
```

A continuación se muestra el perfil actualizado.

```
[my_new_profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
region=us-west-2
```

**nota**  
También puede configurar la AWS región en otras ubicaciones y mediante otros métodos. Para obtener más información, consulte [Configuración de la región de AWS](net-dg-region-selection.md).

# Uso de SDK Store (solo Windows)
<a name="sdk-store"></a>

(Asegúrese de revisar las [advertencias y directrices importantes](net-dg-legacy-creds.md#net-dg-config-creds-warnings-and-guidelines)).

En Windows, la *tienda de SDK* es otro lugar para crear perfiles y almacenar credenciales cifradas para AWS SDK para .NET la aplicación. Está en `%USERPROFILE%\AppData\Local\AWSToolkit\RegisteredAccounts.json`. Puede usar SDK Store durante el desarrollo como alternativa al [archivo de credenciales de AWS compartido](creds-file.md).

**aviso**  
Para evitar riesgos de seguridad, no utilice a los usuarios de IAM para la autenticación cuando desarrolle software especialmente diseñado o trabaje con datos reales. En cambio, utilice la federación con un proveedor de identidades como [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html).

**nota**  
La información de este tema se refiere a las circunstancias en las que necesita obtener y administrar credenciales a corto o largo plazo de forma manual. Para obtener información adicional sobre las credenciales a corto y largo plazo, consulta [Otras formas de autenticación](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html) en la *Guía de referencia de herramientas AWS SDKs y herramientas*.  
Para conocer las mejores prácticas de seguridad AWS IAM Identity Center, utilícelas como se describe en[Configuración de la autenticación de SDK](creds-idc.md).

## Información general
<a name="sdk-store-general-info"></a>

SDK Store reporta las siguientes ventajas:
+ Las credenciales almacenadas en SDK Store se cifran, y SDK Store reside en el directorio de inicio del usuario. Esto limita el riesgo de exposición accidental de sus credenciales.
+ SDK Store también proporciona credenciales a [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/) y a [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/).

Los perfiles de SDK Store son específicos de un usuario determinado en un host concreto. No puede copiarlos en otros hosts ni en otros usuarios. Esto quiere decir que los perfiles de SDK Store que estén en su equipo de desarrollo no se pueden reutilizar en otros hosts o equipos de desarrollador. Esto significa también que no se pueden usar perfiles de SDK Store en aplicaciones de producción.

Los perfiles de SDK Store se pueden administrar de varias maneras:
+ Con la interfaz de usuario gráfica (GUI) del [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html)
+ Utilice [Amazon.Runtime. CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)espacio de nombres de la AWS SDK para .NET API, como se muestra más adelante en este tema.
+ Con comandos de [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html); por ejemplo, `Set-AWSCredential` y `Remove-AWSCredentialProfile`

## Ejemplos de administración de perfiles
<a name="sdk-store-examples"></a>

En los siguientes ejemplos se muestra cómo crear y actualizar un perfil mediante programación en SDK Store.

### Creación de un perfil mediante programación
<a name="sdk-store-create-programmatically"></a>

En este ejemplo se muestra cómo crear un perfil y guardarlo en SDK Store mediante programación. [Utiliza las siguientes clases de Amazon.Runtime. ](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)CredentialManagement[namespace: [CredentialProfileOptions](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfileOptions.html), [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)y Net File. SDKCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html)

```
using Amazon.Runtime.CredentialManagement;
...

// Do not include credentials in your code.
WriteProfile("my_new_profile", SecurelyStoredKeyID, SecurelyStoredSecretAccessKey);
...

void WriteProfile(string profileName, string keyId, string secret)
{
    Console.WriteLine($"Create the [{profileName}] profile...");
    var options = new CredentialProfileOptions
    {
        AccessKey = keyId,
        SecretKey = secret
    };
    var profile = new CredentialProfile(profileName, options);
    var netSdkStore = new NetSDKCredentialsFile();
    netSdkStore.RegisterProfile(profile);
}
```

**aviso**  
Por lo general, un código como este no debería estar en la aplicación. Si lo está, tome las debidas precauciones para garantizar que las claves de texto sin formato no puedan verse en el código, en la red o incluso en la memoria del ordenador.

Este es el perfil que se ha creado en este ejemplo.

```
"[generated GUID]" : {
    "AWSAccessKey" : "01000000D08...[etc., encrypted access key ID]",
    "AWSSecretKey" : "01000000D08...[etc., encrypted secret access key]",
    "ProfileType"  : "AWS",
    "DisplayName"  : "my_new_profile",
}
```

### Actualización de un perfil existente mediante programación
<a name="sdk-store-update-programmatically"></a>

En este ejemplo se muestra cómo actualizar mediante programación el perfil que creado anteriormente. [Utiliza las siguientes clases de Amazon.Runtime. ](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)CredentialManagement[namespace: [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)y Net File. SDKCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html) También usa la [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html)clase del espacio de nombres [Amazon](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/N.html).

```
using Amazon.Runtime.CredentialManagement;
...

AddRegion("my_new_profile", RegionEndpoint.USWest2);
...

void AddRegion(string profileName, RegionEndpoint region)
{
    var netSdkStore = new NetSDKCredentialsFile();
    CredentialProfile profile;
    if (netSdkStore.TryGetProfile(profileName, out profile))
    {
        profile.Region = region;
        netSdkStore.RegisterProfile(profile);
    }
}
```

A continuación se muestra el perfil actualizado.

```
"[generated GUID]" : {
    "AWSAccessKey" : "01000000D08...[etc., encrypted access key ID]",
    "AWSSecretKey" : "01000000D08...[etc., encrypted secret access key]",
    "ProfileType"  : "AWS",
    "DisplayName"  : "my_new_profile",
    "Region"       : "us-west-2"
}
```

**nota**  
También puede configurar la AWS región en otras ubicaciones y mediante otros métodos. Para obtener más información, consulte [Configuración de la región de AWS](net-dg-region-selection.md).