Ho utilizzato un URL prefirmato Amazon Simple Storage Service (Amazon S3) per effettuare richieste al mio bucket Amazon S3 e ho ricevuto un messaggio di errore "SignatureDoesNotMatch" o "403 Forbidden".
Breve descrizione
Quando generi un URL prefirmato, il client calcola una firma univoca per autenticare la richiesta. Dopodiché, Amazon S3 calcola una firma in base ai parametri inviati dal client nella richiesta HTTP e confronta le due firme. Se le firme non corrispondono, viene visualizzato l'errore "SignatureDoesNotMatch".
Risoluzione
Per risolvere il problema, controlla le seguenti impostazioni di configurazione per la tua richiesta con URL prefirmato Amazon S3.
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Convalida il metodo HTTP
Quando generi un URL prefirmato, assegni un'azione HTTP all'URL. Assicurati che l'azione inviata dal client nella richiesta HTTP corrisponda all'azione HTTP nell'URL. Ad esempio, se assegni l'azione GET all'URL, anche l'azione HTTP nella richiesta deve essere GET.
Controlla la chiave di accesso segreta
Verifica se la chiave di accesso segreta utilizzata per generare l'URL prefirmato è nello stato Non corretta, Non valida o Disattivata. La chiave di accesso segreta entra in uno di questi stati quando si aggiungono alla chiave caratteri non corrispondenti o una spaziatura errata. Accertati di utilizzare la chiave di accesso corretta per rigenerare l'URL prefirmato.
Verifica il nome del bucket e il nome della chiave nell'URL
Verifica che il nome del bucket e il nome dell'oggetto siano corretti e corrispondano a quelli presenti nella generazione della firma dell'URL. Anche la maiuscola del nome deve corrispondere.
Verifica le intestazioni utilizzate nella richiesta HTTP
Assicurati che le intestazioni HTTP utilizzate per generare la firma corrispondano alle intestazioni che il client invia a S3 nella richiesta HTTP.
Inoltre, assicurati che il valore dell'intestazione corrisponda al valore generato durante il calcolo della firma.
Verifica che la Regione AWS sia corretta
Prima di inviare l'URL prefirmato S3, verifica che la Regione AWS in cui hai generato l'URL corrisponda alla Regione in cui esiste attualmente il bucket.
Esegui la richiesta API GetBucketLocation per controllare la Regione di un bucket S3. Puoi anche eseguire il comando AWS CLI get-bucket-location:
$ aws s3api get-bucket-location --bucket example-bucket
Esempio di output:
{
"LocationConstraint": "us-west-2"
}
Verifica il periodo di validità rispetto alla data del sistema
Se imposti la data del sistema su una data futura successiva al periodo di validità della firma digitale, la firma appare scaduta e non è valida. Se imposti la data del sistema su una data precedente al periodo di validità della firma, la firma non è valida e ha esito negativo.
Informazioni correlate
List of error codes (Elenco dei codici di errore)
Perché l'URL prefirmato per il mio bucket Amazon S3 è scaduto prima della scadenza che ho specificato?
Scarica e carica oggetti con URL prefirmati
Quando provo ad accedere a un oggetto S3, ricevo l'errore di richiesta scaduta "Request has expired". Perché?