DynamoDB IncompleteSignatureException
TL;DR — İsteğin AWS Signature Version 4 imzası eksikti ya da AWS standartlarına uymuyordu, bu yüzden DynamoDB onu kimlik doğrulamadan önce reddetti. Bir AWS SDK kullanıyorsanız imzalama otomatiktir — bu neredeyse her zaman elle oluşturulmuş bir istek ya da imzalamadan sonra Authorization başlığını bozan bir proxy/ağ geçidi anlamına gelir. SDK'nın imzalamasına izin verin ve hiçbir şeyin isteği aktarımda yeniden yazmadığından emin olun.
Ne anlama gelir
IncompleteSignatureException: The request signature does not conform to AWS standards.AWS her isteği SigV4 ile imzalar. Bu istisna, imzanın mevcut olduğu ama hatalı biçimlendirilmiş ya da gerekli bileşenlerinin eksik olduğu anlamına gelir — hatalı bir Authorization başlığı, eksik bir imzalı başlık ya da bir kanonik-istek uyuşmazlığı. Bu, olduğu gibi yeniden denenebilir olmayan, istemci tarafında bir HTTP 400'dür: imza düzeltilmelidir.
Neden olur
- Elle yapılan imzalama — SigV4 imzasını (bir SDK aracılığıyla değil) kendiniz oluşturuyorsunuz ve kanonik istek, imzalı başlıklar listesi ya da
Authorizationbaşlığı yanlış. - Hatalı biçimlendirilmiş bir
Authorizationbaşlığı — belgelenen tetikleyiciler boş bir başlık, eksik birCredentialveyaSignatureparametresi, algoritma adıyla (AWS4-HMAC-SHA256) başlamayan bir başlık ya da eşittir işareti olmayan bir anahtar=değer çiftidir. - Bir proxy veya API ağ geçidi isteği yeniden yazdı — SDK imzaladıktan sonra
Authorizationbaşlığını (ya da diğer imzalı bölümleri) değiştirmek, AWS'nin aldığı başlığı gönderdiğinizden farklı yapar. - Elle düzenlenmiş başlıklar — imzaladıktan sonra başlık eklemek/kaldırmak ya da sorgu dizesini yeniden sıralamak kanonik isteği bozar.
Nasıl düzeltilir
- Resmi bir AWS SDK kullanın ve isteği onun imzalamasına izin verin. SDK'lar SigV4'ü senin için doğru uygular — neredeyse her oluşumun çözümü elle imzalamayı bırakmaktır.
- İsteği imzaladıktan sonra değiştirmeyin — önünde bir proxy/ağ geçidi varsa, başlık eklemediğinden, düşürmediğinden ya da yeniden sıralamadığından ve gövdeyi/yolu değiştirmediğinden emin olun. İsteği gerçekten gönderen kenarda imzalayın.
Authorizationbaşlığının aktarımda değişip değişmediğini kontrol edin — AWS'nin belgelenen tanısı: gönderdiğiniz başlığın bir SHA-256 hash'ini hesaplayın, Base64 ile kodlayın ve bazıIncompleteSignatureExceptionmesajlarının içerdiği hash ile karşılaştırın. Farklıysa, istemciniz ile AWS arasında bir şey başlığı değiştirdi.- Elle imzalamanız gerekiyorsa, AWS SigV4 imzalama sürecini tam olarak izleyin — kanonik istek, imzalanacak dize, imzalama anahtarı türetimi ve
Authorizationbaşlığı (algoritma,Credential=,SignedHeaders=,Signature=) hepsi eşleşmelidir. Bilinen iyi bir SDK isteğine karşı doğrulayın.
Yanlış ya da kesilmiş bir gizli anahtar farklı bir hatadır: eşleşmeyen tam bir imza üretir ve bu hata yerine "signature we calculated does not match" olarak belirir. Benzer şekilde, kaymış bir makine saati eksik bir imza değil, Signature expired olarak belirir.
DynoTable + Local
DynoTable AWS SDK imzalama yolunu kullanır — elle oluşturulmuş SigV4 yoktur — dolayısıyla bu hata sınıfı normal kullanımda görünmez. Uygulamanız DynoTable çalışırken sorun yaşarsa profilleri karşılaştırın: Ayarlar → Profiller → Bağlantıyı Test Et ile uygulamanızın yüklediği tuşları kullanın.
Yerel için, uç noktası http://localhost:8000 olan bir profildeki sahte kimlik bilgileri imzalamayı tamamen atlar. Bkz. Connect to AWS ve Install. Kimlik bilgileri çözümlendikten sonra Query Builder'de bir duman testi sorgusu çalıştırın.
Kaynaklar
- Error handling with DynamoDB — IncompleteSignatureException (2026-07-13 tarihinde doğrulandı)
- Troubleshoot Signature Version 4 signing (2026-07-13 tarihinde doğrulandı)
SSS
Bir IncompleteSignatureException'a ne neden olur?
İstekteki AWS SigV4 imzası hatalı biçimlendirilmişti ya da gerekli kısımları eksikti — boş veya hatalı biçimlendirilmiş bir Authorization başlığı, eksik bir Credential veya Signature parametresi ya da eşittir işareti olmayan bir anahtar=değer çifti. Bir AWS SDK ile imzalama otomatiktir, bu yüzden bu genellikle elle oluşturulmuş bir imza ya da imzalamadan sonra isteği değiştiren bir proxy anlamına gelir.
Bu, UnrecognizedClientException'dan nasıl farklıdır? IncompleteSignatureException, imzanın kendisinin hatalı biçimlendirildiği anlamına gelir. UnrecognizedClientException ("security token is invalid"), imzanın iyi biçimlendirildiği ama arkasındaki kimlik bilgilerinin kabul edilmediği anlamına gelir.
Nasıl yeniden oluşturulur
Var olan ama SigV4 olarak ayrıştırılamayan bir Authorization başlığı gönderin:
import requests
requests.post(
'https://dynamodb.us-east-1.amazonaws.com',
headers={
'X-Amz-Target': 'DynamoDB_20120810.ListTables',
'Content-Type': 'application/x-amz-json-1.0',
'Authorization': 'AWS4-HMAC-SHA256 this-is-not-a-valid-credential-scope',
},
data='{}',
)Gerçek çıktı:
IncompleteSignatureException: Invalid key=value pair (missing equal-sign) in Authorization header (hashed with SHA-256 and encoded with Base64): 'nmoNS1XQjeE7XjC3Nzhi4KfIKrQZsBTlcf+/muyMgDs='.
HTTP 400Sondaki Base64 dizesi kendi başlığınızın bir özetidir, dolayısıyla her istekte farklıdır — ona göre eşleştirme yapmayın. Mesajın söylediği şey yapısaldır: AWS algoritmayı okuyabildi ama ondan sonra gelen Credential=/SignedHeaders=/Signature= çiftlerini okuyamadı. Bu da başlığın nasıl bir araya getirildiğine işaret eder; bu yüzden bu hata neredeyse her zaman bir SDK'dan değil, elle yazılmış imzalamadan gelir.
İlgili hatalar
- The request signature we calculated does not match — tam ama yanlış bir imza (hatalı gizli anahtar veya kanonikleştirme).
- The security token included in the request is invalid — iyi biçimlendirilmiş imza, hatalı kimlik bilgileri.
- The security token included in the request is expired — geçici kimlik bilgileri zaman aşımına uğradı.
- Yapılandırmada bölge eksik
Kaynaklar
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (IncompleteSignatureException message, HTTP 400, not retryable)
- Troubleshoot Signature Version 4 signing for AWS API requests — IAM User Guide (Authorization-header errors and the hash-comparison diagnostic)
- Create a signed AWS API request — IAM User Guide (the SigV4 signing process)
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
2026-07-26 tarihinde us-east-1'deki canlı DynamoDB hizmetine karşı yeniden üretildi — yukarıdaki çıktı birebir alınmıştır.