InvalidSignatureException: firma scaduta

TL;DR — Una richiesta AWS firmata deve raggiungere il servizio entro ~5 minuti dal timestamp inserito nella sua firma. Questo errore significa che l'orologio della tua macchina è troppo lontano dall'ora del server AWS (disallineamento dell'orologio), quindi la firma è "scaduta" o "non è ancora aggiornata". Correggi l'orologio del client: attiva la sincronizzazione dell'ora NTP.

Cosa significa

InvalidSignatureException: Signature expired: 20260712T101500Z is now earlier
than 20260712T101700Z (20260712T102200Z - 5 min.)

Signature Version 4 firma ciascuna richiesta insieme a un timestamp. AWS convalida il timestamp rispetto al proprio orologio e rifiuta qualsiasi cosa al di fuori di una finestra di circa cinque minuti: "Firma scaduta" (orologio del client indietro) o "Firma non ancora attuale" (orologio del client avanti). È un HTTP 400, lato client; un tentativo cieco fallisce nuovamente finché l'orologio non viene corretto.

Perché succede

  • Deriva dell'orologio del client: l'host che esegue la tua app ha un orologio impreciso (VM in pausa/ripresa, contenitore senza sincronizzazione dell'ora, dispositivo IoT/edge, runner CI).
  • NTP non in esecuzione: nulla mantiene disciplinato l'orologio del sistema operativo, che quindi supera lentamente la tolleranza di 5 minuti.
  • Gestione errata di fuso orario/UTC in un firmatario inserito manualmente che calcola erroneamente il timestamp della richiesta.
  • Processo sospeso da tempo: un laptop o un ambiente in stile Lambda ripreso dopo una lunga pausa con un senso del tempo stantio.

Come risolverlo

  1. Abilitare la sincronizzazione dell'ora NTP sull'host (chrony/systemd-timesyncd/w32time) e verificare che l'orologio sia entro un secondo dall'UTC reale.
  2. Confronta gli orologi: controlla l'ora UTC del client rispetto a una fonte attendibile: se è sfasato di qualche minuto, questa è la causa.
  3. Riavviare il servizio di sincronizzazione dell'ora (o eseguire nuovamente la sincronizzazione manualmente) dopo il ripristino della VM o l'avvio del contenitore.
  4. Aggiorna l'AWS SDK: gli SDK moderni rilevano errori di disallineamento dell'orologio e riprovano automaticamente con un offset corretto; un vecchio SDK potrebbe non esserlo.

Preferisci gli AWS SDK ufficiali rispetto a un firmatario SigV4 scritto a mano in modo che il timestamp e la gestione dei tentativi di inclinazione vengano eseguiti per te.

In DynoTable

DynoTable si basa sull'AWS SDK per la firma, che include lo sfasamento dell'orologio correzione sulle build moderne (Connetti un account AWS). Se questo errore appare solo in uno script personalizzato ma DynoTable si connette correttamente, the il problema è isolato rispetto all'orologio o al firmatario del client: confrontare con Test Connessione sul profilo in Impostazioni → Profili. Su corridori CI o VM che sono in ibernazione, abilita NTP prima di eseguire l'app o i test.

I moderni AWS SDK rilevano errori di disallineamento dell'orologio e riprovano con un offset corretto; se tu visualizzalo solo in un firmatario creato manualmente, aggiorna l'SDK o abilita NTP sull'host prima di incolpare DynamoDB stesso. DynoTable utilizza esclusivamente il percorso SDK: no assemblaggio SigV4 personalizzato. Il generatore di query conferma le letture hanno esito positivo una volta che l'orologio e il profilo sono allineati.

Errori correlati

Fonti

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.