

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

# Ler credenciais de perfil do IAM no Amazon EC2 usando o SDK para Java 2.x
<a name="ec2-iam-roles"></a>

 Você pode usar uma função do IAM para gerenciar credenciais temporárias para aplicativos que estão sendo executados em uma instância do EC2 e fazendo solicitações AWS CLI de AWS API. É preferível fazer isso a armazenar chaves de acesso na instância do EC2. Para atribuir uma AWS função a uma instância do EC2 e disponibilizá-la para todos os seus aplicativos, você cria um perfil de instância anexado à instância. Um perfil de instância contém o perfil e permite que os programas em execução na instância do EC2 obtenham credenciais temporárias. Para mais informações, consulte [Utilizar um perfil do IAM para conceder permissões a aplicações em execução nas instâncias do Amazon EC2](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html) no *Guia do usuário do IAM*. 

Este tópico fornece informações sobre como configurar seu aplicativo Java para ser executado em uma instância do EC2 e permitir que o AWS SDK for Java 2.x adquira credenciais de IAM função.

## Adquirir credenciais de perfil do IAM do ambiente
<a name="default-provider-chain"></a>

Se seu aplicativo criar um cliente AWS de serviço usando o `create` método (ou `builder().build()` métodos), o SDK for Java usará *a cadeia de fornecedores de credenciais padrão*. A cadeia de provedores de credenciais padrão pesquisa no ambiente de execução os elementos de configuração que o SDK pode trocar por credenciais temporárias. A seção [Cadeia de provedores de credenciais padrão no AWS SDK for Java 2.x](credentials-chain.md) descreve o processo completo de pesquisa.

A etapa final na cadeia de fornecedores padrão está disponível somente quando seu aplicativo é executado em uma Amazon EC2 instância. Nesta etapa, o SDK usa um `InstanceProfileCredentialsProvider` para ler o perfil do IAM definido no perfil da instância do EC2. Depois, o SDK adquire credenciais temporárias para esse perfil do IAM.

Embora essas credenciais sejam temporárias e acabem expirando, o `InstanceProfileCredentialsProvider` as atualiza periodicamente para você, de maneira que elas continuem permitindo o acesso à AWS.

## Adquirir credenciais de perfil do IAM programaticamente
<a name="programmatic-configuration-for-IAM-role"></a>

Como alternativa à cadeia de provedores de credenciais padrão que eventualmente usa um `InstanceProfileCredentialsProvider` no EC2, você pode configurar um cliente de serviço explicitamente com um `InstanceProfileCredentialsProvider`. Essa abordagem é mostrada no trecho a seguir.

```
S3Client s3 = S3Client.builder()
       .credentialsProvider(InstanceProfileCredentialsProvider.create())
       .build();
```

## Adquirir com segurança as credenciais de perfil do IAM
<a name="securely-read-IAM-role_credentials"></a>

Por padrão, as instâncias do EC2 executam o [IMDS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) (Instance Metadata Service), que permite que o `InstanceProfileCredentialsProvider` do SDK acesse informações como o perfil do IAM que foi configurado. As instâncias do EC2 executam duas versões do IMDS por padrão:
+ Instance Metadata Service versão 1 (IMDSv1) — um método request/response 
+ Instance Metadata Service versão 2 (IMDSv2) — um método orientado a sessões

[IMDSv2 é uma abordagem mais segura](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/) do que IMDSv1.

Por padrão, o Java SDK primeiro tenta obter IMDSv2 a função do IAM, mas se isso falhar, ele tenta IMDSv1. No entanto, como IMDSv1 é menos seguro, AWS recomenda o uso de IMDSv2 somente e desabilitar o SDK de tentar IMDSv1. 

Para usar a abordagem mais segura, desative o uso do SDK IMDSv1 fornecendo uma das configurações a seguir com um valor de`true`.
+ Variável de ambiente: `AWS_EC2_METADATA_V1_DISABLED`
+ Propriedade do sistema de JVM: aws.`disableEc2MetadataV1`
+ Configuração do arquivo de configuração compartilhado: `ec2_metadata_v1_disabled`

Com uma dessas configurações definida como`true`, o SDK não carrega as credenciais da função IMDS usando IMDSv1 se a chamada inicial IMDSv2 falhar.