O token de segurança incluído na solicitação é inválido
TL;DR — Suas credenciais AWS estão erradas, expiraram ou o SDK está lendo um conjunto diferente do que você pensa. Atualize/verify a chave de acesso + segredo (e token de sessão se estiver usando credenciais temporárias) e confirme qual perfil/source o SDK está realmente usando.
O que significa
UnrecognizedClientException: The security token included in the request is invalid.AWS rejeitou suas credenciais na autenticação – antes de verificar as permissões. Isso é diferente de AccessDeniedException, o que significa que as credenciais são válidas, mas não têm permissão. Aqui as próprias credenciais não são aceitas. O nome da exceção varia de acordo com a ferramenta: a CLI do AWS mostra a mesma mensagem em InvalidClientTokenId, e a referência de erro do DynamoDB expressa sua entrada UnrecognizedClientException como "O ID da chave de acesso ou token de segurança é inválido". - todos significam falha na autenticação.
Por que isso acontece
- Credenciais temporárias expiradas — uma sessão STS/SSO ou token de função assumida expirou ou você tem uma chave de acesso sem o
AWS_SESSION_TOKENnecessário. - Chaves erradas ou parciais — um erro de digitação, uma chave de acesso /deleted girada ou
AWS_ACCESS_KEY_IDdefinida sem umAWS_SECRET_ACCESS_KEYcorrespondente. - Um
AWS_SESSION_TOKENobsoleto deixado no ambiente de uma sessão anterior. - Apontando credenciais reais para DynamoDB Local (ou vice-versa) — O local aceita quaisquer chaves fictícias, mas um endpoint real não aceita espaços reservados.
- Inclinação do relógio na máquina grande o suficiente para invalidar a assinatura da solicitação.
Como corrigir
- Verifique se as credenciais funcionam:
aws sts get-caller-identity. Se isso também falhar, são as credenciais, não o DynamoDB. - Atualizar credenciais temporárias — execute novamente o
aws sso login/assuma novamente a função e certifique-se de que oAWS_SESSION_TOKENesteja configurado para chaves temporárias. - Limpar env vars obsoletos — um
AWS_SESSION_TOKEN/AWS_ACCESS_KEY_IDantigo em seu shell substitui seu perfil. Desmarque-os ou defina o perfil correto (aws configure listmostra qual fonte está ganhando). - Para DynamoDB Local, use credenciais de espaço reservado e aponte para o endpoint local:
const client = new DynamoDBClient({ region: 'local', endpoint: 'http://localhost:8000', credentials: {accessKeyId: 'local', secretAccessKey: 'local'} }); - Verifique se o relógio da máquina está certo (sincronizado por NTP), se todo o resto parecer correto.
Pelo DynoTable
O DynoTable resolve seu profile de ~/.aws do zero a cada conexão,
então um novo login, uma rotação de chaves ou uma variável de ambiente limpa é
captada sem reiniciar o app. Pressione ⌘P para ver qual profile está
ativo e se o ponto de credencial dele está verde — um ponto vermelho significa
Sign in (SSO) ou Reconnect antes que qualquer chamada de tabela funcione.
Para o DynamoDB Local, adicione um profile com o endpoint
http://localhost:8000 e chaves de placeholder alfanuméricas (veja
Running DynamoDB Local); chaves AWS reais contra o Local
disparam esse mesmo erro.
FAQ
O que significa "The security token included in the request is invalid"? A AWS rejeitou suas credenciais na autenticação, antes de verificar permissões. As chaves estão erradas, rotacionadas ou parciais, um token de sessão temporário está expirado ou obsoleto, ou o SDK está lendo uma fonte de credencial diferente do que você imagina.
Como depuro um security token inválido?
Rode aws sts get-caller-identity — se isso também falhar, são as credenciais, não o DynamoDB. Atualize credenciais temporárias (aws sso login ou reassuma a role), certifique-se de que AWS_SESSION_TOKEN está definido para chaves temporárias, e limpe variáveis de ambiente obsoletas que sobrepõem seu profile.
Reproduza
Este não precisa de credenciais válidas nem de um engine local — a autenticação falha antes da autorização, então o serviço real do DynamoDB responde a uma chave deliberadamente falsa:
import boto3
boto3.client(
'dynamodb',
region_name='us-east-1',
aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
).list_tables()Saída real:
UnrecognizedClientException: The security token included in the request is invalid. [HTTP 400]Uma chave estruturalmente malformada (not-a-key) retorna a mensagem idêntica, e essa é a cilada prática: o erro diz que a credencial foi rejeitada, nunca por quê. Um erro de digitação, uma access key excluída, uma chave da conta errada e uma chave que nunca existiu caem todas aqui do mesmo jeito. Compare com security token expired, que de fato se distingue, e repare no par — o código na wire é UnrecognizedClientException enquanto a mensagem fala de um "security token", então buscar pela mensagem e dar grep no seu handler pela classe exigem strings diferentes.
Erros relacionados
- AccessDeniedException — credenciais válidas, permissão ausente.
- Região ausente na configuração
- Aprenda: Running DynamoDB Local — credenciais de placeholder contra um endpoint local.
Fontes
- Troubleshooting errors for the AWS CLI — AWS CLI User Guide (verificado em 2026-07-13)
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (verificado em 2026-07-13)
- DynamoDB local usage notes — Amazon DynamoDB Developer Guide (verificado em 2026-07-13)
Reproduzido em 2026-07-26 no serviço DynamoDB real em us-east-1 via boto3 1.43.56 — a saída acima é literal.