Wie verwende ich CloudFront, um eine statische Website bereitzustellen, die auf Amazon S3 gehostet wird?

Lesedauer: 9 Minute
0

Ich möchte eine statische Website in einem Amazon-Simple-Storage-Service-Bucket (Amazon S3) hosten. Dann möchte ich meine Website über eine Amazon-CloudFront-Verteilung bereitstellen.

Kurzbeschreibung

Um eine statische Website bereitzustellen, die auf Amazon S3 gehostet wird, verwenden Sie eine der folgenden Konfigurationen, um eine CloudFront-Verteilung bereitzustellen:

  • Verwenden Sie einen REST-API-Endpunkt als Ursprung und beschränken Sie den Zugriff mit einer Ursprungszugriffskontrolle (OAC) oder einer Ursprungszugriffsidentität (OAI)
    Hinweis: Es hat sich bewährt, eine Ursprungszugriffskontrolle (OAC) zu verwenden, um den Zugriff einzuschränken. Die Ursprungszugriffsidentität (OAI) ist eine veraltete Methode für diesen Prozess.
  • Verwenden Sie einen Website-Endpunkt als Ursprung und ermöglichen Sie einen anonymen (öffentlichen) Zugriff
  • Verwenden Sie einen Website-Endpunkt als Ursprung und beschränken Sie den Zugriff mit einem Referer-Header
  • Verwenden Sie eine AWS CloudFormation, um eine statische Website, einen Endpunkt als Ursprung und eine benutzerdefinierte Domäne bereitzustellen, die auf CloudFront verweist

Weitere Informationen zu den beiden Endpunkttypen finden Sie unter Hauptunterschiede zwischen einem Website-Endpunkt und einem REST-API-Endpunkt.

Lösung

Gehen Sie wie folgt vor, um eine CloudFront-Verteilung mit dem S3-Endpunkttyp zu konfigurieren, den Sie als Ursprung verwenden möchten:

Verwenden Sie einen REST-API-Endpunkt als Ursprung und beschränken Sie den Zugriff mit einem OAC oder einer OAI (Legacy)

1.    Verwenden Sie die Amazon-S3-Konsole, um einen Bucket zu erstellen und Ihre Website-Dateien hochzuladen.

Hinweis: Für diese Konfiguration müssen Sie das statische Website-Hosting in Ihrem Bucket nicht aktivieren. Diese Konfiguration verwendet den REST-API-Endpunkt des Buckets anstelle des Website-Endpunkts aus der statischen Website-Hosting-Funktion.

2.    Erstellen Sie eine CloudFront-Webverteilung. Führen Sie zusätzlich zu Ihren Verteilungseinstellungen für Anwendungsfälle die Schritte in einem der folgenden Abschnitte aus, um den Zugriff auf den Amazon-S3-Ursprung einzuschränken. Es hat sich bewährt, OAC zu verwenden, da es sich bei OAI um eine veraltete Umgebung handelt.

OAC

Wenn Sie Ihre Verteilung erstellen, geben Sie Ihren Amazon-S3-Bucket-Namen in das Feld Ursprungs-Domäne ein.

Wählen Sie für Ursprungszugriff die Ursprungszugriffskontrolleinstellungen (empfohlen) aus.

Wählen Sie in der Drop-down-Liste Ursprungszugriffskontrolle den OAC-Namen aus und wählen Sie Kontrolleinstellung erstellen.

Geben Sie Ihrer Steuereinstellung im Dialogfeld den Namen\ **.** Es hat sich bewährt, die Standardeinstellung Anfragen signieren (empfohlen) beizubehalten. Wählen Sie dann Erstellen aus.

CloudFront stellt Ihnen die Richtlinienerklärung zur Verfügung, mit der Sie OAC die Erlaubnis zum Zugriff auf Ihren Amazon-S3-Bucket erteilen, nachdem Sie die Verteilung erstellt haben. Wählen Sie Richtlinie kopieren und fügen Sie die Richtlinie in Ihre S3-Bucket-Richtlinienkonfiguration ein.

OAI

Wenn Sie Ihre Verteilung erstellen, geben Sie Ihren Amazon-S3-Bucket-Namen in das Feld Ursprungs-Domäne ein.

Wählen Sie für Ursprungszugriff Legacy-Zugriffsidentitäten aus.

Wählen Sie in der Dropdownliste Ursprungszugriffsidentität den Namen der Usprungszugriffsidentität aus. Wählen Sie dann Neue OAI erstellen aus.

Benennen Sie im Dialogfeld Ihre neue Ursprungszugriffsidentität und wählen Sie Erstellen aus.

Wählen Sie für Bucket-Richtlinie Ja, Bucket-Richtlinie aktualisieren aus.

3.    Wenn Sie Ihre Verteilung erstellen, empfiehlt es sich, SSL (HTTPS) für Ihre Website zu verwenden. Um eine benutzerdefinierte Domain mit HTTPS zu verwenden, wählen Sie **Benutzerdefiniertes SSL-Zertifikat aus.**Wählen Sie Zertifikat anfordern aus, um ein neues Zertifikat anzufordern. Wenn Sie keine benutzerdefinierte Domäne verwenden, können Sie trotzdem HTTPS mit dem cloudfront.net-Domänennamen für Ihre Verteilung verwenden.
Wichtig: Wenn Sie Alternative Domänennamen (CNAMEs) für Ihre Verteilung eingeben, müssen die CNAMes mit dem von Ihnen ausgewählten SSL-Zertifikat übereinstimmen. Informationen zur Behebung von Problemen mit Ihrem SSL-Zertifikat finden Sie unter Wie kann ich Probleme bei der Verwendung eines benutzerdefinierten SSL-Zertifikats für meine CloudFront-Verteilung beheben?

4.    Aktualisieren Sie die DNS-Einträge für Ihre Domäne, sodass die Domäne Ihrer Website auf CloudFront verweist. Sie finden den Domänennamen Ihrer Verteilung in der CloudFront-Konsole. Der Domänenname sieht dem folgenden Beispiel ähnlich: d1234abcd.cloudfront.net.

5.    Warten Sie, bis Ihre DNS-Änderungen übernommen werden und die vorherigen DNS-Einträge ablaufen.
Hinweis: Wie lange die vorherigen DNS-Werte ablaufen hängt vom TTL-Wert ab, der in Ihrer Hosting-Zone festgelegt ist. Es hängt auch davon ab, ob Ihr lokaler Resolver diese TTL-Werte verwendet.

Verwenden Sie einen Website-Endpunkt als Ursprung und ermöglichen Sie einen anonymen (öffentlichen) Zugriff

Diese Konfiguration ermöglicht öffentlichen Lesezugriff auf den Bucket Ihrer Website. Weitere Informationen finden Sie unter Berechtigungen für den Zugriff auf Websites festlegen.
Hinweis: Wenn Sie den statischen Website-Endpunkt von Amazon S3 verwenden, sind Verbindungen zwischen CloudFront und Amazon S3 nur über HTTP möglich. Um HTTPS für Verbindungen zwischen CloudFront und Amazon S3 zu verwenden, konfigurieren Sie einen S3-REST-API-Endpunkt für Ihren Ursprung.

  1. Verwenden Sie die Amazon-S3-Konsole, um einen Bucket zu erstellen und das statische Website-Hosting für den Bucket zu aktivieren.
  2. Kopieren Sie im Dialogfeld Statisches Website-Hosting den Endpunkt Ihres Buckets ohne http:// am Anfang. Das Format ähnelt DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com. Sie benötigen den Endpunkt in diesem Format für einen späteren Schritt.
  3. Fügen Sie eine Bucket-Richtlinie hinzu, die öffentlichen Lesezugriff auf den von Ihnen erstellten Bucket ermöglicht.
    Hinweis: Für diese Konfiguration müssen Sie die Öffentlichen Zugriff blockieren Einstellungen des S3-Buckets deaktivieren. Wenn Ihr Anwendungsfall erfordert, dass Sie die Einstellungen zum Blockieren des öffentlichen Zugriffs aktivieren, verwenden Sie den REST-API-Endpunkt als Ursprung. Beschränken Sie dann den Zugriff durch eine Ursprungszugriffskontrolle (OAC) oder Ursprungszugriffsidentität (OAI).
  4. Erstellen Sie eine CloudFront-Webverteilung. Führen Sie zusätzlich zu Ihren Einstellungen für die Anwendungsfallverteilung die folgenden Schritte aus:
    Geben Sie für Ursprungsdomäne den Endpunkt ein, den Sie im vorherigen Schritt kopiert haben.
    Hinweis: Wählen Sie den Bucket nicht aus der Dropdown-Liste aus. Die Dropdown-Liste enthält nur die S3-Bucket-REST-API-Endpunkte, die Sie in dieser Konfiguration nicht verwenden.
  5. Wenn Sie Ihre Verteilung erstellen, empfiehlt es sich, SSL (HTTPS) für Ihre Website zu verwenden. Um eine benutzerdefinierte Domain mit HTTPS zu verwenden, wählen Sie **Benutzerdefiniertes SSL-Zertifikat aus.**Wählen Sie Zertifikat anfordern aus, um ein neues Zertifikat anzufordern. Wenn Sie keine benutzerdefinierte Domäne verwenden, können Sie trotzdem HTTPS mit dem cloudfront.net-Domainnamen für Ihre Verteilung verwenden.
    Wichtig: Wenn Sie Alternative Domänennamen (CNAMEs) für Ihre Verteilung eingeben, müssen die CNAMes mit dem von Ihnen ausgewählten SSL-Zertifikat übereinstimmen. Informationen zur Behebung von Problemen mit Ihrem SSL-Zertifikat finden Sie unter Wie kann ich Probleme bei der Verwendung eines benutzerdefinierten SSL-Zertifikats für meine CloudFront-Verteilung beheben?
  6. Aktualisieren Sie die DNS-Einträge für Ihre Domäne, sodass die Domäne Ihrer Website auf CloudFront verweist. Sie finden den Domänennamen Ihrer Verteilung in der CloudFront-Konsole. Das Domänennamenformat ähnelt dem folgenden Beispiel: d1234abcd.cloudfront.net.
  7. Warten Sie, bis Ihre DNS-Änderungen übernommen werden und die vorherigen DNS-Einträge ablaufen.
    Hinweis: Wie lange die vorherigen DNS-Werte ablaufen hängt vom TTL-Wert ab, der in Ihrer Hosting-Zone festgelegt ist. Es hängt auch davon ab, ob Ihr lokaler Resolver diese TTL-Werte verwendet.

Verwenden Sie einen Website-Endpunkt als Ursprung und beschränken Sie den Zugriff mit einem Referer-Header

Wichtig: Prüfen Sie, ob der Zugriff, den dieses Setup ermöglicht, den Anforderungen Ihres Anwendungsfalls entspricht.

Diese Konfiguration richtet einen benutzerdefinierten Referer-Header für die Verteilung ein, um den Zugriff einzuschränken. Anschließend verwendet sie eine Bucket-Richtlinie, um den Zugriff nur für Anfragen mit dem benutzerdefinierten Referer-Header zuzulassen.

Hinweis: Wenn Sie den statischen Website-Endpunkt von Amazon S3 verwenden, sind Verbindungen zwischen CloudFront und Amazon S3 nur über HTTP möglich. Um HTTPS für Verbindungen zwischen CloudFront und Amazon S3 zu verwenden, konfigurieren Sie einen S3-REST-API-Endpunkt für Ihren Ursprung.

  1. Verwenden Sie die Amazon-S3-Konsole, um einen Bucket zu erstellen und das statische Website-Hosting für den Bucket zu aktivieren.
  2. Kopieren Sie im Dialogfeld Statisches Website-Hosting den Endpunkt Ihres Buckets ohne http:// am Anfang. Das Format ähnelt DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com. Sie benötigen den Endpunkt in diesem Format für einen späteren Schritt.
  3. Erstellen Sie eine CloudFront-Webverteilung. Führen Sie zusätzlich zu Ihren Einstellungen für die Anwendungsfallverteilung die folgenden Schritte aus:
    Geben Sie für Ursprungsdomäne den Endpunkt ein, den Sie im vorherigen Schritt kopiert haben.
    Hinweis: Wählen Sie den Bucket nicht aus der Dropdown-Liste aus. Die Dropdown-Liste enthält nur die S3-Bucket-REST-API-Endpunkte, die diese Konfiguration nicht verwendet.
    Wählen Sie unter Benutzerdefinierte Kopfzeile verwenden die Option Kopfzeile hinzufügen aus.
    Geben Sie als Kopfzeilenname Referer ein.
    Geben Sie unter Wert einen Kundenkopfzeilenwert ein, den Sie an den Ursprung (S3-Bucket) weiterleiten möchten. Um den Zugriff auf den Ursprung einzuschränken, geben Sie einen zufälligen oder geheimen Wert ein, den nur Sie kennen.
  4. Wenn Sie Ihre Verteilung erstellen, empfiehlt es sich, SSL (HTTPS) für Ihre Website zu verwenden. Um eine benutzerdefinierte Domain mit HTTPS zu verwenden, wählen Sie **Benutzerdefiniertes SSL-Zertifikat aus.**Wählen Sie Zertifikat anfordern aus, um ein neues Zertifikat anzufordern. Wenn Sie keine benutzerdefinierte Domäne verwenden, können Sie trotzdem HTTPS mit dem cloudfront.net-Domänennamen für Ihre Verteilung verwenden.
    Wichtig: Wenn Sie Alternative Domänennamen (CNAMEs) für Ihre Verteilung eingeben, müssen die CNAMes mit dem von Ihnen ausgewählten SSL-Zertifikat übereinstimmen. Informationen zur Behebung von Problemen mit Ihrem SSL-Zertifikat finden Sie unter Wie kann ich Probleme bei der Verwendung eines benutzerdefinierten SSL-Zertifikats für meine CloudFront-Verteilung beheben?
  5. Öffnen Sie den Bucket Ihrer Website von der Amazon-S3-Konsole aus. Fügen Sie dann eine Bucket-Richtlinie hinzu, die s3:GetObject unter der Bedingung zulässt, dass die Anfrage den benutzerdefinierten Referer-Header enthält, den Sie in Schritt 3 angegeben haben. Für diese Konfiguration müssen Sie die Öffentlichen Zugriff blockieren Einstellungen des S3-Buckets deaktivieren. Amazon S3 betrachtet eine Bucket-Richtlinie, die anonymen Zugriff gewährt, der durch einen Referer eingeschränkt wird, als öffentlich. Wenn Ihr Anwendungsfall erfordert, dass Sie die Einstellungen zum Blockieren des öffentlichen Zugriffs aktivieren, dann verwenden Sie den REST-API-Endpunkt als Ursprung. Beschränken Sie dann den Zugriff mit einer Ursprungszugriffskontrolle (OAC) oder Ursprungszugriffsidentität (OAI).
    Hinweis: Um den Zugriff für Anfragen zu blockieren, die den benutzerdefinierten Referer-Header nicht enthalten, verwenden Sie eine explizite Ablehnen-Anweisung in der Bucket-Richtlinie.
  6. Aktualisieren Sie die DNS-Einträge für Ihre Domäne, sodass die Domäne Ihrer Website auf CloudFront verweist. Sie finden den Domänennamen Ihrer Verteilung in der CloudFront-Konsole. Der Domänenname ähnelt dem folgenden Beispiel: d1234abcd.cloudfront.net.
  7. Warten Sie, bis Ihre DNS-Änderungen übernommen werden und die vorherigen DNS-Einträge ablaufen.
    Hinweis: Wie lange die vorherigen DNS-Werte ablaufen hängt vom TTL-Wert ab, der in Ihrer Hosting-Zone festgelegt ist. Es hängt auch davon ab, ob Ihr lokaler Resolver diese TTL-Werte verwendet.

Verwenden Sie eine CloudFormation, um einen statischen Website-Endpunkt als Ursprung und eine benutzerdefinierte Domäne bereitzustellen, die auf CloudFront verweist

Diese Lösung verwendet die folgende Konfiguration für Ihre Website:

  • Stellt Ihre Website mit CloudFormation bereit
  • Hostet Ihre Website auf Amazon S3
  • Verteilt Ihre Website mit CloudFront
  • Verwendet ein SSL/TLS-Zertifikat von AWS Certificate Manager (ACM)
  • Verwendet CloudFront Response Header-Richtlinien, um jeder Serverantwort Sicherheitskopfzeilen hinzuzufügen

Anweisungen zur Bereitstellung dieser Lösung finden Sie auf der Amazon CloudFront Secure Static Website auf der GitHub-Website.

Weitere Informationen

Erste Schritte mit einer sicheren statischen Website

E-Mail-Validierung

DNS-Validierung

Alternative Domänennamen und HTTPS verwenden