Ler credenciais de perfil do IAM no Amazon EC2 usando o SDK para Java 2.x - AWS SDK for Java 2.x

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

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

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

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

Por padrão, as instâncias do EC2 executam o IMDS (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 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 detrue.

  • 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 comotrue, o SDK não carrega as credenciais da função IMDS usando IMDSv1 se a chamada inicial IMDSv2 falhar.