AWS Signature Version 4 pour les requêtes d’API
Important
Si vous utilisez un AWS SDK (voir Exemples de code et bibliothèques
Dans les régions qui prennent en charge plusieurs versions de signature, les demandes de signature manuelle impliquent que vous devez spécifier la version de signature à utiliser. Lorsque vous fournissez des demandes à des points d'accès multi-régions, les kits SDK et la CLI utiliseront automatiquement Signature version 4A sans configuration supplémentaire.
Les informations d’authentification que vous envoyez dans une demande doivent inclure une signature. AWS Signature Version 4 (SigV4) est le protocole de signature d’AWS permettant d’ajouter des informations d’authentification aux requêtes d’API AWS.
Vous n’utilisez pas votre clé d’accès secrète pour signer les requêtes d’API. Vous utilisez plutôt le processus de signature SigV4. La signature des requêtes implique :
-
Création d’une requête canonique basée sur les détails de la requête.
-
Calcul d’une signature à l’aide de vos informations d’identification AWS.
-
Ajout de cette signature à la requête en tant qu’en-tête Autorisation.
AWS réplique ensuite ce processus et vérifie la signature, accordant ou refusant l’accès en conséquence.
Symmetric SigV4 vous demande de dériver une clé qui est limitée à un seul service AWS, dans une seule Région AWS, un jour donné. La clé et la signature calculée sont donc différentes pour chaque région, ce qui signifie que vous devez connaître la région à laquelle la signature est destinée.
Asymmetric Signature Version 4 (SigV4a) est une extension qui permet de signer avec un nouvel algorithme et de générer des signatures individuelles vérifiables dans plusieurs Régions AWS. Avec SigV4A, vous pouvez signer une demande pour plusieurs régions, avec un routage et un basculement fluides entre les régions. Lorsque vous utilisez l’AWS SDK ou AWS CLI pour invoquer une fonctionnalité qui nécessite une signature multirégionale, le type de signature est automatiquement modifié pour utiliser SigV4a. Pour plus de détails, consultez Fonctionnement d’AWS SigV4a.
Fonctionnement d’AWS SigV4
Les étapes suivantes décrivent le processus général de calcul d’une signature à l’aide de SigV4 :
-
La chaîne à signer dépend du type de demande. Par exemple, lorsque vous utilisez l’en-tête d’autorisation HTTP ou les paramètres de requête pour l’authentification, vous utilisez une combinaison d’éléments de requête pour créer la chaîne à signer. Pour une requête HTTP POST, la politique
POST
de la demande est la chaîne que vous signez. -
La clé de signature est une série de calculs, le résultat de chaque étape étant intégré dans la suivante. La dernière étape est la clé de signature.
-
Lorsqu'un service AWS reçoit une demande authentifiée, il recrée la signature à l'aide des informations d'authentification contenues dans la demande. Si les signatures correspondent, le service traite la demande. Sinon, il rejette la demande.
Pour en savoir plus, consultez Éléments d'une signature de requête d'API AWS.
Fonctionnement d’AWS SigV4a
Sigv4a utilise des signatures asymétriques basées sur le chiffrement à clé publique-privée. SIGv4a suit un processus de dérivation d’informations d’identification similaire à celui de SIGv4, sauf que Sigv4a utilise la même clé pour signer toutes les requêtes sans avoir besoin de dériver une clé de signature distincte en fonction de la date, du service et de la région. Une paire de clés Elliptic Curve Digital Signature Algorithm
Le système utilise le chiffrement asymétrique pour vérifier les signatures multirégions, de sorte qu’AWSn’a besoin de stocker que vos clés publiques. Les clés publiques ne sont pas secrètes et ne peuvent pas être utilisées pour signer des requêtes. Des signatures asymétriques sont requises pour les requêtes d’API multirégionales, comme pour les points d’accès multirégionaux Amazon S3.
Les étapes suivantes décrivent le processus général de calcul d’une signature à l’aide de SigV4a :
-
La chaîne à signer dépend du type de demande. Par exemple, lorsque vous utilisez l’en-tête d’autorisation HTTP ou les paramètres de requête pour l’authentification, vous utilisez une combinaison d’éléments de requête pour créer la chaîne à signer. Pour une requête HTTP POST, la politique
POST
de la demande est la chaîne que vous signez. -
La clé de signature est dérivée d’une clé d’accès secrète AWS par le biais d’une série de calculs, le résultat de chaque étape étant intégré dans la suivante. La dernière étape produit la paire de clés.
-
Lorsqu’un service AWS reçoit une requête signée avec SigV4a, AWS vérifie la signature en utilisant uniquement la moitié publique de la paire de clés. Si la signature est valide, la requête est authentifiée et le service la traite. Les requêtes dont les signatures ne sont pas valides sont rejetées.
Pour plus d’informations sur SigV4a pour les requêtes d’API multirégions, consultez le projet sigv4a-signing-examples
Quand signer des demandes ?
Lorsque vous écrivez du code personnalisé pour envoyer des demandes d’API à AWS, vous devez inclure le code permettant de signer les demandes. Vous pouvez écrire du code personnalisé pour les raisons suivantes :
-
Vous utilisez un langage de programmation pour lequel il n'existe aucun kit SDK AWS.
-
Vous voulez exercer un contrôle complet de la façon dont les demandes sont envoyées à AWS.
Alors que les requêtes d’API authentifient l’accès avec AWS Sigv4, les AWS SDK et l’AWS CLI authentifient vos requêtes à l’aide des clés d’accès que vous fournissez. Pour plus d’informations sur l’authentification avec AWS SDK et l’AWS CLI, consultez Ressources supplémentaires.
Pourquoi les demandes sont-elles signées ?
Le processus de signature aide à sécuriser les demandes de différentes façons :
-
Vérifier l'identité du demandeur
Les demandes authentifiées nécessitent une signature que vous créez à l'aide de vos clés d'accès (ID de clé d'accès, clé d'accès secrète). Si vous utilisez des informations d'identification de sécurité temporaires, les calculs de signature nécessitent également un jeton de sécurité. Pour plus d'informations, veuillez consulter la rubrique Accès par programmation des informations d'identification de sécurité AWS.
-
Protéger les données en transit
Pour éviter qu'une demande ne soit falsifiée pendant son transit, certains de ses éléments sont utilisés pour calculer son hachage (digest) et la valeur de hachage obtenue est incluse comme partie intégrante de la demande. Lorsqu'un Service AWS reçoit la demande, il utilise les mêmes informations pour calculer un hachage et le compare à la valeur de hachage de votre demande. Si les valeurs ne correspondent pas, AWS refuse la demande.
-
Assurer une protection contre les attaques potentielles par relecture
Dans la plupart des cas, une demande doit parvenir à AWS dans les cinq minutes suivant son horodatage. Sinon, AWS refuse la demande.
AWS SigV4 peut être exprimé dans l’en-tête d’autorisation HTTP ou sous forme de chaîne de requête dans l’URL. Pour en savoir plus, consultez Méthodes d'authentification.
Ressources supplémentaires
-
Pour plus d’informations sur le processus de signature SigV4 pour les différents services, consultez Demander des exemples de signature.
-
Pour configurer les informations d’identification pour l’accès programmatique à AWS CLI, consultez Authentification et informations d’identification d’accès dans le Guide de l’utilisateur de l’interface de ligne de commande AWS.
-
Les SDK AWS comprennent un code source sur GitHub pour la signature des requêtes d'API AWS. Pour obtenir des exemples de code, veuillez consulter Exemples de projets dans le référentiel d'échantillons AWS.
-
AWS SDK for .NET – AWS4Signer.cs
-
AWS SDK for C++ – AWSAuthV4Signer.cpp
-
AWS SDK for Go : sigv4.go
-
AWS SDK for Java – BaseAws4Signer.java
-
AWS SDK for JavaScript : signature-v4
-
AWS SDK for PHP – SignatureV4.php
-
AWS SDK for Python (Boto) – signers.py
-
AWS SDK for Ruby – signer.rb
-