InvalidSignatureException: Signature expired
TL;DR — İmzalı bir AWS isteği, imzasına gömülü zaman damgasından ~5 dakika içinde hizmete ulaşmalıdır. Bu hata, makinenizin saatinin AWS sunucu saatinden çok uzak olduğu (saat kayması) anlamına gelir, dolayısıyla imza "süresi geçmiş" ya da "henüz güncel değil"dir. İstemci saatini düzeltin — NTP zaman eşitlemesini etkinleştirin.
Ne anlama gelir
InvalidSignatureException: Signature expired: 20260712T101500Z is now earlier
than 20260712T101700Z (20260712T102200Z - 5 min.)Signature Version 4, her isteği bir zaman damgasıyla birlikte imzalar. AWS o zaman damgasını kendi saatine karşı doğrular ve yaklaşık beş dakikalık bir pencerenin dışındaki her şeyi reddeder — ya Signature expired (istemci saati geride) ya da Signature not yet current (istemci saati ileride). Bu, istemci tarafında bir HTTP 400'dür; saat düzeltilene kadar körü körüne bir yeniden deneme yine başarısız olur.
Neden olur
- İstemci saat kayması — uygulamanızı çalıştıran ana bilgisayarın hatalı bir saati var (duraklatılmış/sürdürülmüş VM, zaman eşitlemesi olmayan kapsayıcı, IoT/kenar cihazı, CI çalıştırıcısı).
- NTP çalışmıyor — işletim sistemi saatini disiplinli tutan hiçbir şey yok, dolayısıyla yavaşça 5 dakikalık toleransı geçer.
- Elle yapılan bir imzalayıcıda istek zaman damgasını yanlış hesaplayan yanlış saat dilimi/UTC ele alışı.
- Uzun süre askıya alınmış süreç — uzun bir duraklamadan sonra bayat bir zaman algısıyla sürdürülen bir dizüstü ya da Lambda tarzı ortam.
Nasıl düzeltilir
- Ana bilgisayarda NTP zaman eşitlemesini etkinleştirin (
chrony/systemd-timesyncd/w32time) ve saatin gerçek UTC'nin bir saniye içinde olduğunu doğrulayın. - Saatleri karşılaştırın: istemcinin UTC saatini güvenilir bir kaynağa karşı kontrol edin — dakikalarca sapıyorsa, neden budur.
- Bir VM sürdürmesinden ya da kapsayıcı başlatmasından sonra zaman eşitleme hizmetini yeniden başlatın (ya da elle yeniden eşitleyin).
- AWS SDK'sını yükseltin — modern SDK'lar saat kayması hatalarını algılar ve düzeltilmiş bir offset ile otomatik yeniden dener; eski bir SDK bunu yapamayabilir.
Zaman damgası ve kaymada-yeniden-deneme ele alışının senin için yapılması için elle yazılmış bir SigV4 imzalayıcısı yerine resmi AWS SDK'larını tercih edin.
DynoTable’da
DynoTable imzalama için AWS SDK kullanır; modern sürümlerde saat sapması düzeltmesi vardır (AWS hesabı bağla). Hata yalnızca özel betiklerde çıkıp DynoTable bağlantısı sorunsuzsa sorun o istemcinin saatinde veya imzalayıcısındadır — Ayarlar → Profiller altındaki profilin bağlantı testi ile karşılaştır. Uykuya geçen CI runner veya VM’lerde uygulama/test çalıştırmadan önce NTP’yi aç.
Modern AWS SDK'ları saat kayması hatalarını algılar ve düzeltilmiş bir sapmayla yeniden dener; bunu yalnızca elle yazılmış bir imzalayıcıda görüyorsan, DynamoDB'yi suçlamadan önce SDK'yı yükselt ya da ana makinede NTP'yi aç. DynoTable yalnızca SDK yolunu kullanır — özel SigV4 kurgusu yoktur. Sorgu oluşturucu, saat ve profil hizalandıktan sonra okumaların başarılı olduğunu doğrular.
İlgili hatalar
- The security token expired — geçici kimlik bilgileri yaşlandı (farklı bir "süresi geçti" türü).
- The request signature we calculated does not match — bir saat değil, hatalı bir anahtardan kaynaklanan imza uyuşmazlığı.
- Credential should be scoped to a valid region — bir bölge kapsamı SigV4 hatası.
Kaynaklar
- AWS Signature Version 4 for API requests — IAM User Guide (the five-minute replay-protection window)
- Troubleshoot Signature Version 4 signing for AWS API requests — IAM User Guide ("Signature expired" / "Signature not yet current" messages)
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Clock-skew correction — AWS Developer Tools Blog (SDKs detect skew errors and retry with a corrected offset)
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.