Tanda tangan permintaan yang kami hitung tidak cocok

TL;DR — AWS menghitung ulang tanda tangan SigV4 untuk permintaan DynamoDB Anda dan mendapatkan nilai yang berbeda dari yang Anda kirim. Penyebab umum: kunci rahasia /mismatched yang salah, jam yang miring antara mesin Anda dan AWS, atau permintaan kanonik buatan tangan yang dibuat sedikit salah. Perbaiki kunci atau jamnya — atau biarkan SDK AWS masuk untuk Anda.

Apa artinya

InvalidSignatureException: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

Mengapa itu terjadi

  • Kunci akses rahasia salahAWS_SECRET_ACCESS_KEY tidak sesuai dengan AWS_ACCESS_KEY_ID (kunci tercampur, rahasia /old yang diputar, spasi tambahan, atau baris baru).
  • Jam miring — waktu mesin berpindah dari AWS; SigV4 melipat stempel waktu permintaan ke dalam tanda tangan, sehingga jam yang salah akan merusaknya (klasik di VMs/containers, misalnya setelah VM bangun dari hibernasi).
  • Permintaan kanonik buatan tangan — penanda tangan khusus yang mengurutkan parameter headers/query salah, salah mengkodekan URI, atau meng-hash payload yang salah.
  • Karakter khusus dalam kunci salah ditangani — rahasia yang berisi -, +, /, atau % dapat diubah oleh shell atau skrip yang membuat file kredensial; AWS menyarankan untuk membuat ulang kuncinya.
  • Legacy SigV2 — penandatanganan dengan Signature Version 2, yang tidak lagi didukung oleh layanan seperti Amazon S3 dan Wilayah yang lebih baru.
  • Proxy atau gateway mengubah permintaan setelah penandatanganan (menambahkan header/reordering, mengkodekan ulang jalur).

Bagaimana cara memperbaikinya

  1. Periksa kembali pasangan kunci. Buat ulang atau salin ulang kunci akses + rahasia dan atur dengan rapi (perhatikan spasi /newlines di akhir, dan buat ulang jika rahasia berisi karakter khusus yang rusak oleh alat Anda).
  2. Perbaiki jamnya. Aktifkan NTP agar waktu host akurat:
    timedatectl status        # verify "System clock synchronized: yes"
  3. Pilih AWS SDK / CLI — biarkan ia menyusun dan menandatangani permintaan; seluruh kelas bug permintaan kanonik menghilang.
  4. Jika Anda harus menandatangani dengan tangan, ikuti aturan permintaan kanonik SigV4 dengan tepat (header yang diurutkan, jalur yang dikodekan URI, x-amz-date, payload yang di-hash) dan bandingkan dengan keluaran --debug dari CLI.
  5. Konfirmasi bahwa identitasnya berfungsi dengan klien yang sudah pasti benar:
    aws sts get-caller-identity

Cara mereproduksinya

Tanda tangani dengan ID kunci akses asli tetapi rahasia yang salah. Semua hal lain tentang permintaan itu valid, sehingga kegagalannya mengisolasi tanda tangan:

import boto3
boto3.client(
    'dynamodb',
    region_name='us-east-1',
    aws_access_key_id='AKIA...',                      # a real key id
    aws_secret_access_key='deliberately-the-wrong-secret',
).list_tables()

Keluaran nyata:

InvalidSignatureException: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
HTTP 400

Perhatikan kelasnya. Pesannya adalah "signature we calculated does not match" yang sudah akrab, tetapi DynamoDB mengembalikannya sebagai InvalidSignatureException — bukan SignatureDoesNotMatch, yang dipakai beberapa layanan AWS lain untuk situasi yang sama. Jika Anda menangkap berdasarkan kelas alih-alih mencocokkan pesan, perbedaan itu menentukan antara handler yang aktif dan yang tidak pernah aktif.

Lihat di DynoTable

DynoTable tidak pernah meminta Anda untuk menandatangani permintaan secara langsung — ia menggunakan SDK AWS yang sama rantai kredensial sebagai CLI (Hubungkan akun AWS). Jika aws sts get-caller-identity berhasil tetapi DynamoDB masih memunculkan kesalahan ini, periksa proxy atau middleware antara aplikasi dan AWS; DynoTable berbicara dengan DynamoDB langsung dari mesin Anda tanpa perantara. Setelah memperbaiki kunci atau jam miring, tekan ⌘P untuk mengonfirmasi profil aktif dan jalankan Test Koneksi di Pengaturan → Profil sebelum membuka tabel lagi.

Kesalahan terkait

Sumber

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.