Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Risolvi i problemi relativi alle richieste firmate per le API AWS
Importante
A meno che non utilizzi gli AWS SDK o la CLI, devi scrivere codice per calcolare le firme che forniscono informazioni di autenticazione nelle tue richieste. Il calcolo della firma SigV4 può essere un'operazione complessa e consigliamo di utilizzare gli SDK o la CLI AWS quando possibile.
Quando sviluppi codice che crea una richiesta firmata, potresti ricevere HTTP 403 da. SignatureDoesNotMatch
Servizi AWS Questi errori indicano che il valore della firma nella richiesta HTTP AWS non corrisponde alla firma Servizio AWS calcolata. Gli errori HTTP 401 Unauthorized
vengono restituiti quando le autorizzazioni non consentono al chiamante di effettuare la richiesta.
Le richieste API potrebbero restituire un errore se:
-
La richiesta API non è firmata e utilizza l'autenticazione IAM.
-
Le credenziali IAM utilizzate per firmare la richiesta non sono corrette o non dispongono delle autorizzazioni per richiamare l'API.
-
La firma della richiesta API firmata non corrisponde alla firma calcolata dal servizio AWS .
-
L'intestazione della richiesta API non è corretta.
Nota
Aggiorna il protocollo di AWS firma da Signature versione 2 (SigV2) a AWS Signature versione 4 (SigV4) prima di esplorare altre soluzioni di errore. Servizi come Amazon S3 e le regioni non supportano più la firma SigV2.
Possibili cause
Errori delle credenziali
Assicurati che la richiesta dell'API sia firmata con SigV4. Se la richiesta API non è firmata, potresti ricevere l'errore: Missing Authentication Token
. Aggiungi la firma mancante e invia nuovamente la richiesta.
Verifica che le credenziali di autenticazione della chiave di accesso e della chiave segreta siano corrette. Se la chiave di accesso non è corretta, potresti ricevere l'errore: Unauthorized
. Assicurati che l'entità utilizzata per firmare la richiesta sia autorizzata a effettuare la richiesta. Per informazioni dettagliate, vedi Risoluzione dei problemi dei messaggi di errore di accesso rifiutato.
Errori nella richiesta canonica e nella stringa di firma
Se hai calcolato la richiesta canonica in Fase 2: creazione di un hash della richiesta canonica o Fase 3: creazione di una stringa da firmare, la fase di verifica della firma eseguita dal servizio ha esito negativo con li seguente messaggio di errore:
The request signature we calculated does not match the signature you provided
Quando il AWS servizio riceve una richiesta firmata, ricalcola la firma. Se sussistono differenze nei valori, le firme non corrispondono. Confronta la stringa e la richiesta canonica con la tua richiesta firmata con il valore nel messaggio di errore. Modifica il processo di firma se riscontri differenze.
Nota
Puoi anche verificare di non aver inviato la richiesta tramite una proxy che modifica le intestazioni o la richiesta.
Esempio di richiesta canonica
GET -------- HTTP method / -------- Path. For API stage endpoint, it should be /{stage-name}/{resource-path} -------- Query string key-value pair. Leave it blank if the request doesn't have a query string. content-type:application/json -------- Header key-value pair. One header per line. host:0123456789.execute-api.us-east-1.amazonaws.com -------- Host and x-amz-date are required headers for all signed requests. x-amz-date:20220806T024003Z content-type;host;x-amz-date -------- A list of signed headers d167e99c53f15b0c105101d468ae35a3dc9187839ca081095e340f3649a04501 -------- Hash of the payload
Per verificare che la chiave segreta corrisponda all'ID della chiave di accesso, puoi testarla con un'implementazione funzionante nota. Ad esempio, utilizza un AWS SDK o la AWS CLI per effettuare una richiesta a. AWS
Intestazione della richiesta API
Assicurati che l'intestazione di autorizzazione SigV4 che hai aggiunto in Fase 4: calcolo della firma includa la chiave di credenziale corretta, simile alla seguente:
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=example-generated-signature
Se la chiave di credenziale è mancante o errata, potresti ricevere l'errore: Authorization header requires 'Credential' parameter. Authorization
header requires 'Signature' parameter.
Assicurati che la richiesta di autorizzazione SigV4 includa anche la data della richiesta utilizzando HTTP
Date
o l'intestazione x-amz-date
.
Errori nell'ambito delle credenziali
L'ambito delle credenziali che hai creato in Fase 3: creazione di una stringa da firmare limita una firma a una data, una regione e un servizio specifici. Questa stringa ha il seguente formato:
YYYYMMDD
/region
/service
/aws4_request
Nota
Se si utilizza SigV4a, la regione non è inclusa nell'ambito delle credenziali.
Data
Se l'ambito delle credenziali non specifica la stessa data dell'intestazione di x-amz-date, il passaggio di verifica della firma fallisce e viene visualizzato il seguente messaggio di errore:
Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP
Se la richiesta specifica un orario futuro, la fase di verifica della firma fallisce e viene visualizzato il seguente messaggio di errore:
Signature not yet current:date
is still later thandate
Se la richiesta è scaduta, la fase di verifica della firma fallisce e viene visualizzato il seguente messaggio di errore:
Signature expired:date
is now earlier thandate
Regione
Se l'ambito delle credenziali non specifica la stessa regione della richiesta, il passaggio di verifica della firma fallisce e viene visualizzato il seguente messaggio di errore:
Credential should be scoped to a valid Region, not region-code
Servizio
Se l'ambito delle credenziali non specifica lo stesso servizio dell'intestazione di host, il passaggio di verifica della firma fallisce e viene visualizzato il seguente messaggio di errore:
Credential should be scoped to correct service: 'service
'
Stringa di terminazione
Se l'ambito delle credenziali termina con aws4_request, il passaggio di verifica della firma fallisce e viene visualizzato il seguente messaggio di errore:
Credential should be scoped with a valid terminator: 'aws4_request'
Errori nella chiave di firma
Gli errori causati da un'errata derivazione della chiave di firma o dall'uso improprio della crittografia sono più difficili da risolvere. Dopo aver verificato che la stringa canonica e la stringa da firmare siano corrette, puoi anche verificare la presenza di uno dei seguenti problemi:
-
La chiave di accesso segreta non corrisponde all'ID della chiave di accesso specificato.
-
Si è verificato un problema con il codice di derivazione della chiave.
Per verificare che la chiave segreta corrisponda all'ID della chiave di accesso, puoi testarla con un'implementazione funzionante nota. Ad esempio, usa un AWS SDK o il AWS CLI per effettuare una richiesta a. AWS Per alcuni esempi, consultare Richiesta di esempi di firma.