Risolvi i problemi relativi alle richieste firmate per le API AWS - AWS Identity and Access Management

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.

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 than date

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 than date
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.