The request signature we calculated does not match
TL;DR — AWS, DynamoDB isteğiniz için SigV4 imzasını yeniden hesapladı ve gönderdiğinizden farklı bir değer aldı. Olağan nedenler: bir yanlış/eşleşmeyen gizli anahtar, makineniz ile AWS arasında saat kayması ya da biraz yanlış oluşturulmuş elle yapılan bir kanonik istek. Anahtarı ya da saati düzeltin — ya da yalnızca bir AWS SDK'sının senin için imzalamasına izin verin.
Ne anlama gelir
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.Her DynamoDB isteği, isteğin kanonik bir biçimi üzerinden gizli anahtarınızla SigV4 kullanılarak imzalanır. AWS imzayı sunucu tarafında yeniden türetir; farklıysa, bu HTTP 400'ü alırsınız. Bir yetkilendirme reddinden farklı olarak, bu bir kimlik doğrulama hatasıdır (kimlik/imza). Normalde değiştirilmeden yeniden denenebilir değildir — ama saat kaymasıysa, aralıklı görünebilir.
Neden olur
- Yanlış gizli erişim anahtarı —
AWS_SECRET_ACCESS_KEY,AWS_ACCESS_KEY_ID'ye karşılık gelmiyor (karışmış anahtarlar, döndürülmüş/eski bir gizli, başıboş bir sondaki boşluk ya da yeni satır). - Saat kayması — makinenin zamanı AWS'den sapar; SigV4 istek zaman damgasını imzaya katar, dolayısıyla yanlış bir saat onu bozar (VM'lerde/kapsayıcılarda klasik, örneğin bir VM hazırda bekletmeden uyandıktan sonra).
- Elle oluşturulmuş kanonik istek — başlıkları/sorgu parametrelerini yanlış sıralayan, URI'yi yanlış kodlayan ya da yanlış yükü hash'leyen özel bir imzalayıcı.
- Anahtardaki özel karakterlerin yanlış ele alınması —
-,+,/ya da%içeren gizliler, kimlik bilgisi dosyaları oluşturan kabuklar ya da betikler tarafından bozulabilir; AWS anahtarı yeniden oluşturmayı önerir. - Eski SigV2 — Amazon S3 gibi hizmetlerin ve daha yeni Bölgelerin artık desteklemediği Signature Version 2 ile imzalamak.
- İmzaladıktan sonra isteği değiştiren bir proxy veya ağ geçidi (başlık ekleme/yeniden sıralama, yolu yeniden kodlama).
Nasıl düzeltilir
- Anahtar çiftini yeniden kontrol edin. Erişim anahtarı + gizliyi yeniden oluşturun ya da yeniden kopyalayın ve onları temiz bir şekilde ayarlayın (sondaki boşluk/yeni satırlara dikkat edin ve gizli, araçlarınızın bozduğu özel karakterler içeriyorsa yeniden oluşturun).
- Saati düzeltin. Ana bilgisayar zamanının doğru olması için NTP'yi etkinleştirin:
timedatectl status # verify "System clock synchronized: yes" - Bir AWS SDK / CLI'yi tercih edin — isteği onun oluşturmasına ve imzalamasına izin verin; tüm kanonik-istek hataları sınıfı ortadan kalkar.
- Elle imzalamanız gerekiyorsa, SigV4 kanonik-istek kurallarını tam olarak izleyin (sıralanmış başlıklar, URI-kodlanmış yol,
x-amz-date, hash'lenmiş yük) ve CLI'nın--debugçıktısıyla karşılaştırın. - Bilinen iyi bir istemciyle kimliğin çalıştığını doğrulayın:
aws sts get-caller-identity
Nasıl yeniden oluşturulur
Gerçek bir erişim anahtarı kimliğiyle ama yanlış gizli anahtarla imzalayın. İsteğin geri kalan her şeyi geçerlidir, dolayısıyla hata imzayı yalıtır:
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()Gerçek çıktı:
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 400Sınıfa dikkat edin. Mesaj, tanıdık "signature we calculated does not match" mesajıdır, ama DynamoDB onu InvalidSignatureException olarak döndürür — aynı durum için birkaç başka AWS hizmetinin kullandığı SignatureDoesNotMatch olarak değil. Mesajı eşleştirmek yerine sınıfa göre yakalıyorsanız bu ayrım, çalışan bir işleyici ile hiç çalışmayan bir işleyici arasındaki farktır.
DynoTable'da görüntüleyin
DynoTable sizden hiçbir zaman istekleri elle imzalamanızı istemez; aynı AWS SDK'yı kullanır
CLI (Connect an AWS account) olarak kimlik bilgisi zinciri. Eğer
aws sts get-caller-identity başarılı oluyor ancak DynamoDB yine de bu hatayı veriyor,
uygulama ile AWS arasında bir proxy veya ara yazılım olup olmadığını kontrol edin; DynoTable ile konuşuyor
DynamoDB hiçbir aracı olmadan doğrudan makinenizden. Anahtarları tamir ettikten sonra veya
Saat sapmasını veya anahtarı düzelttikten sonra aktif profili doğrulamak için ⌘P’ye bas; tabloları yeniden açmadan önce Ayarlar → Profiller üzerinden bağlantı testi çalıştır.
İlgili hatalar
- The security token included in the request is invalid — kimlik bilgilerinin/belirtecin kendisi reddedilir.
- IncompleteSignatureException — Authorization başlığı yalnızca eşleşmeyen değil, hatalı biçimlendirilmiştir.
- Güvenlik belirtecinin süresi doldu
Kaynaklar
- Troubleshoot Signature Version 4 signing for AWS API requests — IAM User Guide
- Troubleshooting errors for the AWS CLI — AWS CLI User Guide
- Create a signed AWS API request — IAM User Guide
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.