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_TOKEN necessário.
  • Chaves erradas ou parciais — um erro de digitação, uma chave de acesso /deleted girada ou AWS_ACCESS_KEY_ID definida sem um AWS_SECRET_ACCESS_KEY correspondente.
  • Um AWS_SESSION_TOKEN obsoleto 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

  1. Verifique se as credenciais funcionam: aws sts get-caller-identity. Se isso também falhar, são as credenciais, não o DynamoDB.
  2. Atualizar credenciais temporárias — execute novamente o aws sso login/assuma novamente a função e certifique-se de que o AWS_SESSION_TOKEN esteja configurado para chaves temporárias.
  3. Limpar env vars obsoletos — um AWS_SESSION_TOKEN/AWS_ACCESS_KEY_ID antigo em seu shell substitui seu perfil. Desmarque-os ou defina o perfil correto (aws configure list mostra qual fonte está ganhando).
  4. 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'}
    });
  5. 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

Fontes

Reproduzido em 2026-07-26 no serviço DynamoDB real em us-east-1 via boto3 1.43.56 — a saída acima é literal.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.