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à.
Autenticazione delle richieste: utilizzo dei parametri di interrogazione (AWS Signature (versione 4)
Come descritto nella panoramica sull'autenticazione (vedereMetodi di autenticazione), è possibile fornire informazioni di autenticazione utilizzando i parametri della stringa di query. L'utilizzo dei parametri di interrogazione per autenticare le richieste è utile quando si desidera esprimere una richiesta interamente in un URL. Questo metodo viene anche chiamato prefirma di un URL.
Uno scenario d'uso per gli URL prefirmati è la possibilità di concedere un accesso temporaneo alle risorse Amazon S3. Ad esempio, puoi incorporare un URL prefirmato nel tuo sito Web o, in alternativa, utilizzarlo in un client a riga di comando (come Curl) per scaricare oggetti.
Nota
Puoi anche usare il AWS CLI per creare URL prefirmati. Per ulteriori informazioni, consulta presign nella documentazione di riferimento dei comandi della AWS CLI .
Di seguito è riportato un esempio di URL prefirmato.
https://examplebucket.s3.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=<your-access-key-id>/20130721/us-east-1/s3/aws4_request &X-Amz-Date=20130721T201207Z &X-Amz-Expires=86400 &X-Amz-SignedHeaders=host &X-Amz-Signature=<signature-value>
Nell'URL di esempio, nota quanto segue:
-
I feed di riga vengono aggiunti per motivi di leggibilità.
-
Il valore
X-Amz-Credentialnell'URL mostra il carattere “/” solo per leggibilità. In pratica, dovrebbe essere codificato come.%2FAd esempio:&X-Amz-Credential=<your-access-key-id>%2F20130721%2Fus-east-1%2Fs3%2Faws4_request
La tabella seguente descrive i parametri della query nell'URL che forniscono informazioni di autenticazione.
| Nome parametro stringa di query | Valore di esempio |
|---|---|
X-Amz-Algorithm |
Identifica la versione di AWS Signature e l'algoritmo utilizzato per calcolare la firma. Per la versione 4 di AWS Signature, imposti il valore di questo parametro su |
X-Amz-Credential |
Oltre all'ID della chiave di accesso, questo parametro fornisce anche l'ambito (Regione AWS e il servizio) per cui la firma è valida. Questo valore deve corrispondere all'ambito utilizzato nei calcoli della firma, illustrato nella sezione seguente. La forma generale per questo valore di parametro è la seguente:
Ad esempio:
Per Amazon S3, la |
X-Amz-Date |
Il formato di data e ora deve seguire lo standard ISO 8601 e deve essere formattato con il formato " |
X-Amz-Expires |
Fornisce il periodo di tempo, in secondi, per il quale l'URL prefirmato generato è valido. Ad Un URL prefirmato può essere valido per un massimo di sette giorni perché la chiave di firma utilizzata nel calcolo della firma è valida per un massimo di sette giorni. |
X-Amz-SignedHeaders |
Elenca le intestazioni che hai utilizzato per calcolare la firma. Per i calcoli delle firme sono necessarie le seguenti intestazioni:
NotaPer maggiore sicurezza, devi firmare tutte le intestazioni della richiesta che intendi includere nella richiesta. |
X-Amz-Signature |
Fornisce la firma per autenticare la richiesta. Questa firma deve corrispondere alla firma calcolata da Amazon S3; in caso contrario, Amazon S3 respinge la richiesta. Ad esempio, I calcoli delle firme sono descritti nella sezione seguente. |
X-Amz-Security-Token |
Parametro opzionale delle credenziali se si utilizzano credenziali provenienti dal servizio STS. |
Calcolo di una firma
Il diagramma seguente illustra il processo di calcolo della firma.
La tabella seguente descrive le funzioni mostrate nel diagramma. Per queste funzioni devi implementare il codice.
| Funzione | Description |
|---|---|
Lowercase() |
Converte la stringa in minuscolo. |
Hex() |
Codifica in base 16 minuscola. |
SHA256Hash() |
Funzione hash crittografica Secure Hash Algorithm (SHA). |
HMAC-SHA256() |
Calcola HMAC utilizzando l'algoritmo SHA256 con la chiave di firma fornita. Questa è la firma definitiva. |
Trim() |
Rimuove eventuali spazi bianchi all'inizio o alla fine della stringa. |
UriEncode() |
L'URI codifica ogni byte. UriEncode() deve applicare le seguenti regole:
ImportanteLe UriEncode funzioni standard fornite dalla piattaforma di sviluppo potrebbero non funzionare a causa delle differenze di implementazione e della relativa ambiguità nelle RFC sottostanti. Ti consigliamo di scrivere una UriEncode funzione personalizzata per assicurarti che la codifica funzioni. Di seguito è riportata una funzione example UriEncode () in Java.
|
Per ulteriori informazioni sul processo di firma (dettagli sulla creazione di una richiesta canonica, stringa da firmare e calcoli della firma), vedere. Calcolo delle firme per l'intestazione di autorizzazione: trasferimento del payload in un unico blocco (AWS Signature (versione 4) Il processo è generalmente lo stesso, tranne per il fatto che la creazione di CanonicalRequest un URL prefirmato è diversa come segue:
-
Non includi un hash del payload nella richiesta canonica, perché quando crei un URL prefirmato, non conosci il contenuto del payload perché l'URL viene utilizzato per caricare un payload arbitrario. Invece, usi una stringa costante.
UNSIGNED-PAYLOAD -
La Canonical Query String deve includere tutti i parametri di query della tabella precedente ad eccezione di.
X-Amz-Signature -
Per S3, è necessario includere il parametro di
X-Amz-Security-Tokenquery nell'URL se si utilizzano credenziali provenienti dal servizio STS. -
Le intestazioni canoniche devono includere l'intestazione HTTP.
hostSe prevedi di includere una qualsiasi delle intestazioni, questex-amz-*intestazioni devono essere aggiunte anche per il calcolo della firma. Facoltativamente, puoi aggiungere tutte le altre intestazioni che intendi includere nella richiesta. Per una maggiore sicurezza, dovresti firmare quante più intestazioni possibile. Se aggiungi un'intestazione firmata che è anche un parametro di query con firma e il valore differisce, riceverai unInvalidRequesterrore poiché l'input è in conflitto.
Un esempio
Supponiamo di avere un oggetto test.txt nel examplebucket secchio. Vuoi condividere questo oggetto con altri per un periodo di 24 ore (86400 secondi) creando un URL prefirmato.
https://examplebucket.s3.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request &X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host &X-Amz-Signature=<signature-value>
I passaggi seguenti illustrano prima i calcoli della firma e poi la costruzione dell'URL prefirmato. L'esempio formula i seguenti presupposti aggiuntivi:
-
Il timestamp della richiesta è.
Fri, 24 May 2013 00:00:00 GMT -
Il bucket si trova nella regione Stati Uniti orientali (Virginia settentrionale) e le credenziali
Scopee iSigning Keycalcoli vengono utilizzatius-east-1come identificatori della regione. Per ulteriori informazioni, consulta la sezione relativa a regioni ed endpoint nella Riferimenti generali di AWS.
È possibile utilizzare questo esempio come test case per verificare la firma calcolata dal codice; tuttavia, è necessario utilizzare lo stesso nome del bucket, chiave oggetto, timestamp e le seguenti credenziali di esempio:
| Parametro | Valore |
|---|---|
AWSAccessKeyId |
AKIAIOSFODNN7EXAMPLE |
AWSSecretAccessKey |
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
-
StringToSign
-
CanonicalRequest
GET /test.txt X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host host:examplebucket.s3.amazonaws.com host UNSIGNED-PAYLOAD -
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
Firma
aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404Ora hai tutte le informazioni per creare un URL prefirmato. L'URL risultante per questo esempio è mostrato come segue (puoi usarlo per confrontare il tuo URL prefirmato):
https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
Esempio 2
Di seguito è riportato un esempio (non correlato all'esempio precedente) che mostra un URL prefirmato con il parametro. X-Amz-Security-Token
https://examplebucket.s3.us-east-1.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request &X-Amz-Date=20200524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host &X-Amz-Security-Token=IQoJb3JpZ2luX2VjEMv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJGMEQCIBSUbVdj9YGs2g0HkHsOHFdkwOozjARSKHL987NhhOC8AiBPepRU1obMvIbGU0T%2BWphFPgK%2Fqpxaf5Snvm5M57XFkCqlAgjz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDQ3MjM4NTU0NDY2MCIM83pULBe5%2F%2BNm1GZBKvkBVslSaJVgwSef7SsoZCJlfJ56weYl3QCwEGr2F4BmCZZyFpmWEYzWnhNK1AnHMj5nkfKlKBx30XAT5PZGVrmq4Vkn9ewlXQy1Iu3QJRi9Tdod8Ef9%2FyajTaUGh76%2BF5u5a4O115jwultOQiKomVwO318CO4l8lv%2F3HhMOkpdanMXn%2B4PY8lvM8RgnzSu90jOUpGXEOAo%2F6G8OqlMim3%2BZmaQmasn4VYRvESEd7O72QGZ3%2BvDnDVnss0lSYjlv8PP7IujnvhZRnj0WoeOyMe1lL0wTG%2Fa9usH5hE52w%2FYUJccOn0OaZuyROuVsRV4Q70sbWQhUvYUt%2B0tUMKzm8vsFOp4BaNZFqobbjtb36Y92v%2Bx5kY6i0s8QE886jJtUWMP5ldMziClGx3p0mN5dzsYlM3GyiJ%2FO1mWkPQDwg3mtSpOA9oeeuAMPTA7qMqy9RNuTKBDSx9EW27wvPzBum3SJhEfxv48euadKgrIX3Z79ruQFSQOc9LUrDjR%2B4SoWAJqK%2BGX8Q3vPSjsLxhqhEMWd6U4TXcM7ku3gxMbzqfT8NDg%3D &X-Amz-Signature=<signature-value>