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 Authorization başlığı yanlış.
  • Hatalı biçimlendirilmiş bir Authorization başlığı — belgelenen tetikleyiciler boş bir başlık, eksik bir Credential veya Signature parametresi, 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 Authorization baş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

  1. 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.
  2. İ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.
  3. Authorization baş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ı IncompleteSignatureException mesajları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.
  4. Elle imzalamanız gerekiyorsa, AWS SigV4 imzalama sürecini tam olarak izleyin — kanonik istek, imzalanacak dize, imzalama anahtarı türetimi ve Authorization baş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

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 400

Sondaki 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

Kaynaklar

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.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.