

 La [Guía de referencia de la API de AWS SDK for JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) describe en detalle todas las operaciones de la API para la versión 3 (V3) de AWS SDK for JavaScript. 

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.

# Configuración de credenciales
<a name="setting-credentials"></a>

AWS usa las credenciales para identificar quién llama a los servicios y si se permite el acceso a los recursos solicitados. 

Ya sea que se ejecute en un navegador web o en un servidor Node.js, el JavaScript código debe obtener credenciales válidas antes de poder acceder a los servicios a través de la API. Las credenciales se pueden configurar por servicio, por medio de la transferencia directa de las credenciales a un objeto de servicio.

Hay varias formas de configurar las credenciales que difieren entre Node.js y JavaScript en los navegadores web. En los temas de esta sección se describe cómo configurar credenciales en Node.js o en navegadores web. En cada caso, las opciones se presentan en el orden recomendado.

## Prácticas recomendadas para las credenciales
<a name="credentials-best-practices"></a>

Configurar correctamente las credenciales garantiza que su aplicación o script de navegador pueda obtener acceso a los servicios y los recursos necesarios y, al mismo tiempo, minimiza su exposición a problemas de seguridad que puedan repercutir en aplicaciones críticas o pongan en peligro información confidencial.

Cuando se configuran credenciales es importante aplicar siempre el principio de conceder el privilegio mínimo necesario para llevar a cabo la tarea. Es más seguro proporcionar permisos mínimos sobre sus recursos y añadir más permisos según sea necesario, en lugar de proporcionar permisos que superan el privilegio mínimo y luego tener que solucionar problemas de seguridad que puedan aparecer más tarde. Por ejemplo, a menos que necesite leer y escribir recursos individuales, como objetos en un bucket de Amazon S3 o una tabla de DynamoDB, establezca dichos permisos en solo lectura.

Para obtener más información sobre la concesión de privilegios mínimos, consulte la sección [Conceder privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) del tema de prácticas recomendadas de la *Guía del usuario de IAM*.

**Topics**
+ [Prácticas recomendadas para las credenciales](#credentials-best-practices)
+ [Configuración de credenciales en Node.js](setting-credentials-node.md)
+ [Configuración de credenciales en un navegador web](setting-credentials-browser.md)

# Configuración de credenciales en Node.js
<a name="setting-credentials-node"></a>

Recomendamos a los nuevos usuarios que se desarrollen localmente y que su empleador no les dé un método de autenticación para que lo configuren AWS IAM Identity Center. Para obtener más información, consulte [Autenticación del SDK con AWS](getting-your-credentials.md).

En Node.js hay varias formas de proporcionar sus credenciales al SDK. Algunas de ellas son más seguras y otras ofrecen más comodidad mientras se desarrolla una aplicación. Al obtener las credenciales en Node.js, sea especialmente cuidadoso si se basa en más de un origen como, por ejemplo, una variable de entorno y un archivo JSON que carga. Puede cambiar los permisos con los que se ejecuta su código sin darse cuenta de que se ha producido el cambio.

AWS SDK para JavaScript La versión 3 proporciona una cadena de proveedores de credenciales predeterminada en Node.js, por lo que no es necesario que proporciones un proveedor de credenciales de forma explícita. La [cadena de proveedores de credenciales](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain) predeterminada intenta resolver las credenciales de una variedad de fuentes diferentes con una prioridad determinada, hasta que una de las fuentes devuelva una credencial. [Puede encontrar la cadena de proveedores de credenciales del SDK para la versión 3 aquí. JavaScript ](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromnodeproviderchain)

## Cadena de proveedores de credenciales
<a name="credchain"></a>

Todos SDKs tienen una serie de sitios (o fuentes) que consultan para obtener credenciales válidas que puedan utilizarlas para realizar una solicitud a un. Servicio de AWS Una vez que se encuentran las credenciales válidas, se detiene la búsqueda. Esta búsqueda sistemática se denomina cadena predeterminada de proveedores de credenciales. 

Para cada paso de la cadena, hay diferentes maneras de establecer los valores. La configuración de los valores directamente en el código siempre tiene prioridad, seguida de la configuración como variables de entorno y, por último, en el AWS `config` archivo compartido. Para obtener más información, consulte [Prioridad de los ajustes](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#precedenceOfSettings) en la Guía de *referencia de herramientas AWS SDKs y herramientas*. 

La *guía de referencia de AWS SDKs and Tools* contiene información sobre los ajustes de configuración del SDK que utilizan todos AWS SDKs y los AWS CLI. Para obtener más información sobre cómo configurar el SDK a través del AWS `config` archivo compartido, consulte [Archivos de credenciales y configuración compartidos](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html). Para obtener más información sobre cómo configurar el SDK mediante la configuración de variables de entorno, consulte [Compatibilidad con variables de entorno](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html).

Para autenticarse AWS, AWS SDK para JavaScript comprueba los proveedores de credenciales en el orden que se indica en la siguiente tabla.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html)

Si siguió el enfoque recomendado para los nuevos usuarios para empezar, configuró la autenticación AWS Single Sign-On en [Autenticación del SDK con AWS](getting-your-credentials.md) del tema Introducción. Otros métodos de autenticación son útiles en diferentes situaciones. Para evitar riesgos de seguridad, recomendamos utilizar siempre credenciales a corto plazo. Para conocer otros procedimientos de métodos de autenticación, consulte [Autenticación y acceso](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) en la *Guía de referencia de herramientas AWS SDKs y herramientas*.

En los temas de esta sección se describe cómo cargar credenciales en Node.js.

**Topics**
+ [Cadena de proveedores de credenciales](#credchain)
+ [Carga de credenciales en Node.js desde roles de IAM para Amazon EC2](loading-node-credentials-iam.md)
+ [Credenciales de carga para una función de Lambda de Node.js](loading-node-credentials-lambda.md)

# Carga de credenciales en Node.js desde roles de IAM para Amazon EC2
<a name="loading-node-credentials-iam"></a>

Si ejecuta su aplicación de Node.js en una instancia de Amazon EC2, puede utilizar roles de IAM para Amazon EC2, para suministrar automáticamente credenciales a la instancia. Si configura la instancia para que utilice roles de IAM, el SDK selecciona automáticamente las credenciales de IAM para su aplicación, lo que elimina la necesidad de proporcionar las credenciales manualmente.

Para obtener más información sobre cómo añadir roles de IAM a una instancia de Amazon EC2, consulte [Roles de IAM para Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html).

# Credenciales de carga para una función de Lambda de Node.js
<a name="loading-node-credentials-lambda"></a>

Al crear una AWS Lambda función, debe crear una función de IAM especial que tenga permiso para ejecutar la función. Este rol se denomina el *rol de ejecución*. Cuando configura una función de Lambda, tiene que especificar el rol de IAM que ha creado como el rol de ejecución correspondiente.

El rol de ejecución proporciona a la función de Lambda las credenciales que necesita para ejecutarse y para invocar otros servicios web. Como resultado, no es necesario proporcionar credenciales al código Node.js que escribe dentro de una función de Lambda.

Para obtener más información sobre cómo crear un rol de ejecución de Lambda, consulte [Administración de permisos: usar un rol de IAM (rol de ejecución)](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role) en la *Guía para desarrolladores de Lambda*.

# Configuración de credenciales en un navegador web
<a name="setting-credentials-browser"></a>

Hay varias formas de proporcionar credenciales al SDK desde scripts de navegador. Algunas de ellas son más seguras y otras ofrecen más comodidad mientras se desarrolla un script.

 A continuación se muestran las formas de suministro de credenciales según su orden de recomendación:

1. Uso de Amazon Cognito para autenticar usuarios y suministrar credenciales

1. Uso de identidades federadas web

**aviso**  
No se recomienda codificar de forma rígida las credenciales de AWS en sus scripts. Si las codifica de forma rígida, corre el riesgo de que su ID de clave de acceso y la clave de acceso secreta queden expuestos.

**Topics**
+ [Uso de Amazon Cognito Identity para autenticar a los usuarios](loading-browser-credentials-cognito.md)

# Uso de Amazon Cognito Identity para autenticar a los usuarios
<a name="loading-browser-credentials-cognito"></a>

La forma recomendada de obtener credenciales de AWS para los scripts del navegador es utilizar el cliente de credenciales de Amazon Cognito Identity, `CognitoIdentityClient`. Amazon Cognito permite la autenticación de los usuarios a través de proveedores de identidad de terceros.

Para usar Amazon Cognito Identity, primero debe crear un grupo de identidades en la consola Amazon Cognito. Un grupo de identidades representa el grupo de identidades que su aplicación proporciona a los usuarios. Las identidades que se dan a los usuarios identifican de forma inequívoca cada cuenta de usuario. Las identidades de Amazon Cognito no son credenciales. Se intercambian por credenciales utilizando la compatibilidad con las identidades web federadas en AWS Security Token Service (AWS STS).

Amazon Cognito es útil para administrar la abstracción de identidades a través de varios proveedores de identidades. La identidad que se carga se intercambia por credenciales en AWS STS.

## Configuración del objeto de credenciales de Amazon Cognito Identity
<a name="browser-cognito-configuration"></a>

Si todavía no ha creado un grupo de identidades, cree uno para usarlo con los scripts de navegador en la [consola Amazon Cognito](https://console.aws.amazon.com/cognito) antes de configurar su cliente de Amazon Cognito. Cree y asocie roles de IAM autenticados y sin autenticar para su grupo de identidades. Para obtener más información, consulte [Tutorial: Crear un grupo de identidades](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-identity-pool.html) en la *Guía para desarrolladores de Amazon Cognito*.

La identidad de los usuarios sin autenticar no se verifica, lo que hace que este rol sea adecuado para los usuarios invitados de la aplicación o para cuando no importa si se ha verificado la identidad de los usuarios. Los usuarios autenticados inician sesión en la aplicación a través de un proveedor de identidades externo que verifica sus identidades. Asegúrese de asignar los permisos de los recursos de forma adecuada, para no conceder acceso a ellos a los usuarios no autenticados.

Tras configurar un grupo de identidades, utilice el método `fromCognitoIdentityPool` de `@aws-sdk/credential-providers` para recuperar las credenciales del grupo de identidades. En el siguiente ejemplo de creación de un cliente de Amazon S3, sustituya *AWS\$1REGION* por la región y *IDENTITY\$1POOL\$1ID* por el ID del grupo de identidades.

```
// Import required AWS SDK clients and command for Node.js
import {S3Client} from "@aws-sdk/client-s3";
import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers";

const REGION = AWS_REGION;

const s3Client = new S3Client({
  region: REGION,
  credentials: fromCognitoIdentityPool({
    clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient.
    identityPoolId: 'IDENTITY_POOL_ID',
    logins: {
            // Optional tokens, used for authenticated login.
        },
  })
});
```

La propiedad opcional `logins` es un mapeo entre los nombres de los proveedores de identidad y los tokens de identidad de los proveedores. La forma de obtener el token del proveedor de identidad depende del proveedor que se utilice. Por ejemplo, si utiliza un grupo de usuarios de Amazon Cognito como proveedor de autenticación, puede utilizar un método similar al que se muestra a continuación.

```
// Get the Amazon Cognito ID token for the user. 'getToken()' below.
let idToken = getToken();
let COGNITO_ID = "COGNITO_ID"; // 'COGNITO_ID' has the format 'cognito-idp.REGION.amazonaws.com/COGNITO_USER_POOL_ID'
let loginData = {
  [COGNITO_ID]: idToken,
};
const s3Client = new S3Client({
    region: REGION,
    credentials: fromCognitoIdentityPool({
    clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient.
    identityPoolId: 'IDENTITY_POOL_ID',
    logins: loginData
  })
});

// Strips the token ID from the URL after authentication.
window.getToken = function () {
  var idtoken = window.location.href;
  var idtoken1 = idtoken.split("=")[1];
  var idtoken2 = idtoken1.split("&")[0];
  var idtoken3 = idtoken2.split("&")[0];
  return idtoken3;
};
```

## Cambio de usuarios sin autenticar a usuarios autenticados
<a name="browser-switching-unauthenticated-users"></a>

Amazon Cognito es compatible con los usuarios autenticados y no autenticados. Los usuarios sin autenticar reciben acceso a sus recursos incluso si no han iniciado sesión con alguno de sus proveedores de identidades. Este grado de acceso es útil para mostrar contenido a usuarios antes de que inicien sesión. Cada usuario sin autenticar tiene una identidad única en Amazon Cognito, aunque no haya iniciado sesión ni se haya autenticado individualmente.

### Usuario sin autenticar inicialmente
<a name="browser-initially-unauthenticated-user"></a>

Los usuarios suelen comenzar con el rol sin autenticar, para el que se establece la propiedad de credenciales de su objeto de configuración sin una propiedad `logins`. En este caso, las credenciales predeterminadas podrían tener el siguiente aspecto:

```
// Import the required AWS SDK para JavaScript v3 modules.                   
import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers";
// Set the default credentials.
const creds = fromCognitoIdentityPool({
  identityPoolId: 'IDENTITY_POOL_ID',
  clientConfig: { region: REGION } // Configure the underlying CognitoIdentityClient.
});
```

### Cambie a usuario autenticado
<a name="switch-to-authenticated"></a>

Cuando un usuario sin autenticar inicia sesión en un proveedor de identidades y tiene un token, puede cambiar el usuario de no estar autenticado a estar autenticado llamando a una función personalizada que actualiza el objeto de credenciales y añade el token `logins`.

```
// Called when an identity provider has a token for a logged in user
function userLoggedIn(providerName, token) {
  creds.params.Logins = creds.params.logins || {};
  creds.params.Logins[providerName] = token;
                    
  // Expire credentials to refresh them on the next request
  creds.expired = true;
}
```