Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Authentification des demandes : utilisation des paramètres de requête (AWS Signature (version 4)
Comme décrit dans la présentation de l'authentification (voirMéthodes d'authentification), vous pouvez fournir des informations d'authentification à l'aide de paramètres de chaîne de requête. L'utilisation de paramètres de requête pour authentifier les demandes est utile lorsque vous souhaitez exprimer une demande entièrement dans une URL. Cette méthode est également appelée présignature d'une URL.
Un scénario d'utilisation pour les URL présignées est que vous pouvez accorder un accès temporaire à vos ressources Amazon S3. Par exemple, vous pouvez intégrer une URL présignée sur votre site Web ou l'utiliser dans un client de ligne de commande (tel que Curl) pour télécharger des objets.
Note
Vous pouvez également utiliser le AWS CLI pour créer des URL présignées. Pour plus d’informations, consultez presign dans la Référence des commandes de l’AWS CLI .
Voici un exemple d'URL présignée.
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>
Dans l'exemple d'URL, notez ce qui suit :
-
Les entrées de ligne sont ajoutées pour des raisons de lisibilité.
-
La valeur
X-Amz-Credentialdans l'URL affiche le caractère « / » uniquement pour des raisons de lisibilité. En pratique, il doit être codé au format%2F. Par exemple :&X-Amz-Credential=<your-access-key-id>%2F20130721%2Fus-east-1%2Fs3%2Faws4_request
Le tableau suivant décrit les paramètres de requête de l'URL qui fournissent des informations d'authentification.
| Nom du paramètre de la chaîne d'interrogation | Exemple de valeur |
|---|---|
X-Amz-Algorithm |
Identifie la version de AWS Signature et l'algorithme que vous avez utilisé pour calculer la signature. Pour AWS la version 4 de Signature, vous définissez la valeur de ce paramètre sur |
X-Amz-Credential |
Outre l'ID de votre clé d'accès, ce paramètre fournit également l'étendue (Région AWS et le service) pour lesquels la signature est valide. Cette valeur doit correspondre au champ d'application que vous utilisez dans les calculs de signature, comme indiqué dans la section suivante. Le format général de cette valeur de paramètre est le suivant :
Par exemple :
Pour Amazon S3, la |
X-Amz-Date |
Le format de date et d'heure doit respecter la norme ISO 8601 et doit être formaté avec le format « |
X-Amz-Expires |
Indique la période, en secondes, pendant laquelle l'URL présignée générée est valide. Par exemple, Une URL pré-signée peut être valide pendant sept jours au maximum, car la clé de signature que vous utilisez pour le calcul des signatures est valide pendant sept jours au maximum. |
X-Amz-SignedHeaders |
Répertorie les en-têtes que vous avez utilisés pour calculer la signature. Les en-têtes suivants sont obligatoires pour les calculs de signature :
NotePour plus de sécurité, vous devez signer tous les en-têtes de demande que vous prévoyez d'inclure dans votre demande. |
X-Amz-Signature |
Fournit la signature pour authentifier votre demande. Cette signature doit correspondre à la signature calculée par Amazon S3 ; sinon, Amazon S3 refuse la demande. Par exemple, Les calculs de signature sont décrits dans la section suivante. |
X-Amz-Security-Token |
Paramètre d'information d'identification facultatif si vous utilisez des informations d'identification provenant du service STS. |
Calculer une signature
Le schéma suivant illustre le processus de calcul de la signature.
Le tableau suivant décrit les fonctions présentées dans le schéma. Vous devez implémenter du code pour ces fonctions.
| Fonction | Description |
|---|---|
Lowercase() |
Convertit la chaîne en minuscules. |
Hex() |
Encodage en minuscules en base 16. |
SHA256Hash() |
Fonction de hachage cryptographique Secure Hash Algorithm (SHA, algorithme de hachage sécurisé). |
HMAC-SHA256() |
Calcule HMAC à l'aide de l'algorithme SHA256 avec la clé de signature fournie. Il s'agit de la signature finale. |
Trim() |
Supprimez tous les espaces blancs de début ou de fin. |
UriEncode() |
L'URI code chaque octet. UriEncode() doit appliquer les règles suivantes :
ImportantLes UriEncode fonctions standard fournies par votre plateforme de développement peuvent ne pas fonctionner en raison de différences d'implémentation et de l'ambiguïté associée dans les RFC sous-jacents. Nous vous recommandons d'écrire votre propre UriEncode fonction personnalisée pour garantir le bon fonctionnement de votre encodage. Voici un exemple de fonction UriEncode () en Java.
|
Pour plus d'informations sur le processus de signature (détails sur la création d'une demande canonique, chaîne à signer et calculs de signature), consultezCalculs de signature pour l'en-tête d'autorisation : transfert de la charge utile en un seul bloc (AWS Signature (version 4). Le processus est généralement le même, sauf que la création de CanonicalRequest dans une URL présignée diffère comme suit :
-
Vous n'incluez pas de hachage de charge utile dans la requête canonique, car lorsque vous créez une URL présignée, vous ne connaissez pas le contenu de la charge utile car l'URL est utilisée pour télécharger une charge utile arbitraire. Au lieu de cela, vous utilisez une chaîne constante
UNSIGNED-PAYLOAD. -
La chaîne de requête canonique doit inclure tous les paramètres de requête du tableau précédent, à l'exception
X-Amz-Signaturede. -
Pour S3, vous devez inclure le paramètre de
X-Amz-Security-Tokenrequête dans l'URL si vous utilisez des informations d'identification provenant du service STS. -
Les en-têtes canoniques doivent inclure l'en-tête HTTP
host. Si vous prévoyez d'inclure l'un desx-amz-*en-têtes, ces en-têtes doivent également être ajoutés pour le calcul de la signature. Vous pouvez éventuellement ajouter tous les autres en-têtes que vous prévoyez d'inclure dans votre demande. Pour plus de sécurité, vous devez signer autant d'en-têtes que possible. Si vous ajoutez un en-tête signé qui est également un paramètre de requête signé et que leur valeur diffère, vous recevrez unInvalidRequestmessage d'erreur car l'entrée est en conflit.
Un exemple
Supposons que vous ayez un objet test.txt dans votre examplebucket seau. Vous souhaitez partager cet objet avec d'autres personnes pendant 24 heures (86 400 secondes) en créant une URL présignée.
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>
Les étapes suivantes illustrent d'abord les calculs de signature, puis la construction de l'URL présignée. L'exemple fait les hypothèses supplémentaires suivantes :
-
L'horodatage de la demande est.
Fri, 24 May 2013 00:00:00 GMT -
Le compartiment se trouve dans la région USA Est (Virginie du Nord), et les informations d'identification
Scopeet lesSigning Keycalculs sont utilisésus-east-1comme spécificateur de région. Pour de plus amples informations, veuillez consulter Régions et points de terminaison dans le manuel Références générales AWS.
Vous pouvez utiliser cet exemple comme scénario de test pour vérifier la signature calculée par votre code ; toutefois, vous devez utiliser le même nom de compartiment, la même clé d'objet, le même horodatage et les exemples d'informations d'identification suivants :
| Paramètre | Value |
|---|---|
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") -
Signature
aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404Vous disposez maintenant de toutes les informations nécessaires pour créer une URL présignée. L'URL qui en résulte pour cet exemple s'affiche comme suit (vous pouvez l'utiliser pour comparer votre URL présignée) :
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
Exemple 2
L'exemple suivant (sans rapport avec l'exemple précédent) montre une URL présignée avec le X-Amz-Security-Token paramètre.
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>