Utilisation de l'API Query - Amazon ElastiCache for Redis

Utilisation de l'API Query

Paramètres Query (Requête)

Ces demandes basées sur Query HTTP sont des demandes HTTP qui utilisent le verbe HTTP GET ou POST et un paramètre Query appelé Action.

Chaque demande Query doit inclure certains paramètres communs pour gérer l'authentification et la sélection d'une action.

Certaines actions demandent des listes de paramètres. Ces listes sont spécifiées en utilisant la notation param.n. Les valeurs de n sont des nombres entiers à partir de 1.

Authentification de demande Query

Vous pouvez envoyer uniquement des demandes Query via HTTPS, et vous devez inclure une signature dans chaque demande Query. Cette section explique comment créer la signature. La méthode décrite dans la procédure suivante est appelée signature version 4.

Voici les étapes de base utilisées pour authentifier les demandes à AWS. Ce processus suppose que vous êtes enregistré avec AWS et disposez d'un ID de clé d'accès et d'une clé d'accès secrète.

Processus d'authentification des requêtes

  1. L'expéditeur crée une demande à AWS.

  2. L'expéditeur calcule la signature de la demande, un hachage avec clé pour un code HMAC (code d'authentification d'une empreinte cryptographique de message avec clé) utilisant une fonction de hachage SHA-1, comme défini dans la prochaine section de cette rubrique.

  3. L'expéditeur de la demande envoie les données de la demande, la signature et l'ID de clé d'accès (l'identifiant de la clé d'accès secrète utilisée) à AWS.

  4. AWS utilise l'identifiant de la clé d'accès pour rechercher la clé d'accès secrète.

  5. En appliquant le même algorithme utilisé pour calculer la signature dans la demande, AWS génère une signature à partir des données de la demande et de la clé d'accès secrète.

  6. Si la signature correspond, la demande est considérée comme authentique. Si la comparaison échoue, la demande est rejetée, et AWS renvoie une réponse d'erreur.

Note

Si une demande contient un paramètre Timestamp, la signature calculée pour la demande expire 15 minutes après sa valeur.

Si une demande contient un paramètre Expires, la signature expire au moment spécifié par le paramètre Expires.

Pour calculer la signature de la demande

  1. Créez la chaîne de requête de base que vous utiliserez à une étape ultérieure de la procédure :

    1. Triez les composants de la chaîne de requête UTF-8 par nom de paramètre disposé selon l’ordre naturel des octets. Les paramètres peuvent provenir de l'URI GET ou du corps POST (lorsque le type de contenu est application/x-www-form-urlencoded).

    2. URL-encodez le nom et les valeurs du paramètre en appliquant les règles suivantes :

      1. Ne pas URL-encoder les caractères que le RFC définit comme autorisés. Les caractères autorisés sont A à Z, a à z, 0 à 9, le trait d'union ( - ), le trait de soulignement ( _ ), le point final ( . ) et le tilde ( ~ ).

      2. %-encodez tous les autres caractères avec %XY, où X et Y représentent les caractères hexadécimaux 0 à 9 et les lettres majuscules A à F.

      3. %-encodez les caractères UTF-8 étendus dans la forme %XY%ZA....

      4. %-encodez le caractère espace en %20 (et non pas en +, comme le font les schémas d'encodage courants).

    3. Utilisez le symbole équivalent ( = ) (ASCII caractère 61) pour séparer les noms de paramètres codés de leurs valeurs codées, même si la valeur du paramètre est vide.

    4. Séparez les paires nom-valeur en insérant une esperluette ( & ) (code ASCII 38).

  2. Créez la chaîne de connexion en appliquant la grammaire suivante (le « \n » représente une nouvelle ligne ASCII).

    StringToSign = HTTPVerb + "\n" + ValueOfHostHeaderInLowercase + "\n" + HTTPRequestURI + "\n" + CanonicalizedQueryString <from the preceding step>

    Le composant HTTPRequestURI est le composant du chemin absolu HTTP de l'URI menant jusqu'à la chaîne de requête de demandes sans cependant l'inclure. Si le composant HTTPRequestURI est vide, utilisez une barre oblique ( / ).

  3. Définissez un HMAC conforme à RFC 2104 à l’aide de la chaîne que vous venez de créer, votre clé d’accès secrète comme clé et l’algorithme haché SHA256 ou SHA1.

    Pour plus d'informations, consultez https://www.ietf.org/rfc/rfc2104.txt.

  4. Convertissez la valeur qui est générée en Base64.

  5. Incluez la valeur comme la valeur du paramètre Signature dans la demande.

Par exemple, voici un exemple de demande (sauts de ligne ajoutés pour plus de clarté).

https://elasticache.us-west-2.amazonaws.com/ ?Action=DescribeCacheClusters &CacheClusterIdentifier=myCacheCluster &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-12-01

Pour la chaîne de requête précédente, vous devez calculer la signature HMAC sur la chaîne suivante.

GET\n elasticache.amazonaws.com\n Action=DescribeCacheClusters &CacheClusterIdentifier=myCacheCluster &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-12-01 &X-Amz-Algorithm=&AWS;4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE%2F20140523%2Fus-west-2%2Felasticache%2Faws4_request &X-Amz-Date=20141201T223649Z &X-Amz-SignedHeaders=content-type%3Bhost%3Buser-agent%3Bx-amz-content-sha256%3Bx-amz-date content-type: host:elasticache.us-west-2.amazonaws.com user-agent:CacheServicesAPICommand_Client x-amz-content-sha256: x-amz-date:

Le résultat est la demande signée suivante.

https://elasticache.us-west-2.amazonaws.com/ ?Action=DescribeCacheClusters &CacheClusterIdentifier=myCacheCluster &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2014-12-01 &X-Amz-Algorithm=&AWS;4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20141201/us-west-2/elasticache/aws4_request &X-Amz-Date=20141201T223649Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=2877960fced9040b41b4feaca835fd5cfeb9264f768e6a0236c9143f915ffa56

Pour plus d'informations sur le processus de signature et le calcul de la signature de la demande, consultez la rubrique processus de signature Signature Version 4 et ses sous-rubriques.