A chamada de API do AWS Security Token Service (AWS STS) AssumeRoleWithWebIdentity apresenta falha com um erro “InvalidIdentityToken”. Quero solucionar esse erro.
Resolução
Quando a chamada de API AssumeRoleWithWebIdentity falhar, você poderá receber um erro semelhante à mensagem a seguir:
“An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation. Couldn't retrieve verification key from your identity provider.”
Observação: Como esse problema falha no lado do cliente, o log de eventos do AWS CloudTrail não registra esse erro.
Verifique o acesso público para .well_known e jwks_uri
Se você não conseguir acessar o URL .well-known e jwks_uri do provedor de identidades (IdP), pode receber um erro. Verifique se é possível acessar publicamente o URL .well_known e o jwks_uri do IdP.
Para verificar a acessibilidade, navegue até os seguintes links em seu navegador:
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
-or-
Para verificar a acessibilidade, execute um dos seguintes comandos.
Para Windows:
wget https://BASE_SERVER_URL/.well-known/openid-configurationwget https://BASE_SERVER_URL/.well-known/jwks.json
Para Linux:
curl https://BASE_SERVER_URL/.well-known/openid-configurationcurl https://BASE_SERVER_URL/.well-known/jwks.json
Observação: Substitua BASE\ _SERVER\ _URL pelo url base do seu IdP.
Para confirmar se é possível acessar os links, verifique o código de status HTTP 200 na resposta da solicitação.
Verifique as configurações do firewall
Se o URL .well_known e o jwks_uri do IdP não estiverem acessíveis, verifique as configurações do firewall. Verifique se os domínios não estão em uma lista de recusa. Dependendo da configuração atual do firewall, talvez os domínios precisem ser adicionados a uma lista de permissões.
Se um firewall personalizado bloquear as solicitações, você poderá receber um erro.
Se as configurações do firewall não estiverem acessíveis, use o navegador com um dispositivo de uma rede diferente, como um celular.
Navegue até os seguintes links em seu navegador:
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
Observação: Substitua BASE\ _SERVER\ _URL pelo url base do seu IdP.
Se o servidor que está fazendo a chamada de API AssumeRoleWithWebIdentity for uma instância do Amazon Elastic Compute Cloud (Amazon EC2), verifique as configurações. Para saber mais, consulte Por que não consigo me conectar a um site hospedado na minha instância do EC2?
Verifique a latência da operação
Quando a latência leva mais de 5 segundos nas solicitações de API do IdP para chegar ao endpoint do AWS STS, você pode receber um erro.
Verifique a latência da operação total. Isso inclui o tempo de solicitação e resposta do STS e dos atributos do IdP.
Minimize a latência do STS
Use endpoints regionais da AWS em vez de endpoints globais para o serviço STS. Isso verifica se as solicitações são roteadas para o servidor geograficamente mais próximo para minimizar a latência. Para obter mais informações, consulte Como escrever código para usar as regiões do AWS STS.
Observação: Para SDKs da AWS, o parâmetro Region roteia o endpoint de destino da solicitação para onde a chamada é feita na configuração sts_regional_endpoint.
Avalie a latência do IdP
O IdP faz solicitações ao endpoint STS. Para verificar se a solicitação ao endpoint STS demora muito, analise os pacotes de saída do IdP nos logs do IdP.
Observação: Se a solicitação do IdP para o endpoint STS levar mais de 5 segundos, a solicitação poderá atingir o tempo limite e falhar. Você pode entrar em contato com seu provedor de identidades para solicitar um aumento na disponibilidade geográfica para reduzir a latência dessa chamada de API.
(Opcional) Use o recuo exponencial e aumente as novas tentativas
O IdP suporta o AssumeRoleWithWebIdentity ao fornecer informações. A maioria dos IdPs tem limites de API para evitar erros de controle de utilização e o IdP pode não retornar as chaves solicitadas das chamadas de API. Se a API tiver problemas intermitentes para acessar seu IdP, use as seguintes opções de solução de problemas:
Reduza as solicitações de STS para .well_known e jwks_uri
Se seu JSON Web Key Set (JWKS) definir cabeçalhos de resposta Pragma: no-cache ou Cache-Control: no-cache, o STS não armazenará seu JWKS em cache. O STS executa um retorno de chamada para chaves referenciadas em um ID\ _TOKEN, mas não no cache. Nesse caso, o STS pode fazer muitas solicitações para seu URL .well_known e jwks_uri.
Para reduzir os retornos de chamada do STS, verifique se o JWKS não define nenhum desses cabeçalhos de resposta. Isso permite que o STS armazene seu JWKS em cache.
Reduza o número de chaves em seu JWKS
O STS suporta apenas até 100 chaves em um JWKS. Se seu JWKS tiver mais de 100 chaves, o STS não poderá verificar os tokens assinados com suas chaves. Você pode receber o erro “InvalidIdentityToken” ao chamar AssumeRoleWithWebIdentity e seu JWKS ter mais de 100 chaves.
Para resolver o erro, remova as chaves mais necessárias do seu JWKS. Ou reduza o número de chaves presentes no seu JWKS.
Informações relacionadas
Bem-vindo à referência da API do AWS Security Token Service
Como posso resolver erros de controle de utilização de API ou de “Rate exceeded” para IAM e AWS STS?