Risoluzione dei problemi relativi alla firma di Signature Version 4 per le richieste AWS API - 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à.

Risoluzione dei problemi relativi alla firma di Signature Version 4 per le richieste AWS API

Importante

A meno che non si utilizzi l'CLIopzione AWS SDKs o, è necessario scrivere codice per calcolare le firme che forniscono informazioni di autenticazione nelle richieste. Il calcolo delle firme SigV4 può essere un'impresa complessa e ti consigliamo di utilizzare AWS SDKs o CLI quando possibile.

Quando sviluppi codice che crea una richiesta firmata, potresti ricevere HTTP SignatureDoesNotMatch 403 da. Servizi AWS Questi errori indicano che il valore della firma nella HTTP richiesta AWS non corrisponde alla firma Servizio AWS calcolata. HTTPUnauthorizedGli errori 401 vengono restituiti quando le autorizzazioni non consentono al chiamante di effettuare la richiesta.

APIle richieste potrebbero restituire un errore se:

  • La API richiesta non è firmata e utilizza IAM l'autenticazione. API

  • Le IAM credenziali utilizzate per firmare la richiesta non sono corrette o non dispongono delle autorizzazioni per richiamarle. API

  • La firma della API richiesta firmata non corrisponde alla firma calcolata dal servizio. AWS

  • L'intestazione della API richiesta 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 Regions non supportano più la firma SigV2.

Errori delle credenziali

Assicurati che la API richiesta sia firmata con SigV4. Se la API richiesta 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, consultare Risolvi i messaggi di errore di accesso negato.

Errori nella richiesta canonica e nella stringa di firma

Se hai calcolato la richiesta canonica in Crea un hash della richiesta canonica o Crea 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, usa un AWS SDK o the AWS CLI per effettuare una richiesta a. AWS

Intestazione della richiesta API

Quando l'intestazione di autorizzazione è vuota, la chiave o la firma della credenziale è mancante o errata, l'intestazione non inizia con il nome di un algoritmo o le coppie chiave-valore non includono un segno uguale, viene visualizzato uno dei seguenti errori:

  • L'intestazione di autorizzazione non può essere vuota.

  • L'intestazione di autorizzazione richiede il parametro «Credential».

  • L'intestazione di autorizzazione richiede il parametro «Signature».

  • La firma contiene una coppia chiave=valore non valida (segno di uguale mancante) nell'intestazione di autorizzazione.

Assicurati che l'intestazione di autorizzazione SigV4 che hai aggiunto includa la chiave di credenziale corretta e Calcola la firma includa anche la data della richiesta utilizzando Date o l'intestazione. HTTP x-amz-date

Se hai ricevuto un IncompleteSignatureException errore e la costruzione della firma è corretta, puoi verificare che l'intestazione di autorizzazione non sia stata modificata durante il transito verso il Servizio AWS calcolando un hash SHA -256 e la codifica B64 dell'intestazione di autorizzazione nella tua richiesta lato client.

  1. Ottieni l'intestazione di autorizzazione che hai inviato nella richiesta. L'intestazione dell'autorizzazione appare simile all'esempio seguente:

    Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=example-generated-signature
  2. Calcola un hash SHA -256 dell'intestazione di autorizzazione.

    hashSHA256(rawAuthorizationHeader) = hashedAuthorizationHeader
  3. Codifica l'intestazione di autorizzazione con hash nel formato Base64.

    base64(hashedAuthorizationHeader) = encodedHashedAuthorizationHeader
  4. Confronta la stringa con hash e codificata che hai appena calcolato con la stringa che hai ricevuto nel messaggio di errore. Il tuo messaggio di errore dovrebbe essere simile al seguente esempio:

    com.amazon.coral.service#IncompleteSignatureException: The signature contains an in-valid key=value pair (missing equal-sign) in Authorization header (hashed with SHA-256 and encoded with Base64): '9c574f83b4b950926da4a99c2b43418b3db8d97d571b5e18dd0e4f3c3ed1ed2c'.
  • Se i due hash sono diversi, una parte dell'intestazione di autorizzazione è cambiata durante il transito. Questa modifica potrebbe essere dovuta al fatto che i gestori della rete o del client allegano intestazioni firmate o modificano in qualche modo l'intestazione di autorizzazione.

  • Se i due hash corrispondono, l'intestazione di autorizzazione inviata nella richiesta corrisponde a quella ricevuta. AWS Controlla il messaggio di errore che hai ricevuto per determinare se il problema è il risultato di credenziali o firme errate. Questi errori sono descritti nelle altre sezioni di questa pagina.

Errori nell'ambito delle credenziali

L'ambito delle credenziali che hai creato in Crea 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 del x-amz-date header, la fase di verifica della firma ha esito negativo 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 del host header, la fase di verifica della firma ha esito negativo e viene visualizzato il seguente messaggio di errore:

Credential should be scoped to correct service: 'service'
Stringa di terminazione

Se l'ambito delle credenziali non termina con aws4_request, la fase di verifica della firma ha esito negativo 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 fare una richiesta a AWS. Per alcuni esempi, consultare Richiesta di esempi di firma.