Unable to locate credentials (boto3 / DynamoDB)
TL;DR — boto3/botocore, tüm kimlik bilgisi sağlayıcı zincirini — ortam değişkenleri, paylaşılan ~/.aws/credentials, config profili, kapsayıcı/örnek rolü — dolaştı ve hiçbir şey bulamadı. Kimlik bilgisi yoksa DynamoDB isteğini imzalayamaz. Zincire bulabileceği bir kimlik bilgisi kaynağı verin: aws configure, ortam değişkenleri, bir profil ya da bir IAM rolü.
Ne anlama gelir
botocore.exceptions.NoCredentialsError: Unable to locate credentialsHerhangi bir DynamoDB çağrısından önce, SDK isteği SigV4 ile imzalamak için bir erişim anahtarı + gizli çözmelidir. Bu hata o adımda fırlatılır: hiçbir kimlik bilgisi sağlayıcısı bir şey döndürmedi. İstek gönderilmeden önce olur — bir izin reddi değildir (o AccessDeniedException olurdu), hiç kimliğin olmamasıdır.
Neden olur
- Yapılandırılmış kimlik bilgisi yok —
aws configurehiç çalıştırılmadı ve hiç~/.aws/credentialsyok. - Ortam değişkenleri eksik — sürecin ortamında
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYayarlı değil (cron işlerinde, kapsayıcılarda, CI'da yaygın). - Yanlış veya eksik profil —
--profile foo'ya (ya daAWS_PROFILE=foo) başvurdunuz ama o profil kimlik bilgileri/config dosyasında yok. - Örnek/kapsayıcı rolü yok — ekli bir IAM rolü olmayan EC2/ECS/Lambda'da, dolayısıyla meta veri sağlayıcısı hiçbir şey döndürmez.
- Farklı sennın evi —
~/.aws'i düzenlediğiniz dosyayı tutmayan bir hizmet hesabı olarak çalışmak. - Geçici-kimlik bilgisi kurulumu için oturum belirtecinin süresi geçmiş/eksik.
Nasıl düzeltilir
- Yerel geliştirme için bir profil yapılandırın:
aws configure # writes ~/.aws/credentials + ~/.aws/config - Ya da süreç için ortam değişkenleri ayarlayın:
export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_DEFAULT_REGION=us-east-1 - EC2/ECS/Lambda'da, bir IAM rolü ekleyin — SDK onu örnek/kapsayıcı meta verisinden otomatik alır; anahtarları gömmeyin.
- Kodunuzu çalıştırmadan önce kimliğin çözümlendiğini doğrulayın:
aws sts get-caller-identity - Doğru profili gösterin —
boto3.Session(...)'aprofile_nameiletin ya daAWS_PROFILEayarlayın. - DynamoDB Local'e karşı, herhangi bir yer tutucu anahtar çalışır — zincir boş olmasın diye kukla
aws_access_key_id/aws_secret_access_keyiletin.
Kodunuzun dışında hızlı bir sağlamlık kontrolü: DynoTable aynı AWS profilleriyle bağlanır — tablolarınızı listeliyorsa, kimlik bilgileri mevcuttur ve sorun, sürecinizin hangi kaynağı okuduğudur.
DynoTable + Local
DynoTable kimlik bilgilerini CLI ile aynı şekilde çözer; eğer bağlanıyor ancak boto3 bağlanmıyorsa, işleminiz farklı bir ana dizini okuyordur veya AWS_PROFILE eksiktir. Ayarlar → Profiller altında profilleri yapılandırın ve Bağlantıyı Test Et komutunu çalıştırın; ⌘P ile değiştirin.
Yerel için yapay tuşlara ve http://localhost:8000 uç noktasına sahip bir profil ekleyin. Bkz. Connect to AWS ve Install. Query Builder'de bir test sorgusu ile onaylayın.
Kaynaklar
- Credentials — Boto3 documentation (2026-07-13 tarihinde doğrulandı)
- Error handling — Boto3 documentation (2026-07-13 tarihinde doğrulandı)
SSS
boto3'te "Unable to locate credentials"ı nasıl düzeltirim?
Kimlik bilgisi sağlayıcı zincirine bulacağı bir şey verin: ~/.aws/credentials yazmak için aws configure çalıştırın, sürecin ortamında AWS_ACCESS_KEY_ID ve AWS_SECRET_ACCESS_KEY ayarlayın ya da EC2/ECS/Lambda'da bir IAM rolü ekleyin. Sonra aws sts get-caller-identity ile doğrulayın.
"Unable to locate credentials", AccessDeniedException ile aynı mıdır? Hayır. NoCredentialsError, hiçbir kimlik bilgisi sağlayıcısı bir şey döndürmediği için istek gönderilmeden önce yerel olarak fırlatılır. AccessDeniedException, geçerli bir kimlik işlem için IAM iznine sahip olmadığında kimlik doğrulamadan sonra AWS'den gelir.
Nasıl yeniden oluşturulur
Zincirin hiçbir yerinde çözümlenebilir kimlik bilgisi olmadan DynamoDB çağırın — ortam değişkeni yok, paylaşılan kimlik bilgileri dosyası yok, profil yok, örnek rolü yok:
import boto3
boto3.client('dynamodb', region_name='us-east-1').list_tables()Gerçek çıktı:
NoCredentialsError: Unable to locate credentialsMesaj meşhur biçimde kısadır: boto3'ün baktığı yerlerin hiçbirini adıyla vermez. Bu hatanın bütün zorluğu budur; zinciri sırayla — önce ortam, sonra paylaşılan dosya, sonra profil, sonra rol — taramanın tahmin yürütmeye neden üstün olduğu da bu yüzdendir.
İlgili hatalar
- The security token included in the request is invalid — kimlik bilgileri bulundu ama AWS onları reddetti.
- AccessDeniedException — geçerli kimlik ama işlem için IAM izni yok.
- Yapılandırmada bölge eksik
- Öğrenin: Running DynamoDB Local — yerel bir uç noktaya karşı kukla kimlik bilgileri.
Kaynaklar
- Credentials — Boto3 documentation
- Error handling — Boto3 documentation
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
2026-07-26 tarihinde boto3 1.43.56 / botocore 1.43.56 ile yeniden üretildi — yukarıdaki çıktı birebir alınmıştır.