Ir para o conteúdo

Como resolvo o erro "The security token included in the request is expired" quando executo aplicações Java no Amazon EC2?

6 minuto de leitura
0

Minhas aplicações Java usam o AWS SDK para Java na minha instância Amazon Elastic Compute Cloud (Amazon EC2). No entanto, recebo a mensagem de erro "com.amazonaws.AmazonServiceException: The security token included in the request is expired (Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)".

Breve descrição

Todas as solicitações à API da aplicação devem ser assinadas digitalmente com as credenciais fornecidas pela AWS. Quando sua aplicação usa credenciais temporárias para criar um cliente da AWS, você deve renovar essas credenciais antes que elas expirem. Se suas credenciais expirarem, você receberá a mensagem de erro "security token included in the request is expired".

Resolução

Certifique-se de que sua instância tenha uma referência de hora consistente

As credenciais expiram se usarem a hora incorreta, portanto, certifique-se de que seu servidor esteja correto. Sua instância do EC2 deve ter uma referência de data e hora consistente e precisa. Configure o Serviço de sincronização temporal da Amazon ou outra origem de Protocolo de tempo da rede (Network Time Protocol, NTP) em sua instância. Para obter mais informações, consulte Alteração do fuso horário da instância.

Certifique-se de que suas credenciais temporárias não tenham expirado

Se você usar credenciais temporárias, certifique-se de que elas não tenham expirado. Se as credenciais temporárias expirarem, você deve gerar um novo conjunto de credenciais temporárias e usá-las. É uma prática recomendada atualizar as credenciais temporárias cinco minutos antes que elas expirem.

Verifique sua configuração do IAM

Em aplicações executadas em uma instância, é uma prática recomendada usar um perfil do AWS Identity and Access Management (AWS IAM) na instância.

Se você usa um perfil do IAM, certifique-se de listar as credenciais do perfil somente no perfil de instância. Com um perfil do IAM, o construtor de serviço padrão usa uma cadeia padrão de provedores de credenciais para pesquisar credenciais na seguinte ordem:

  1. Nas variáveis de ambiente do sistema AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.
  2. Nas propriedades do sistema Java aws.accessKeyId e aws.secretKey.
  3. No arquivo de credenciais padrão.
  4. Nas credenciais do perfil de instância nos metadados da instância associados ao perfil do IAM.

Se você listar as credenciais em qualquer lugar, exceto no perfil da instância, o construtor padrão do cliente encontrará essas credenciais primeiro. Essa configuração bloqueia as credenciais do perfil do IAM. Para resolver esse problema, verifique se há credenciais nos outros locais. Para verificar o arquivo padrão de credencial, verifique o seguinte local com base no seu sistema operacional (SO):

  • Para Linux, macOS ou Unix, verifique * ~/.aws/credentials.
  • Para Windows, verifique C:\Users\USERNAME\.aws\credentials
    Observação: substitua USERNAME pelo seu nome de usuário.

Se você encontrar credenciais em qualquer lugar, exceto no perfil da instância, remova-as. Para obter mais informações sobre configurações de credenciais temporárias, consulte Forneça credenciais temporárias ao AWS SDK for Java.

Para verificar as credenciais do perfil do IAM, execute o comando a seguir com base no seu sistema operacional. Certifique-se de usar a versão 3.0 ou posterior do Windows PowerShell ou de um shell do Linux.

Windows:

PS C:\> Invoke-RestMethod http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

Observação: substitua examplerole pelo nome do seu perfil do IAM. Se você usar credenciais temporárias, o comando anterior mostrará as credenciais temporárias mais recentes da instância.

Exemplo de saída:

Code            : SuccessLastUpdated     : 2016-07-18T18:09:47Z
Type            : AWS-HMAC
AccessKeyId     : AKIAIOSFODNN7EXAMPLE
SecretAccessKey : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Token           : token
Expiration      : 2016-04-27T22:39:16Z

Linux:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

Observação: substitua examplerole pelo nome do seu perfil do IAM. Se você usar credenciais temporárias, o comando anterior mostrará as credenciais temporárias mais recentes da instância. Se você receber um erro 404 ao executar o comando anterior, verifique se você desativou o proxy HTTP para o endereço IP dos metadados. Além disso, certifique-se de que você anexou o perfil de instância à instância.

Exemplo de saída:

{    "Code" : "Success",    "LastUpdated" : "2016-04-26T16:39:16Z",
    "Type" : "AWS-HMAC",
    "AccessKeyId" : "AKIAIOSFODNN7EXAMPLE",
    "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    "Token" : "token",
    "Expiration" : "2016-04-27T22:39:16Z"
}

Observação: as credenciais de perfil são alternadas ou atualizadas automaticamente cinco minutos antes que as credenciais temporárias atribuídas expirem.

Configure novas tentativas

Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Se o problema persistir, verifique se a instância não está fazendo várias solicitações simultâneas ou executando várias sessões em paralelo. Esse cenário pode fazer com que o serviço de metadados de instância (IMDS) limite a consulta. Para mitigar esse problema, use o padrão de nova tentativa com recuo exponencial.

Para configurar novas tentativas, aumente o valor de AWS_METADATA_SERVICE_NUM_ATTEMPTS para que o Boto3 possa realizar novas tentativas de obter credenciais do serviço de metadados da instância. Por padrão, o Boto3 só faz uma tentativa antes de atingir o tempo limite. Além disso, aumente o valor de AWS_METADATA_SERVICE_TIMEOUT para aumentar o número de segundos antes que a conexão com o serviço de metadados da instância atinja o tempo limite. Por padrão, a conexão atinge o tempo limite após 1 segundo.

Exemplo de configuração:

AWS_METADATA_SERVICE_TIMEOUT = 10
AWS_METADATA_SERVICE_NUM_ATTEMPTS = 5

Para configurar as opções anteriores, use variáveis de ambiente, o arquivo ~/.aws/config ou a sessão botocore do usuário. Para obter instruções, consulte Configuration (Configuração) no site de documentação do Boto3.

Se você executar o comando curl em um contêiner do Docker, execute o seguinte comando modify-instance-metadata-options da AWS CLI para aumentar o limite de saltos para 2:

aws ec2 modify-instance-metadata-options --instance-id instance --http-put-response-hop-limit 2 --http-endpoint enabled

Observação: substitua instance pelo ID da sua instância. Para obter mais informações, consulte Em um ambiente de contêiner, considere reconfigurar ou aumentar o limite de saltos para 2. em Considerações sobre o acesso aos metadados da instância.

Informações relacionadas

Autenticando com o AWS uso do AWS SDK for Java 2.x

Funções do IAM para Amazon EC2

Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the Amazon EC2 Instance Metadata Service (Adicionar defesa aprofundada contra firewalls abertos, proxies reversos e vulnerabilidades de SSRF com aprimoramentos no Serviço de metadados de instância do Amazon EC2)

AWS OFICIALAtualizada há 6 meses
1 Comentário

This article was reviewed and updated on 2026-03-12.

ESPECIALISTA

respondeu há 15 dias