Eu assumi um perfil do AWS Identity and Access Management (AWS IAM) e minha chamada de API retornou o erro: “An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials.”
Breve descrição
Por padrão, a AWS não habilita novas regiões da AWS, e as novas regiões aceitam somente tokens da versão 2. Quando os tokens da versão 1 fazem uma solicitação para atender endpoints em uma região que a AWS não habilita, ocorre o seguinte erro:
“An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials.”
É uma prática recomendada usar endpoints regionais do AWS Security Token Service (AWS STS), pois os tokens de sessão de um endpoint regional do STS são tokens da versão 2 e são válidos em todas as regiões. Ou é possível alterar as configurações de compatibilidade de região para tokens de sessão do endpoint global.
Resolução
Obtenha tokens de um endpoint regional
Importante: para regiões que a AWS habilita por padrão, você deve habilitar o endpoint regional do STS na conta da AWS que gera as credenciais temporárias, independentemente da conta que faz a solicitação. Para regiões que são habilitadas manualmente, habilite a região na conta que faz a solicitação e na conta em que as credenciais são geradas. Se você não habilitar a região em ambas as contas, receberá o erro “InvalidClientTokenId”.
Observação: se você receber erros 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.
É possível usar um AWS SDK ou a AWS CLI para obter tokens.
Por exemplo, é possível executar o seguinte comando do AWS SDK para Python (Boto3):
# Replace existing code to create STS client with the following:
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.your-region.amazonaws.com')
Observação: substitua your-region pela sua região e endpoint_url pelo seu endpoint.
Ou execute o seguinte comando assume-role:
aws sts assume-role --role-arn arn:aws:iam::444455556666:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
Observação: substitua your-region pela sua região, role-arn pelo seu nome do recurso da Amazon (ARN) do IAM e endpoint_url pelo seu endpoint.
Altere as configurações de compatibilidade de região para tokens de sessão a partir do endpoint global
Por padrão, as chamadas do STS que você faz para o endpoint global emitem tokens da versão 1. Para usar tokens de sessão em todas as regiões, configure o endpoint global do STS para emitir tokens da versão 2.
Importante: os tokens da versão 2 contêm mais caracteres que os da versão 1. O aumento no tamanho do token pode afetar os sistemas existentes que armazenam temporariamente os tokens de sessão. Certifique-se de que o sistema que armazena seus tokens possa gerenciar o aumento do tamanho do token.