

 O [Guia de referência da API do AWS SDK para JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) descreve em detalhes todas as operações da API para o AWS SDK para JavaScript versão 3 (V3). 

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Definir credenciais
<a name="setting-credentials"></a>

AWS usa credenciais para identificar quem está ligando para os serviços e se o acesso aos recursos solicitados é permitido. 

Seja em execução em um navegador da Web ou em um servidor Node.js, seu JavaScript código deve obter credenciais válidas antes de poder acessar os serviços por meio da API. As credenciais podem ser definidas por serviço, passando credenciais diretamente para um objeto de serviço.

Há várias maneiras de definir credenciais que diferem entre o Node.js e JavaScript nos navegadores da Web. Os tópicos nesta seção descrevem como definir credenciais em Node.js ou navegadores da web. Em cada caso, as opções são apresentadas na ordem recomendada.

## Melhores práticas para credenciais
<a name="credentials-best-practices"></a>

A definição de credenciais apropriada garante que o aplicativo ou o script de navegador possa acessar os serviços e os recursos necessários ao mesmo tempo que minimiza a exposição a problemas de segurança que possam afetar aplicativos de missão crítica ou comprometer dados confidenciais.

Um princípio importante a ser aplicado durante a definição de credenciais é sempre conceder o menor privilégio necessário para a tarefa. É mais seguro fornecer permissões mínimas nos recursos e adicionar mais permissões adicionais conforme necessário, em vez de fornecer permissões que excedam o menor privilégio e, dessa forma, precisar corrigir problemas de segurança que possam ser descobertos depois. Por exemplo, a menos que você precise ler e gravar recursos individuais, como objetos em um bucket do Amazon S3 ou uma tabela do DynamoDB, defina essas permissões como somente leitura.

Para obter mais informações sobre como conceder o privilégio mínimo, consulte a seção [Conceder privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) do tópico Melhores práticas no *Guia do usuário do IAM*.

**Topics**
+ [Melhores práticas para credenciais](#credentials-best-practices)
+ [Definir credenciais no Node.js](setting-credentials-node.md)
+ [Definir credenciais em um navegador da web](setting-credentials-browser.md)

# Definir credenciais no Node.js
<a name="setting-credentials-node"></a>

Recomendamos que novos usuários que estejam se desenvolvendo localmente e que não recebam um método de autenticação do empregador se configurem Centro de Identidade do AWS IAM. Para obter mais informações, consulte [Autenticação do SDK com AWS](getting-your-credentials.md).

Há várias maneiras em Node.js de fornecer as credenciais para o SDK. Algumas dessas são mais seguras e outras oferecem mais comodidade durante o desenvolvimento de aplicativos. Ao obter credenciais em Node.js, tome cuidado ao confiar em mais de uma origem, como uma variável de ambiente e um arquivo JSON carregado. Altere as permissões em que o código é executado sem perceber a alteração que aconteceu.

AWS SDK para JavaScript A V3 fornece uma cadeia de provedores de credenciais padrão no Node.js, portanto, você não precisa fornecer um provedor de credenciais explicitamente. A [cadeia de fornecedores de credenciais](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain) padrão tenta resolver as credenciais de várias fontes diferentes em uma determinada precedência, até que uma credencial seja retornada de uma das fontes. [Você pode encontrar a cadeia de fornecedores de credenciais do SDK for JavaScript V3 aqui.](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromnodeproviderchain)

## Cadeia de provedores de credenciais
<a name="credchain"></a>

Todos SDKs têm uma série de locais (ou fontes) que eles verificam para obter credenciais válidas para usar para fazer uma solicitação a um AWS service (Serviço da AWS). Depois que as credenciais válidas são encontradas, a pesquisa é interrompida. Essa busca sistemática é chamada de cadeia de provedores de credenciais padrão. 

Para cada etapa da cadeia, há várias maneiras de atribuir os valores. A definição de valores diretamente no código sempre tem precedência, seguida pela configuração como variáveis de ambiente e, em seguida, no AWS `config` arquivo compartilhado. Para obter mais informações, consulte [Precedência de configurações](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#precedenceOfSettings) no *Guia AWS SDKs de referência de ferramentas*. 

O *Guia de Referência de Ferramentas AWS SDKs e Ferramentas* tem informações sobre as configurações do SDK usadas por todos AWS SDKs e pelo AWS CLI. Para saber mais sobre como configurar o SDK por meio do AWS `config` arquivo compartilhado, consulte Arquivos de [configuração e credenciais compartilhados](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html). Para saber mais sobre como configurar o SDK por meio da definição de variáveis de ambiente, consulte [Suporte a variáveis de ambiente](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html).

Para se autenticar AWS, ele AWS SDK para JavaScript verifica os provedores de credenciais na ordem listada na tabela a seguir.

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

Se você seguiu a abordagem recomendada para novos usuários começarem, configurou a autenticação do Centro de Identidade do AWS IAM durante a [Autenticação do SDK com AWS](getting-your-credentials.md) do tópico Conceitos básicos. Outros métodos de autenticação são úteis para situações diferentes. Para evitar riscos de segurança, recomendamos sempre usar credenciais de curto prazo. Para outros procedimentos de método de autenticação, consulte [Autenticação e acesso](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) no *AWS SDKs Guia de referência de ferramentas*.

Os tópicos nesta seção descrevem como carregar credenciais em Node.js.

**Topics**
+ [Cadeia de provedores de credenciais](#credchain)
+ [Carregar credenciais de perfis do IAM no Node.js para o Amazon EC2](loading-node-credentials-iam.md)
+ [Carregar credenciais de uma função do Lambda do Node.js](loading-node-credentials-lambda.md)

# Carregar credenciais de perfis do IAM no Node.js para o Amazon EC2
<a name="loading-node-credentials-iam"></a>

Se executar o aplicativo Node.js em uma instância do Amazon EC2, você poderá aproveitar perfis do IAM para o Amazon EC2 fornecer credenciais automaticamente para a instância. Se você configurar a instância para usar perfis do IAM, o SDK selecionará automaticamente as credenciais do IAM do aplicativo, eliminando a necessidade de fornecer credenciais manualmente.

Para obter mais informações sobre como adicionar perfis do IAM a uma instância do Amazon EC2, consulte [perfis do IAM para o Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html).

# Carregar credenciais de uma função do Lambda do Node.js
<a name="loading-node-credentials-lambda"></a>

Ao criar uma AWS Lambda função, você deve criar uma função especial do IAM que tenha permissão para executar a função. Essa função é chamada de *função de execução*. Ao configurar uma função do Lambda, você deve especificar o perfil do IAM que criou como a função de execução correspondente.

A função de execução fornece a função do Lambda com as credenciais de que precisa para executar e invocar outros serviços da Web. Dessa maneira, você não precisa fornecer credenciais para o código Node.js gravado em uma função do Lambda.

Para obter mais informações sobre como criar uma função de execução do Lambda, consulte [Gerenciar permissões: usar um perfil do IAM (função de execução)](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role) no *Guia do desenvolvedor do AWS Lambda *.

# Definir credenciais em um navegador da web
<a name="setting-credentials-browser"></a>

Há várias maneiras de fornecer as credenciais para o SDK de scripts de navegador. Algumas dessas são mais seguras e outras oferecem mais comodidade durante o desenvolvimento de scripts.

 Aqui estão as maneiras como é possível fornecer as credenciais em ordem de recomendação:

1. Usar o Amazon Cognito Identity para autenticar usuários e fornecer credenciais

1. Usar identidade federada da web

**Atenção**  
Não recomendamos fazer uma codificação rígida das credenciais da AWS nos scripts. A codificação rígida de credenciais oferece um risco de expor o ID de chave de acesso e a chave de acesso secreta.

**Topics**
+ [Usar o Amazon Cognito Identity para autenticar usuários](loading-browser-credentials-cognito.md)

# Usar o Amazon Cognito Identity para autenticar usuários
<a name="loading-browser-credentials-cognito"></a>

A forma recomendada de obter credenciais da AWS para os scripts do seu navegador é usar o cliente de credenciais do Amazon Cognito Identity, `CognitoIdentityClient`. O Amazon Cognito permite a autenticação de usuários por meio de provedores de identidade terceirizados.

Para usar o Amazon Cognito Identity, você deve primeiro criar um banco de identidades no console do Amazon Cognito. Um grupo de identidades representa o grupo de identidades fornecido pelo aplicativo para os usuários. As identidades atribuídas a usuários identificam com exclusividade cada conta de usuário. As identidades do Amazon Cognito não são credenciais. Elas são trocadas por credenciais usando o suporte à federação de identidades da web no AWS Security Token Service (AWS STS).

O Amazon Cognito ajuda a gerenciar a abstração de identidades entre vários provedores de identidade. A identidade carregada acaba sendo trocada por credenciais no AWS STS.

## Configurar o objeto de credenciais do Amazon Cognito Identity
<a name="browser-cognito-configuration"></a>

Se você ainda não tiver criado um, crie um banco de identidades para usar com os scripts do navegador no [console do Amazon Cognito](https://console.aws.amazon.com/cognito) antes de configurar o cliente do Amazon Cognito. Crie e associe os perfis do IAM autenticados e não autenticados para o banco de identidades. Para obter mais informações, consulte [Tutorial: criação de um banco de identidades](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-identity-pool.html) no *Guia do desenvolvedor do Amazon Cognito*.

Usuários não autenticados não têm a identidade verificada, tornando esse perfil apropriado para usuários convidados de seu aplicativo ou nos casos em que não importa se os usuários têm suas identidades verificadas. Os usuários autenticados fazem login no aplicativo por meio de um provedor de identidade de terceiros que verifica as identidades. Certifique-se de definir o escopo das permissões dos recursos de forma apropriada para que você não conceda acesso a eles a partir de usuários não autenticados.

Depois de configurar um banco de identidades, use o método `fromCognitoIdentityPool` do `@aws-sdk/credential-providers` para recuperar as credenciais do banco de identidades. No exemplo a seguir de criação de um cliente do Amazon S3, substitua *AWS\$1REGION* pela região e *IDENTITY\$1POOL\$1ID* pelo ID do banco 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.
        },
  })
});
```

A propriedade opcional `logins` é um mapa de nomes de provedor de identidade para os tokens de identidade para esses provedores. Como você obtém o token do seu provedor de identidade depende do provedor que usa. Por exemplo, se você estiver usando um grupo de usuários do Amazon Cognito como seu provedor de autenticação, poderá usar um método semelhante ao descrito abaixo.

```
// 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;
};
```

## Alternar entre usuários não autenticados e usuários autenticados
<a name="browser-switching-unauthenticated-users"></a>

O Amazon Cognito é compatível com usuários autenticados e não autenticados. Os usuários não autenticados receberão acesso aos recursos se eles não estiverem conectados a nenhum dos provedores de identidade. Esse nível de acesso é útil para exibir conteúdo para usuários antes de fazer login. Cada usuário não autenticado tem uma identidade exclusiva no Amazon Cognito, mesmo que não tenha feito login e sido autenticado individualmente.

### Usuário não autenticado inicialmente
<a name="browser-initially-unauthenticated-user"></a>

Os usuários normalmente começam com a função não autenticada para a qual você define a propriedade de credenciais do objeto de configuração sem uma propriedade `logins`. Neste caso, suas credenciais padrão podem parecer com o seguinte:

```
// 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.
});
```

### Mudar para usuário autenticado
<a name="switch-to-authenticated"></a>

Quando um usuário autenticado faz login em um provedor de identidade e você tem um token, é possível alternar o usuário de não autenticado para autenticado chamando uma função personalizada que atualiza o objeto de credenciais e adiciona o 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;
}
```