Didacticiel : création d’une fonction Lambda@Edge basique (console) - Amazon CloudFront

Didacticiel : création d’une fonction Lambda@Edge basique (console)

Ce didacticiel vous montre comment démarrer avec Lambda@Edge en créant et en configurant un exemple de fonction Node.js qui s’exécute dans CloudFront. Cette exemple ajoute des en-têtes de sécurité HTTP à une réponse lorsque CloudFront récupère un fichier. (Cette opération peut améliorer la sécurité et la confidentialité d’un site Web.)

Vous n’avez pas besoin d’avoir un site Web pour suivre ce didacticiel. Cependant, lorsque vous choisissez de créer votre propre solution Lambda@Edge, vous suivez des étapes similaires et sélectionnez les mêmes options.

Étape 1 : s'inscrire à un Compte AWS

Si vous ne l’avez pas encore fait, créez un Compte AWS. Pour plus d’informations, consultez S’inscrire à un Compte AWS.

Étape 2 : créer une distribution CloudFront

Avant de créer l'exemple de fonction Lambda@Edge, vous devez pouvoir utiliser un environnement CloudFront qui inclut une origine à partir de laquelle diffuser du contenu.

Pour cet exemple, vous créez une distribution CloudFront qui utilise un compartiment Amazon S3 comme origine de la distribution. Si vous avez déjà un environnement à utiliser, vous pouvez ignorer cette étape.

Pour créer une distribution CloudFront avec une origine Amazon S3
  1. Créez un compartiment Amazon S3 avec un fichier ou deux, par exemple des fichiers image, comme exemples de contenu. Pour obtenir de l'aide, suivez les étapes dans Chargement de votre contenu sur Amazon S3. Assurez-vous de définir des autorisations pour accorder l'accès public en lecture sur les objets de votre compartiment.

  2. Créez une distribution CloudFront et ajoutez votre compartiment S3 comme origine, en suivant la procédure décrite dans la section Créer une distribution web CloudFront. Si vous avez déjà une distribution, vous pouvez, au lieu de cela, ajouter le compartiment en tant qu'origine pour cette distribution.

    Astuce

    Notez votre ID de distribution. Au cours de ce didacticiel, lorsque vous ajoutez un déclencheur CloudFront pour votre fonction, vous devez choisir l’ID de votre distribution dans une liste déroulante, par exemple : E653W22221KDDL.

Étape 3 : créer votre fonction

Au cours de cette étape, vous créez une fonction Lambda à partir d’un modèle de plan dans la console Lambda. La fonction ajoute du code pour mettre à jour les en-têtes de sécurité dans votre distribution CloudFront.

Pour créer une fonction Lambda
  1. Connectez-vous à AWS Management Console et ouvrez la console AWS Lambda à l'adresse https://console.aws.amazon.com/lambda/.

    Important

    Assurez-vous d’être dans la Région AWS USA Est 1 (Virginie du Nord) (us-east-1). Vous devez être dans cette région pour créer des fonctions Lambda@Edge.

  2. Sélectionnez Créer une fonction.

  3. Dans la page Create function (Créer une fonction) choisissez Use a blueprint (Utiliser un plan), puis filtrez les plans CloudFront en saisissant cloudfront dans le champ de recherche.

    Note

    Les plans CloudFront ne sont disponibles que dans la région US-East-1 (N. Virginia) (USA Est 1 (Virginie du Nord)) (us-east-1).

  4. Choisissez le plan Modifier l’en-tête de réponse HTTP comme modèle pour votre fonction.

  5. Entrez les informations suivantes sur votre fonction :

    • Nom de la fonction : entrez un nom pour votre fonction.

    • Rôle d’exécution : choisissez la façon de définir les autorisations pour votre fonction. Pour utiliser le modèle de stratégie d'autorisations Lambda@Edge de base recommandé, choisissez Créer un nouveau rôle à partir des modèles de stratégie AWS.

    • Nom du rôle : entrez un nom pour le rôle créé par le modèle de stratégie.

    • Modèles de politique : Lambda ajoute automatiquement le modèle de politique Autorisations Lambda@Edge de base, car vous avez choisi un plan CloudFront comme base pour votre fonction. Ce modèle de stratégie ajoute les autorisations pour le rôle d'exécution, qui permettent à CloudFront d'exécuter votre fonction Lambda pour vous dans les emplacements CloudFront à travers le monde. Pour plus d’informations, consultez Définition des autorisations et rôles IAM pour Lambda@Edge.

  6. Dans le bas de la page, choisissez Créer une fonction.

  7. Dans le volet Déployer sur Lambda@Edge qui apparaît, choisissez Annuler. (Pour ce didacticiel, vous devez modifier le code de la fonction avant de déployer la fonction sur Lambda@Edge.)

  8. Faites défiler la page jusqu’à la section Source du code.

  9. Remplacez le code de modèle par une fonction qui modifie les en-têtes de sécurité renvoyés par votre origine. Par exemple, vous pouvez utiliser du code tel que :

    'use strict'; export const handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); };
  10. Choisissez Fichier, puis Enregistrer pour enregistrer votre code mis à jour.

  11. Choisissez Déployer.

Passez à la section suivante pour ajouter un déclencheur CloudFront afin d'exécuter la fonction.

Étape 4 : ajouter un déclencheur CloudFront pour exécuter la fonction

Maintenant que vous disposez d'une fonction Lambda pour mettre à jour les en-têtes de sécurité, configurez le déclencheur CloudFront afin d'exécuter votre fonction pour ajouter les en-têtes dans n'importe quelle réponse que CloudFront recevra de l'origine pour votre distribution.

Pour configurer le déclencheur CloudFront pour votre fonction
  1. Dans la console Lambda, sur la page Présentation de la fonction, choisissez Ajouter un déclencheur.

  2. Pour Configuration du déclencheur, choisissez CloudFront.

  3. Choisissez Déployer sur Lambda@Edge.

  4. Dans le volet Déployer sur Lambda@Edge, sous Configurer un déclencheur CloudFront, saisissez les informations suivantes :

    • Distribution : l’ID de distribution CloudFront à associer à votre fonction. Dans la liste déroulante, choisissez l’ID de distribution.

    • Comportement de cache : le comportement de cache à utiliser avec le déclencheur. Pour cet exemple, laissez la valeur définie sur *, qui correspond au comportement de cache par défaut de votre distribution. Pour plus d’informations, consultez Paramètres de comportement du cache dans la rubrique Référence de tous les paramètres de distribution.

    • Événement CloudFront : le déclencheur qui spécifie le moment où votre fonction s’exécute. Nous voulons que la fonction des en-têtes de sécurité s'exécute à chaque fois que CloudFront renvoie une réponse de l'origine. Dans la liste déroulante, choisissez Réponse de l’origine. Pour plus d’informations, consultez Ajout de déclencheurs pour une fonction Lambda@Edge.

  5. Cochez la case Confirmer le déploiement sur Lambda@Edge.

  6. Choisissez Deploy (Déployer) pour ajouter le déclencheur et répliquer la fonction dans les emplacements AWS à travers le monde.

  7. Attendez que la réplication de la fonction soit terminée. Cela prend généralement plusieurs minutes.

    Vous pouvez vérifier si la réplication est terminée en accédant à la console CloudFront et en visualisant votre distribution. Attendez que l’état de la distribution passe de Déploiement à une date et une heure, ce qui indique que votre fonction a été répliquée. Pour vérifier que la fonction s'exécute correctement, suivez les étapes de la section suivante.

Étape 5 : vérifier l’exécution de la fonction

Maintenant que vous avez créé votre fonction Lambda et configuré un déclencheur pour l'exécuter sur une distribution CloudFront, assurez-vous que le résultat de la fonction est conforme à ce que vous souhaitez. Dans cet exemple, nous vérifions les en-têtes HTTP que CloudFront renvoie pour nous assurer que les en-têtes de sécurité sont ajoutés.

Pour vérifier que votre fonction Lambda@Edge ajoute des en-têtes de sécurité
  1. Dans un navigateur, entrez l'URL d'un fichier dans votre compartiment S3. Par exemple, vous pouvez utiliser une URL similaire à https://d111111abcdef8.cloudfront.net/image.jpg.

    Pour plus d’informations sur le nom de domaine CloudFront à utiliser dans l’URL du fichier, consultez Personnalisation du format de l’URL pour les fichiers dans CloudFront.

  2. Ouvrez la barre d'outils Web Developer de votre navigateur. Par exemple, dans votre fenêtre de navigateur Chrome, ouvrez le menu contextuel (clic droit), puis choisissez Inspecter.

  3. Choisissez l'onglet Network (Réseau).

  4. Rechargez la page pour afficher votre image, puis choisissez une demande HTTP dans le volet de gauche. Vous voyez les en-têtes HTTP s'afficher dans un volet distinct.

  5. Parcourez la liste des en-têtes HTTP pour vérifier que les en-têtes de sécurité attendus sont inclus dans la liste. Par exemple, vous pourrez peut-être voir des en-têtes similaires à ceux affichés dans la capture d'écran suivante.

    Liste d'en-têtes HTTP avec les en-têtes de sécurité attendus mis en évidence.

Si les en-têtes de sécurité sont inclus dans votre liste d'en-têtes, cela signifie que vous avez créé avec succès votre première fonction Lambda@Edge. Si CloudFront renvoie des erreurs ou que d'autres problèmes sont signalés, passez à l'étape suivante pour résoudre les problèmes.

Étape 6 : résoudre les problèmes

Si CloudFront renvoie des erreurs ou n'ajoute pas les en-têtes de sécurité comme prévu, vous pouvez examiner l'exécution de votre fonction en consultant CloudWatch Logs. Veillez à utiliser les journaux stockés dans l'emplacement AWS le plus proche de celui où la fonction est exécutée.

Par exemple, si vous affichez le fichier à partir de Londres, essayez d'activer la région UE (Londres) dans la console CloudWatch.

Pour examiner les journaux CloudWatch Logs pour votre fonction Lambda@Edge
  1. Connectez-vous à AWS Management Console et ouvrez la console CloudWatch à l'adresse https://console.aws.amazon.com/cloudwatch/.

  2. Modifiez Région en spécifiant l'emplacement qui est montré lorsque vous affichez le fichier dans votre navigateur. C'est là que la fonction s'exécute.

  3. Dans le volet de gauche, choisissez Logs (Journaux) pour afficher les journaux de votre distribution.

Pour plus d’informations, consultez Surveillance des métriques CloudFront avec Amazon CloudWatch.

Étape 7 : nettoyer votre exemple de ressources

Si vous avez créé un compartiment Amazon S3 et une distribution CloudFront uniquement pour ce tutoriel, supprimez les ressources AWS que vous avez allouées afin de ne plus accumuler de frais. Une fois vos ressources AWS supprimées, le contenu que vous avez ajouté n'est plus disponible.

Tâches

Supprimer le compartiment S3

Avant de supprimer votre compartiment Amazon S3, assurez-vous que la journalisation est désactivée pour le compartiment. Sinon, AWS continue à écrire des journaux dans votre compartiment lorsque vous le supprimez.

Pour désactiver la journalisation pour un compartiment
  1. Ouvrez la console Amazon S3 sur https://console.aws.amazon.com/s3/.

  2. Sélectionnez le compartiment, puis choisissez Properties (Propriétés).

  3. Dans Properties (Propriétés), choisissez Logging (Journalisation).

  4. Désactivez la case à cocher Activé.

  5. Choisissez Enregistrer.

Vous pouvez maintenant supprimer votre compartiment. Pour plus d’informations, consultez Suppression d’un compartiment dans le Guide de l’utilisateur de la console Amazon Simple Storage Service.

Supprimer la fonction Lambda

Pour obtenir les instructions permettant de supprimer l’association à la fonction Lambda et, éventuellement, la fonction elle-même, consultez Suppression des fonctions et des réplicas Lambda@Edge.

Supprimer la distribution CloudFront

Avant de supprimer une distribution CloudFront, vous devez la désactiver. Une distribution désactivée n'est plus fonctionnelle et n'accumule pas de frais. Vous pouvez activer une distribution désactivée à tout moment. Une fois que vous avez supprimé une distribution désactivée, celle-ci n'est plus disponible.

Pour désactiver et supprimer une distribution CloudFront
  1. Ouvrez la console CloudFront à l'adresse https://console.aws.amazon.com/cloudfront/v4/home.

  2. Sélectionnez la distribution que vous souhaitez désactiver, puis choisissez Désactiver).

  3. Lorsque vous serez invité à confirmer l'opération, choisissez Oui, désactiver.

  4. Sélectionnez la distribution désactivée, puis choisissez Supprimer.

  5. Lorsque vous êtes invité à confirmer l'opération, choisissez Oui, supprimer.

Informations connexes

Maintenant que vous avez une idée générale de la manière dont les fonctions Lambda@Edge s'exécutent, lisez les documents suivants pour en savoir plus :