

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á.

# Provedores de credenciais
<a name="credential-providers"></a>

****  
**A ordem na qual a cadeia de provedores de credenciais padrão resolve as credenciais foi alterada com a versão 1.4.0. Para obter detalhes, consulte a nota abaixo.**

Quando você envia solicitações para a Amazon Web Services usando o AWS SDK para Kotlin, as solicitações devem ser assinadas criptograficamente com credenciais emitidas por. AWS O Kotlin SDK assina a solicitação automaticamente para você. Para adquirir as credenciais, o SDK pode usar definições de configuração que estão localizadas em vários lugares, por exemplo, propriedades do sistema JVM, variáveis de ambiente, `credentials` arquivos compartilhados AWS `config` e metadados de instâncias do Amazon EC2.

O SDK usa a abstração do *provedor de credenciais* para simplificar o processo de recuperação de credenciais de várias fontes. O SDK contém [várias implementações de provedores de credenciais.](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/aws-config/aws.sdk.kotlin.runtime.auth.credentials/index.html)

Por exemplo, se a configuração recuperada incluir configurações de acesso de login único do IAM Identity Center do `config` arquivo compartilhado, o SDK trabalhará com o IAM Identity Center para recuperar as credenciais temporárias que ele usa para fazer solicitações. Serviços da AWS Com essa abordagem de aquisição de credenciais, o SDK usa o provedor do IAM Identity Center (também conhecido como provedor de credenciais de SSO). A [seção de configuração](setup-basic-onetime-setup.md#setup-sso-access) deste guia descreveu essa configuração.

Para usar um provedor de credenciais específico, você pode especificar um ao criar um cliente de serviço. Como alternativa, você pode usar a cadeia de provedores de credenciais padrão para pesquisar as configurações automaticamente.

## A cadeia de fornecedores de credenciais padrão
<a name="default-credential-provider-chain"></a>

Quando não especificado explicitamente na construção do cliente, o SDK para Kotlin usa um provedor de credenciais que verifica sequencialmente cada local onde você pode fornecer credenciais. Esse provedor de credenciais padrão é implementado como uma cadeia de provedores de credenciais.

Para usar a cadeia padrão para fornecer credenciais em seu aplicativo, crie um cliente de serviço sem fornecer explicitamente uma `credentialsProvider` propriedade.

```
val ddb = DynamoDbClient {
    region = "us-east-2"
}
```

Para obter mais informações sobre a criação de clientes de serviço, consulte [construir e configurar um cliente](creating-clients.md).

### Saiba mais sobre a cadeia de fornecedores de credenciais padrão
<a name="default-credentials-retrieval-order"></a>

A cadeia de provedores de credenciais padrão pesquisa a configuração de credenciais usando a seguinte sequência predefinida. Quando as configurações definidas fornecem credenciais válidas, a cadeia é interrompida.

**1. [AWS chaves de acesso (propriedades do sistema JVM)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
O SDK procura as propriedades do sistema`aws.accessKeyId`,`aws.secretAccessKey`, e `aws.sessionToken` JVM.

**2. [AWS chaves de acesso (variáveis de ambiente)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
O SDK tenta carregar credenciais das variáveis de ambiente `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` e `AWS_SESSION_TOKEN`.

**3. [Token de identidade da Web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html)**  
O SDK procura as variáveis de ambiente `AWS_WEB_IDENTITY_TOKEN_FILE` e `AWS_ROLE_ARN` (ou as propriedades `aws.webIdentityTokenFile` do sistema JVM e). `aws.roleArn` Com base nas informações do token e na função, o SDK adquire credenciais temporárias.

**4. [Um perfil em um arquivo de configuração](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)**  
Nesta etapa, o SDK usa configurações associadas a um perfil. Por padrão, o SDK usa o compartilhado AWS `config` e os `credentials` arquivos, mas se a variável de `AWS_CONFIG_FILE` ambiente estiver definida, o SDK usará esse valor. Se a variável de `AWS_PROFILE` ambiente (ou propriedade do sistema `aws.profile` JVM) *não* estiver definida, o SDK procurará o perfil “padrão”, caso contrário, procurará o perfil que corresponde ao valor. `AWS_PROFILE’s`   
O SDK procura o perfil com base na configuração descrita no parágrafo anterior e usa as configurações definidas lá. Se as configurações encontradas pelo SDK contiverem uma combinação de configurações para diferentes abordagens de provedores de credenciais, o SDK usará a seguinte ordem:  

1. [AWS chaves de acesso (arquivo de configuração)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html) - O SDK usa as configurações para `aws_access_key_id``aws_access_key_id`, e. `aws_session_token`

1. [Assumir a configuração da função](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role.html) - se o SDK encontrar `role_arn` `source_profile` e/ou `credential_source` configurações, ele tentará assumir uma função. Se o SDK encontrar a `source_profile` configuração, ele obterá credenciais de outro perfil para receber credenciais temporárias para a função especificada por. `role_arn` Se o SDK encontrar a `credential_source` configuração, ele obterá as credenciais de um contêiner do Amazon ECS, de uma instância do Amazon EC2 ou de variáveis de ambiente, dependendo do valor da configuração. `credential_source` Em seguida, ele usa essas credenciais para adquirir credenciais temporárias para a função.

   Um perfil deve conter a `source_profile` configuração ou a `credential_source` configuração, mas não ambas.

1. [Configuração do token de identidade da Web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html) - Se o SDK encontrar `role_arn` e `web_identity_token_file` configurar, ele adquire credenciais temporárias para acessar AWS recursos com base no `role_arn` e no token.

1. [Configuração do token SSO](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) — se o SDK encontrar `sso_role_name` as configurações`sso_session`,`sso_account_id`, (junto com uma `sso-session` seção complementar nos arquivos de configuração), o SDK recuperará credenciais temporárias do serviço IAM Identity Center.

1. [Configuração de SSO herdada](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) — se o SDK encontrar` sso_start_url`,`sso_region`, e `sso_role_name` definir`sso_account_id`, o SDK recuperará credenciais temporárias do serviço IAM Identity Center.

1. [Configuração de login](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) - Se o SDK encontrar uma `login_session` configuração, ele usará as credenciais temporárias da sessão de login ou tentará atualizá-las se elas expirarem em menos de 5 minutos. Para saber como iniciar uma sessão de login, consulte o guia do [usuário da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html).

1. [Configuração do processo](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html): se o SDK encontrar uma `credential_process` configuração, ele usa o valor do caminho para invocar um processo e adquirir credenciais temporárias.

**5. [Credenciais do contêiner](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)**  
O SDK procura variáveis de ambiente `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` ou `AWS_CONTAINER_CREDENTIALS_FULL_URI` e `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` ou`AWS_CONTAINER_AUTHORIZATION_TOKEN`. Ele usa esses valores para carregar credenciais do endpoint HTTP especificado por meio de uma solicitação GET. 

**6. [Credenciais IMDS](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html)**  
O SDK tenta buscar credenciais do [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) no endpoint HTTP padrão ou configurado. O SDK só oferece suporte [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html).

Se as credenciais ainda não forem resolvidas neste momento, a criação do cliente falhará com uma exceção.

**Nota: Alteração na ordem de resolução de credenciais**  
A ordenação da resolução de credenciais descrita acima é atual para o `1.4.x+` lançamento do SDK para Kotlin. Antes do `1.4.0` lançamento, os itens número 3 e 4 foram trocados e o item 4a atual seguiu o item 4g atual.

## Especifique um provedor de credenciais
<a name="explicit-credential-provider"></a>

Você pode especificar um provedor de credenciais em vez de usar a cadeia de fornecedores padrão. Essa abordagem oferece controle direto sobre quais credenciais o SDK usa.

Por exemplo, para usar as credenciais de uma função presumida do IAM, especifique um `StsAssumeRoleCredentialsProvider` ao criar o cliente:

```
val ddb = DynamoDbClient {
    region = "us-east-1"
    credentialsProvider = StsAssumeRoleCredentialsProvider()
}
```

Você também pode criar uma cadeia personalizada (`CredentialsProviderChain`) que combina vários fornecedores em seu pedido preferido.

### Credenciais de cache com um provedor autônomo
<a name="credentials-caching"></a>

**Importante**  
A cadeia padrão armazena as credenciais em cache automaticamente. Provedores autônomos não armazenam credenciais em cache. Para evitar a busca de credenciais em cada chamada de API, envolva seu provedor com um. `CachedCredentialsProvider` O provedor em cache busca novas credenciais somente quando as atuais expiram.

Para armazenar credenciais em cache com um provedor independente, use a `CachedCredentialsProvider` classe:

```
val ddb = DynamoDbClient {
     region = "us-east-1"
     credentialsProvider = CachedCredentialsProvider(StsAssumeRoleCredentialsProvider())
 }
```

 Como alternativa, use a função `cached()` de extensão para obter um código mais conciso:

```
val ddb = DynamoDbClient {
      region = "us-east-1"
      credentialsProvider = StsAssumeRoleCredentialsProvider().cached()
 }
```