Tutorial: Erstellen einer grundlegenden Lambda@Edge-Funktion (Konsole) - Amazon CloudFront

Tutorial: Erstellen einer grundlegenden Lambda@Edge-Funktion (Konsole)

Dieses Tutorial zeigt Ihnen, wie Sie mit Lambda@Edge beginnen können, indem Sie eine Node.js-Beispielfunktion erstellen und konfigurieren, die in CloudFront ausgeführt wird. Dieses Beispiel fügt einer Antwort HTTP-Sicherheits-Header hinzu, wenn CloudFront eine Datei abruft. (Dies kann die Sicherheit und den Datenschutz einer Website verbessern.)

Sie benötigen keine eigene Website für dieses Tutorial. Wenn Sie jedoch Ihre eigene Lambda@Edge-Lösung erstellen möchten, führen Sie ähnliche Schritte aus und wählen aus denselben Optionen aus.

Schritt 1: Registrieren für AWS-Konto

Registrieren Sie sich für ein AWS-Konto, falls Sie das noch nicht getan haben. Weitere Informationen finden Sie unter So melden Sie sich für ein AWS-Konto an.

Schritt 2: Erstellen einer CloudFront-Verteilung

Bevor Sie die Lambda@Edge-Beispielfunktion erstellen, benötigen Sie eine CloudFront-Umgebung, in der Sie arbeiten können, mit einem Ursprung für die Bereitstellung von Inhalten.

In diesem Beispiel erstellen Sie eine CloudFront-Verteilung, die einen Amazon S3-Bucket als Ursprung für die Verteilung verwendet. Wenn Sie bereits über eine Umgebung verfügen, die Sie benutzen können, können Sie diesen Schritt überspringen.

So erstellen Sie eine CloudFront-Verteilung mit einem Amazon S3-Ursprung
  1. Erstellen Sie einen Amazon S3-Bucket mit einer oder zwei Dateien, z. B. Image-Dateien, als Beispielinhalt. Für Hilfe folgen Sie den Schritten unter Hochladen Ihrer Inhalte zu Amazon S3. Stellen Sie sicher, dass Sie Berechtigungen erteilen, um öffentliche Lesezugriff auf die Objekte in Ihrem Bucket zu gewähren.

  2. Erstellen Sie eine CloudFront-Verteilung und fügen Sie Ihren S3-Bucket als Ursprung hinzu, indem Sie die Schritte unter Erstellen einer CloudFront-Web-Verteilung befolgen. Wenn Sie bereits eine Verteilung haben, können Sie stattdessen den Bucket als Ursprung für diese Verteilung hinzufügen.

    Tipp

    Notieren Sie sich die ID Ihrer Verteilung. Später in diesem Tutorial, wenn Sie einen CloudFront-Auslöser für Ihre Funktion hinzufügen, müssen Sie die ID für Ihre Distribution in einer Dropdown-Liste auswählen – z. B. E653W22221KDDL.

Schritt 3: Erstellen Ihrer Funktion

In diesem Schritt erstellen Sie eine Lambda-Funktion anhand einer Vorlage in der Lambda-Konsole. Die Funktion fügt Code hinzu, um Sicherheitsheader in Ihrer CloudFront-Verteilung zu aktualisieren.

So erstellen Sie eine Lambda-Funktion:
  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die AWS Lambda-Konsole unter https://console.aws.amazon.com/lambda/.

    Wichtig

    Stellen Sie sicher, dass Sie sich in der AWS-Region USA-Ost-1 (Nord-Virginia) (us-east-1) befinden. Sie müssen sich in dieser Region befinden, um Lambda@Edge-Funktionen erstellen zu können.

  2. Wählen Sie Create function (Funktion erstellen).

  3. Wählen Sie auf der Seite Create function (Funktion erstellen) die Option Use a blueprint (Eine Vorlage verwenden) aus und filtern Sie dann nach den CloudFront-Vorlagen, indem Sie „cloudfront“ in das Suchfeld eingeben.

    Anmerkung

    CloudFront-Vorlagen sind nur in der Region US-Ost 1 (Nord-Virginia) (us-east-1) verfügbar.

  4. Wählen Sie die Vorlage HTTP-Antwortheader ändern als Vorlage für Ihre Funktion.

  5. Geben Sie folgende Informationen zu Ihrer Funktion ein:

    • Funktionsname – Geben Sie einen Namen für Ihre Funktion ein.

    • Ausführungsrolle – Wählen Sie, wie Sie die Berechtigungen für Ihre Funktion festlegen. Um die empfohlene grundlegende Lambda@Edge-Berechtigungsrichtlinienvorlage zu verwenden, wählen Sie Create a new role from AWS policy templates aus.

    • Rollenname – Geben Sie einen Namen für die Rolle ein, die von der Richtlinienvorlage erstellt wird.

    • Richtlinienvorlagen – Lambda fügt die Richtlinienvorlage Grundlegende Lambda@Edge-Berechtigungen automatisch hinzu, da Sie eine CloudFront-Vorlage als Grundlage für Ihre Funktion ausgewählt haben. Diese Richtlinienvorlage fügt Ausführungsrollenberechtigungen hinzu, mit denen CloudFront Ihre Lambda-Funktion für Sie an CloudFront-Standorten weltweit ausführen kann. Weitere Informationen finden Sie unter Einrichten von IAM-Berechtigungen und -Rollen für Lambda@Edge.

  6. Wählen Sie unten auf der Seite Funktion erstellen aus.

  7. Wählen Sie im daraufhin angezeigten Bereich In Lambda@Edge bereitstellen die Option Abbrechen aus. (Für dieses Tutorial müssen Sie den Funktionscode ändern, bevor Sie die Funktion in Lambda@Edge bereitstellen.)

  8. Scrollen Sie nach unten bis zum Abschnitt Code-Quelle.

  9. Ersetzen Sie den Vorlagencode durch eine Funktion, die die Sicherheits-Header ändert, die Ihren Ursprung zurückgibt. Beispielsweise könnten Sie Code wie den folgenden verwenden:

    '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. Wählen Sie Datei und dann Speichern aus, um den aktualisierten Code zu speichern.

  11. Wählen Sie Bereitstellen.

Fahren Sie mit dem nächsten Abschnitt fort, um einen CloudFront-Auslöser für das Ausführen der Funktion hinzuzufügen.

Schritt 4: Hinzufügen eines CloudFront-Auslösers zum Ausführen der Funktion

Da Sie nun über eine Lambda-Funktion zum Aktualisieren von Sicherheitsheadern verfügen, konfigurieren Sie den CloudFront-Auslöser so, dass er die Funktion ausführt, damit in jede Antwort, die CloudFront vom Ursprung für Ihre Verteilung erhält, Header eingefügt werden.

So konfigurieren Sie den CloudFront-Auslöser für Ihre Funktion:
  1. Wählen Sie in der Lambda-Konsole auf der Seite Funktionsübersicht Ihrer Funktion die Option Auslöser hinzufügen aus.

  2. Wählen Sie für die Auslöserkonfiguration die Option CloudFront aus.

  3. Wählen Sie In Lambda@Edge bereitstellen aus.

  4. Geben Sie im Bereich Bereitstellen in Lambda@Edge unter CloudFront-Auslöser konfigurieren die folgenden Informationen an:

    • Distribution – Die ID der CloudFront-Distribution, die Ihrer Funktion zugeordnet werden soll. Wählen Sie in der Dropdown-Liste die Distributions-ID aus.

    • Cacheverhalten – Das Cacheverhalten, das für den Auslöser verwendet werden soll. Behalten Sie in diesem Beispiel den Wert * bei, der das Standard-Cache-Verhalten Ihrer Verteilung bezeichnet. Weitere Informationen finden Sie unter Einstellungen für das Cache-Verhalten im Thema Referenz für alle Distributionseinstellungen.

    • CloudFront-Ereignis – Der Auslöser, der angibt, wann Ihre Funktion ausgeführt wird. Wir möchten, dass die Sicherheitsheader-Funktion ausgeführt wird, wenn CloudFront eine Antwort vom Ursprung zurückgibt. Wählen Sie in der Dropdown-Liste Ursprungsantwort aus. Weitere Informationen finden Sie unter Hinzufügen von Auslösern für eine Lambda@Edge-Funktion.

  5. Aktivieren Sie das Kontrollkästchen Bereitstellung in Lambda@Edge bestätigen.

  6. Wählen Sie Deploy (Bereitstellen) aus, um den Auslöser hinzuzufügen und die Funktion an AWS-Standorten weltweit zu replizieren.

  7. Warten Sie, bis die Funktion repliziert wurde. Dies dauert in der Regel mehrere Minuten.

    Sie können überprüfen, ob die Replikation abgeschlossen ist, indem Sie die CloudFront-Konsole öffnen und sich Ihre Verteilung ansehen. Warten Sie darauf, dass sich der Status der Distribution von Wird bereitgestellt in ein Datum und eine Uhrzeit ändert, was bedeutet, dass Ihre Funktion repliziert wurde. Zur Überprüfung der Funktionstätigkeit befolgen Sie die Schritte im nächsten Abschnitt.

Schritt 5: Überprüfen, ob die Funktion funktioniert

Nachdem Sie nun Ihre Lambda-Funktion erstellt und einen Auslöser konfiguriert haben, um sie für eine CloudFront-Verteilung auszuführen, prüfen Sie, ob die Funktion das tut, was Sie von ihr erwarten. In diesem Beispiel überprüfen wir die von CloudFront zurückgegebenen HTTP-Header, um sicherzustellen, dass die Sicherheitsheader hinzugefügt werden.

Überprüfen, ob Ihre Lambda@Edge-Funktion Sicherheitsheader hinzufügt
  1. Geben Sie in einem Browser die URL für eine Datei in Ihrem S3-Bucket ein. Sie können beispielsweise eine URL wie die folgende Verwenden: https://d111111abcdef8.cloudfront.net/image.jpg.

    Weitere Informationen über den in der Datei-URL zu verwendenden CloudFront-Domänennamen finden Sie unter Anpassen des URL-Formats für Dateien in CloudFront.

  2. Öffnen Sie die Web-Developer-Symbolleiste Ihres Browsers. Öffnen Sie beispielsweise in Ihrem Browserfenster in Chrome das Kontextmenü (Rechtsklick) und wählen Sie Inspect (Untersuchen) aus.

  3. Wählen Sie die Registerkarte Network (Netzwerk) aus.

  4. Laden Sie die Seite, um Ihr Image anzuzeigen, und wählen Sie dann auf der linken Seite eine HTTP-Anforderung. Sie sehen die HTTP-Header in einem separaten Fenster.

  5. Sehen Sie sich die Liste der HTTP-Header an, um zu überprüfen, ob die erwarteten Sicherheitsheader in der Liste enthalten sind. Beispielsweise könnten Sie Header wie im folgenden Screenshot gezeigt sehen.

    HTTP-Header-Liste, in der die erwarteten Sicherheitsheader gekennzeichnet sind.

Wenn die Sicherheitsheader in Ihrem Header-Liste enthalten sind, dann ist das hervorragend! Sie haben erfolgreich Ihre erste Lambda@Edge-Funktion erstellt. Gibt CloudFront Fehler zurück oder es gibt andere Probleme, fahren Sie mit dem nächsten Schritt fort, um die Probleme zu beheben.

Schritt 6: Beheben von Problemen

Wenn CloudFront Fehler zurückgibt oder die Sicherheitsheader nicht wie erwartet hinzufügt, können Sie die Ausführung Ihrer Funktion untersuchen, indem Sie sich die CloudWatch Logs ansehen. Stellen Sie sicher, dass die Protokolle an dem AWS-Standort gespeichert werden, der dem Standort, an dem die Funktion ausgeführt wird, am nächsten liegt.

Wenn Sie beispielsweise die Datei von London aus anzeigen, versuchen Sie, die Region in der CloudWatch-Konsole auf EU (London) zu setzen.

So prüfen Sie CloudWatch Logs für Ihre Lambda@Edge-Funktion:
  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Ändern Sie Region auf den Speicherort, der angezeigt wird, wenn Sie die Datei in Ihrem Browser anzeigen. Hier wird die Funktion ausgeführt.

  3. Klicken Sie im linken Bereich auf Logs (Protokolle), um die Protokolle für Ihre Verteilung anzuzeigen.

Weitere Informationen finden Sie unter Überwachen von CloudFront-Metriken mit Amazon CloudWatch.

Schritt 7: Bereinigen der Ressourcen für Ihr Beispiel

Wenn Sie nur für dieses Tutorial einen Amazon-S3-Bucket und eine CloudFront-Verteilung erstellt haben, löschen Sie die AWS-Ressourcen, die Sie zugewiesen haben, damit keine Gebühren mehr anfallen. Nachdem Sie Ihre AWS-Ressourcen gelöscht haben, ist der Inhalt, den Sie hinzugefügt haben, nicht mehr verfügbar.

Aufgaben

Löschen des S3-Buckets

Bevor Sie Ihren Amazon S3-Bucket löschen, stellen Sie sicher, dass die Protokollierung für den Bucket deaktiviert ist. Andernfalls schreibt AWS weiter Protokolle in Ihren Bucket, während Sie ihn löschen.

Deaktivieren Sie die Protokollierung für einen Bucket wie folgt:
  1. Öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie den Bucket aus, und wählen Sie dann Properties (Eigenschaften).

  3. Wählen Sie unter Properties (Eigenschaften) Logging (Protokollierung) aus.

  4. Deaktivieren Sie das Kontrollkästchen Enabled (Aktiviert).

  5. Wählen Sie Save (Speichern) aus.

Jetzt können Sie Ihren Bucket löschen. Weitere Informationen erhalten Sie unter Löschen eines Buckets im Amazon Simple Storage Service-Konsolenbenutzerhandbuch.

Löschen Sie die Lambda-Funktion

Anleitungen zum Löschen der Zuweisung der Lambda-Funktion und optional der Funktion selbst finden Sie unter Löschen von Lambda@Edge-Funktionen und Replikaten.

Löschen der CloudFront-Verteilung

Bevor Sie eine CloudFront-Verteilung löschen, müssen Sie sie deaktivieren. Eine deaktivierte Verteilung funktioniert nicht mehr und es fallen keine weiteren Kosten für sie an. Sie können eine deaktivierte Verteilung jederzeit wieder aktivieren. Nachdem Sie eine deaktivierte Verteilung gelöscht haben, ist sie nicht länger verfügbar.

So deaktivieren und löschen Sie eine CloudFront-Verteilung:
  1. Öffnen Sie die CloudFront-Konsole unter https://console.aws.amazon.com/cloudfront/v4/home.

  2. Klicken Sie mit der rechten Maustaste auf die Verteilung, die Sie deaktivieren möchten, und anschließend auf Disable (Deaktivieren).

  3. Wenn Sie zur Bestätigung aufgefordert werden, wählen Sie Yes, Disable (Ja, deaktivieren).

  4. Wählen Sie die deaktivierte Verteilung aus, und klicken Sie dann auf Delete (Löschen).

  5. Wenn Sie zur Bestätigung aufgefordert werden, wählen Sie Yes, Delete.

Ähnliche Informationen

Nun, da Sie eine grundlegende Vorstellung davon haben, wie Lambda@Edge-Funktionen funktionieren, können Sie hier weitere Informationen erhalten: