Não foi possível localizar credenciais (boto3/DynamoDB)

TL;DR - boto3/botocore percorreu toda a cadeia de provedores de credenciais - env vars, ~/.aws/credentials compartilhado, perfil de configuração, função container/instance - e não encontrou nada. Nenhuma credencial significa que não é possível assinar a solicitação DynamoDB. Forneça à cadeia uma fonte de credenciais que ela possa encontrar: aws configure, env vars, um perfil ou uma função IAM.

O que significa

botocore.exceptions.NoCredentialsError: Unable to locate credentials

Antes de qualquer chamada DynamoDB, o SDK deve resolver uma chave de acesso + segredo para assinar a solicitação com SigV4. Este erro é gerado nessa etapa: nenhum provedor de credenciais retornou nada. Isso acontece antes do pedido ser enviado. Esta é a ausência de qualquer identidade, não uma negação de permissão (isso seria AccessDeniedException).

Por que isso acontece

  • Nenhuma credencial configuradaaws configure nunca foi executado e não existe ~/.aws/credentials.
  • Env vars ausentesAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY não são definidos no ambiente do processo (comum em cron jobs, contêineres, CI).
  • Perfil errado ou ausente — você referenciou --profile foo (ou AWS_PROFILE=foo), mas esse perfil não está no arquivo de credenciais/config.
  • Sem função instance/container — no EC2/ECS/Lambda sem uma função IAM anexada, portanto, o provedor de metadados não retorna nada.
  • Casa de usuário diferente — executando como uma conta de serviço cujo ~/.aws não contém o arquivo que você editou.
  • Token de sessão expirado/absent para uma configuração de credenciais temporárias.

Como corrigir

  1. Configure um perfil para desenvolvimento local:
    aws configure     # writes ~/.aws/credentials + ~/.aws/config
  2. Ou defina variáveis de ambiente para o processo:
    export AWS_ACCESS_KEY_ID=...
    export AWS_SECRET_ACCESS_KEY=...
    export AWS_DEFAULT_REGION=us-east-1
  3. No EC2/ECS/Lambda, anexe uma função IAM — o SDK a coleta automaticamente dos metadados da instância/container; não embuta chaves.
  4. Verifique se a identidade é resolvida antes de executar seu código:
    aws sts get-caller-identity
  5. Aponte para o perfil certo — passe profile_name para boto3.Session(...) ou defina AWS_PROFILE.
  6. Contra o DynamoDB Local, qualquer chave de espaço reservado serve — passe aws_access_key_id/aws_secret_access_key fictícios para que a cadeia não fique vazia.

DynoTable + Local

O DynoTable resolve credenciais do mesmo jeito que a CLI — se ele conecta e o boto3 não, seu processo está lendo um diretório home diferente ou está sem AWS_PROFILE. Configure profiles em Settings → Profiles e rode Test Connection; troque com ⌘P.

Para o Local, adicione um profile com chaves dummy e o endpoint http://localhost:8000. Veja Connect to AWS e Install. Confirme com uma consulta de teste no Query Builder.

Fontes

FAQ

Como corrijo "Unable to locate credentials" no boto3? Dê à cadeia de providers de credenciais algo para encontrar: rode aws configure para escrever ~/.aws/credentials, defina AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY no ambiente do processo, ou anexe uma role IAM no EC2/ECS/Lambda. Depois verifique com aws sts get-caller-identity.

"Unable to locate credentials" é o mesmo que AccessDeniedException? Não. NoCredentialsError é levantado localmente antes de a requisição ser enviada, porque nenhum provider de credencial retornou nada. AccessDeniedException vem da AWS após a autenticação, quando uma identidade válida não tem permissão IAM para a ação.

Reproduza

Chame o DynamoDB sem nenhuma credencial resolvível em qualquer ponto da cadeia — sem variáveis de ambiente, sem arquivo de credenciais compartilhado, sem perfil, sem role de instância:

import boto3
boto3.client('dynamodb', region_name='us-east-1').list_tables()

Saída real:

NoCredentialsError: Unable to locate credentials

A mensagem é famosa por ser lacônica: ela não nomeia nenhum dos lugares onde o boto3 procurou. É essa a dificuldade toda deste erro, e é por isso que percorrer a cadeia em ordem — ambiente, depois arquivo compartilhado, depois perfil, depois role — funciona melhor do que adivinhar.

Erros relacionados

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Reproduzido em 2026-07-26 com boto3 1.43.56 / botocore 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.