Génération et configuration d'un certificat SSL pour l'authentification backend - Amazon API Gateway

Génération et configuration d'un certificat SSL pour l'authentification backend

Vous pouvez utiliser API Gateway pour générer un certificat SSL et utiliser sa clé publique sur le backend afin de vérifier que les requêtes HTTP adressées à votre système backend proviennent d'API Gateway. Votre backend HTTP peut ainsi contrôler et accepter uniquement les demandes provenant d'Amazon API Gateway, même si le backend est accessible publiquement.

Note

Certains backends peuvent ne pas prendre en charge l'authentification de client SSL comme le fait API Gateway et peuvent renvoyer une erreur de certificat SSL. Pour obtenir la liste des serveurs principaux non compatibles, consultez Remarques importantes concernant Amazon API Gateway.

Les certificats SSL générés par API Gateway sont auto-signés et seule la clé publique d'un certificat est visible dans la console API Gateway ou via les API.

Génération d'un certificat de client à l'aide de la console API Gateway

  1. Dans le volet de navigation principal, sélectionnez Client Certificates.

  2. Dans le volet Client Certificates, choisissez Generate Client Certificate.

  3. Le cas échéant, pour le champ Edit (Modifier), choisissez d'ajouter un titre descriptif pour le certificat généré et choisissez Save (Enregistrer) pour enregistrer la description. API Gateway génère un nouveau certificat et renvoie le GUID du nouveau certificat, ainsi que la clé publique codée en PEM.

Vous êtes maintenant prêt à configurer une API pour utiliser le certificat.

Configuration d'une API pour utiliser les certificats SSL

Ces instructions supposent que vous avez déjà terminé Génération d'un certificat de client à l'aide de la console API Gateway.

  1. Dans la console API Gateway, créez ou ouvrez une API pour laquelle vous souhaitez utiliser le certificat de client. Vérifiez que l'API a été déployée à une étape.

  2. Sélectionnez Stages sous l'API sélectionnée, puis choisissez une étape.

  3. Dans le volet Stage Editor, sélectionnez un certificat sous la section Client Certificate.

  4. Pour enregistrer les paramètres, choisissez Save Changes.

    Si l'API a déjà été déployée dans la console API Gateway, vous devez la redéployer pour que les changements prennent effet. Pour plus d'informations, consultez Redéploiement d'une API REST jusqu'à une étape.

Une fois qu'un certificat a été sélectionné pour l'API et enregistré, API Gateway l'utilise pour tous les appels aux intégrations HTTP de votre API.

Appel de test pour vérifier la configuration de certificat client

  1. Sélectionnez une méthode d'API. Dans le champ Client, sélectionnez Test.

  2. A partir de Client Certificate, sélectionnez Test pour appeler la demande de méthode.

API Gateway présente le certificat SSL choisi pour permettre au backend HTTP d'authentifier l'API.

Configuration du serveur HTTPS Server back-end pour vérifier le certificat client

Ces instructions supposent que vous avez déjà terminé Génération d'un certificat de client à l'aide de la console API Gateway et téléchargé une copie du certificat client. Vous pouvez télécharger un certificat client en appelant la commande clientcertificate:by-id de l'API REST API Gateway ou get-client-certificate de l'interface de ligne de commande AWS.

Avant de configurer un serveur HTTPS backend pour vérifier le certificat SSL client d'API Gateway, vous devez avoir obtenu la clé privée codée PEM et un certificat côté serveur qui est fourni par une autorité de certification reconnue.

Si le nom de domaine du serveur est myserver.mydomain.com, la valeur CNAME du certificat du serveur doit être myserver.mydomain.com ou *.mydomain.com.

Les autorités de certification prises en charge comprennent Let's Encrypt ou l'une des Autorités de certification prises en charge par API Gateway pour HTTP et les intégrations de proxy HTTP.

Par exemple, supposons que le fichier de certificat client est apig-cert.pem et que les fichiers de clé privée et de certificat du serveur sont server-key.pem et server-cert.pem, respectivement. Pour un serveur Node.js dans le back-end, vous pouvez configurer le serveur comme suit :

var fs = require('fs'); var https = require('https'); var options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), ca: fs.readFileSync('apig-cert.pem'), requestCert: true, rejectUnauthorized: true }; https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(443);

Pour une application Express de nœud, vous pouvez utiliser les modules client-certificate-auth pour authentifier des demandes client avec des certificats codés en PEM.

Pour les autres serveurs HTTPS, consultez la documentation du serveur.

Rotation d'un certificat client arrivant à expiration

Le certificat client généré par API Gateway est valide pendant 365 jours. Vous devez effectuer la rotation de ce certificat avant qu'un certificat client sur une étape d'API arrive à expiration afin d'éviter les temps d'arrêt pour l'API. Vous pouvez vérifier la date d'expiration du certificat en appelant la commande clientCertificate:by-id de l'API REST API Gateway ou la commande get-client-certificate de l'interface de ligne de commande AWS, puis en inspectant la propriété expirationDate renvoyée.

Pour faire pivoter un certificat client, procédez comme suit :

  1. Générez un nouveau certificat client en appelant la commande clientcertificate:generate de l'API REST API Gateway ou la commande generate-client-certificate de l'interface de ligne de commande AWS. Dans ce didacticiel, nous supposons que l'ID du nouveau certificat client est ndiqef.

  2. Mettez à jour le serveur backend pour inclure le nouveau certificat client. Ne supprimez pas le certificat client existant pour l'instant.

    Certains serveurs peuvent nécessiter un redémarrage pour terminer la mise à jour. Consultez la documentation du serveur pour voir si vous devez redémarrer le serveur pendant la mise à jour.

  3. Mettez à jour l'étape d'API pour utiliser le nouveau certificat client en appelant la commande stage:update de l'API REST API Gateway, avec l'ID du nouveau certificat client (ndiqef) :

    PATCH /restapis/{restapi-id}/stages/stage1 HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170603T200400Z Authorization: AWS4-HMAC-SHA256 Credential=... { "patchOperations" : [ { "op" : "replace", "path" : "/clientCertificateId", "value" : "ndiqef" } ] }

    ou en appelant la commande de l'interface de ligne de commande update-stage.

  4. Mettez à jour le serveur backend pour supprimer l'ancien certificat.

  5. Supprimez l'ancien certificat d'API Gateway en appelant la commande clientcertificate:delete de l'API REST API Gateway, en spécifiant le clientCertificateId (a1b2c3) de l'ancien certificat :

    DELETE /clientcertificates/a1b2c3

    ou en appelant la commande de l'interface de ligne de commande delete-client-certificate :

    aws apigateway delete-client-certificate --client-certificate-id a1b2c3

Pour effectuer la rotation d'un certificat client dans la console pour une API déployée précédemment, procédez comme suit :

  1. Dans le volet de navigation principal, sélectionnez Client Certificates.

  2. Dans le volet Client Certificates, choisissez Generate Client Certificate.

  3. Ouvrez l'API pour laquelle vous souhaitez utiliser le certificat client.

  4. Sélectionnez Stages sous l'API sélectionnée, puis choisissez une étape.

  5. Dans le volet Stage Editor (Éditeur de l'étape), sélectionnez le nouveau certificat sous la section Client Certificate (Certificat client).

  6. Pour enregistrer les paramètres, choisissez Save Changes.

    Vous devez redéployer l'API pour que les modifications prennent effet. Pour plus d'informations, consultez Redéploiement d'une API REST jusqu'à une étape.