DynamoDB IncompleteSignatureException
TL;DR — Permintaan tanda tangan AWS Signature Versi 4 tidak lengkap atau tidak sesuai dengan standar AWS, jadi DynamoDB menolaknya sebelum mengautentikasi. Jika Anda menggunakan SDK AWS, penandatanganannya dilakukan secara otomatis — ini hampir selalu berarti permintaan buatan tangan atau proxy/gateway yang merusak header Authorization setelah penandatanganan. Biarkan SDK menandatanganinya, dan pastikan tidak ada yang menulis ulang permintaan saat transit.
Apa artinya
IncompleteSignatureException: The request signature does not conform to AWS standards.Mengapa itu terjadi
- Penandatanganan langsung — Anda membuat sendiri tanda tangan SigV4 (bukan melalui SDK) dan permintaan kanonik, daftar header yang ditandatangani, atau header
Authorizationsalah. - Format
Authorizationheader yang salah — pemicu yang didokumentasikan adalah header kosong, parameterCredentialatauSignatureyang hilang, header yang tidak diawali dengan nama algoritme (AWS4-HMAC-SHA256), atau pasangan kunci=nilai tanpa tanda sama dengan. - Proxy atau gateway API menulis ulang permintaan — mengubah header
Authorization(atau bagian lain yang ditandatangani) setelah SDK menandatanganinya akan membuat header yang diterima AWS berbeda dari yang Anda kirim. - Header yang diedit secara manual — menambahkan header/removing setelah penandatanganan, atau menyusun ulang string kueri, akan merusak permintaan kanonik.
Bagaimana cara memperbaikinya
- Gunakan SDK AWS resmi dan biarkan SDK menandatangani permintaan. SDK mengimplementasikan SigV4 dengan benar untuk Anda — perbaikan untuk hampir setiap kejadian adalah dengan menghentikan penandatanganan tangan.
- Jangan mengubah permintaan setelah penandatanganan — jika proxy/gateway berada di depan, pastikan proxy tidak menambahkan, menghapus, atau menyusun ulang header atau mengubah body/path. Tanda tangani di tepi yang benar-benar mengirimkan permintaan.
- Periksa apakah header
Authorizationberubah saat transit — diagnostik terdokumentasi AWS: hitung hash SHA-256 dari header yang Anda kirim, enkodekan Base64, dan bandingkan dengan hash yang disertakan dalam beberapa pesanIncompleteSignatureException. Jika berbeda, ada sesuatu antara klien Anda dan AWS yang mengubah header. - Jika Anda harus menandatangani secara manual, ikuti proses penandatanganan AWS SigV4 dengan tepat — permintaan kanonik, string untuk menandatangani, turunan kunci penandatanganan, dan header
Authorization(algoritma,Credential=,SignedHeaders=,Signature=) semuanya harus cocok. Verifikasi terhadap permintaan SDK yang dikenal bagus.
Kunci rahasia yang salah atau terpotong merupakan kegagalan yang berbeda: menghasilkan tanda tangan lengkap yang tidak cocok, muncul sebagai "tanda tangan yang kami hitung tidak cocok" dan bukan kesalahan ini. Demikian pula, jam mesin yang miring muncul sebagai Signature expired, bukan tanda tangan yang tidak lengkap.
DynoTable + Local
DynoTable menggunakan jalur penandatanganan SDK AWS — tidak ada SigV4 buatan tangan — sehingga kelas kesalahan ini tidak muncul dalam penggunaan normal. Jika aplikasi Anda berhasil saat DynoTable berfungsi, bandingkan profil: Pengaturan → Profil → Uji Koneksi dengan kunci yang sama yang dimuat aplikasi Anda.
Untuk Lokal, kredensial tiruan pada profil dengan titik akhir http://localhost:8000 mengabaikan penandatanganan sepenuhnya. Lihat Menghubungkan ke AWS dan Instal. Setelah kredensial terselesaikan, jalankan kueri pengujian asap di Pembuat Kueri.
Sumber
- Penanganan kesalahan dengan DynamoDB — IncompleteSignatureException (diverifikasi 13-07-2026)
- Memecahkan Masalah penandatanganan Signature Version 4 (diverifikasi 13-07-2026)
FAQ
Apa yang menyebabkan IncompleteSignatureException?
Tanda tangan AWS SigV4 pada permintaan memiliki format yang salah atau bagian yang diperlukan tidak ada — header Authorization yang kosong atau formatnya salah, parameter Credential atau Signature tidak ada, atau pasangan kunci=nilai tanpa tanda sama dengan. Dengan SDK AWS, penandatanganan dilakukan secara otomatis, jadi biasanya ini berarti tanda tangan buatan tangan atau proxy yang mengubah permintaan setelah penandatanganan.
Apa bedanya dengan UnrecognizedClientException? IncompleteSignatureException berarti tanda tangan itu sendiri salah format. UnrecognizedClientException ("token keamanan tidak valid") berarti tanda tangan dibuat dengan baik tetapi kredensial di baliknya tidak diterima.
Cara mereproduksinya
Kirim header Authorization yang ada tetapi tidak dapat diurai sebagai SigV4:
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='{}',
)Keluaran sebenarnya:
IncompleteSignatureException: Invalid key=value pair (missing equal-sign) in Authorization header (hashed with SHA-256 and encoded with Base64): 'nmoNS1XQjeE7XjC3Nzhi4KfIKrQZsBTlcf+/muyMgDs='.
HTTP 400String Base64 di ujungnya adalah hash dari header Anda sendiri, jadi ia berbeda pada setiap permintaan — jangan mencocokkannya. Yang disampaikan pesan itu bersifat struktural: AWS bisa membaca algoritmanya tetapi tidak bisa membaca pasangan Credential=/SignedHeaders=/Signature= sesudahnya. Itu menunjuk pada cara header tersebut dirakit, yang menjelaskan mengapa ini hampir selalu datang dari penandatanganan buatan tangan alih-alih dari sebuah SDK.
Kesalahan terkait
- Tanda tangan permintaan yang kami hitung tidak cocok — tanda tangan yang lengkap namun salah (kunci rahasia buruk atau kanonikalisasi).
- Token keamanan yang disertakan dalam permintaan tidak valid — tanda tangan yang dibuat dengan baik, kredensial yang buruk.
- Token keamanan yang disertakan dalam permintaan telah kedaluwarsa — waktu kredensial sementara telah habis.
- Wilayah tidak ada di konfigurasi
Referensi
- Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB (pesan IncompleteSignatureException, HTTP 400, tidak dapat dicoba ulang)
- Memecahkan Masalah penandatanganan Tanda Tangan Versi 4 untuk permintaan AWS API — Panduan Pengguna IAM (Kesalahan header otorisasi dan diagnostik perbandingan hash)
- Buat permintaan AWS API yang ditandatangani — Panduan Pengguna IAM (proses penandatanganan SigV4)
Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.
Direproduksi 26-07-2026 terhadap layanan DynamoDB langsung di us-east-1 — keluaran di atas adalah kata demi kata.