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 credentialsAntes 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 configurada —
aws configurenunca foi executado e não existe~/.aws/credentials. - Env vars ausentes —
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYnão são definidos no ambiente do processo (comum em cron jobs, contêineres, CI). - Perfil errado ou ausente — você referenciou
--profile foo(ouAWS_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
~/.awsnão contém o arquivo que você editou. - Token de sessão expirado/absent para uma configuração de credenciais temporárias.
Como corrigir
- Configure um perfil para desenvolvimento local:
aws configure # writes ~/.aws/credentials + ~/.aws/config - 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 - No EC2/ECS/Lambda, anexe uma função IAM — o SDK a coleta automaticamente dos metadados da instância/container; não embuta chaves.
- Verifique se a identidade é resolvida antes de executar seu código:
aws sts get-caller-identity - Aponte para o perfil certo — passe
profile_nameparaboto3.Session(...)ou definaAWS_PROFILE. - Contra o DynamoDB Local, qualquer chave de espaço reservado serve — passe
aws_access_key_id/aws_secret_access_keyfictí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
- Credentials — Boto3 documentation (verificado em 2026-07-13)
- Error handling — Boto3 documentation (verificado em 2026-07-13)
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 credentialsA 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
- The security token included in the request is invalid — credenciais foram encontradas mas a AWS as rejeitou.
- AccessDeniedException — identidade válida, mas sem permissão IAM para a ação.
- Região ausente na configuração
- Aprenda: Running DynamoDB Local — credenciais dummy contra um endpoint local.
Referências
- Credentials — Boto3 documentation
- Error handling — Boto3 documentation
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
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.