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 Authorization salah.
  • Format Authorization header yang salah — pemicu yang didokumentasikan adalah header kosong, parameter Credential atau Signature yang 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

  1. 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.
  2. 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.
  3. Periksa apakah header Authorization berubah saat transit — diagnostik terdokumentasi AWS: hitung hash SHA-256 dari header yang Anda kirim, enkodekan Base64, dan bandingkan dengan hash yang disertakan dalam beberapa pesan IncompleteSignatureException. Jika berbeda, ada sesuatu antara klien Anda dan AWS yang mengubah header.
  4. 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

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 400

String 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

Referensi

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.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.