Ich habe einen Route53-Recordset für den DNS des AWS-Anwendungslastenausgleichs erstellt. Meine Frage ist, ob der AWS Cloudfront-Ursprung diese Recordset-URL enthalten kann oder nicht?
Beispiel: ALB-DNS-Name: xxxx.us-east-1.elb.amazonaws.com. Recordset-Eintrag in Route53 für Application Load Balancer DNS: www.abc.com
Kann ich jetzt www.abc.com als Ursprung in Cloudfront angeben?
Antwort1
Wenn Sie das Ursprungsprotokoll auf „Nur HTTPS“ einstellen, wird der Datenverkehr zwischen CloudFront und dem ELB durch TLS gesichert und Sie können den tatsächlichen Ursprungsdomänennamen auf beide Arten konfigurieren. Der Cloudfront-Forwarded-Proto
Header gibt das zwischen CloudFront und dem Viewer verwendete Protokoll an (da der Load Balancer in dieser Konfiguration immer „“ einstellt X-Forwarded-Proto: https
).
CloudFront besteht darauf, dass die TLS-Aushandlung zwischen CloudFront und dem Ursprung vertrauenswürdig ist. Ein häufig übersehener Faktor ist, dass TLS-Zertifikate (SSL) zwei Dinge tun: Sie sorgen für die Verschlüsselung der Verbindung (offensichtlich) und für die Authentifizierung des Servers – die Bestätigung, dass der Server autorisiert ist, als Server für den angeforderten Hostnamen zu fungieren, und kein Betrüger ist (weniger offensichtlich). Aus diesem Grund erhalten Sie Browserwarnungen, wenn der Betreff und/oder der alternative Betreffname des Serverzertifikats nicht mit dem Hostnamen in der Adressleiste des Browsers übereinstimmen.
CloudFront lässt eine begrenzte Ausnahme von dieser Anforderung zu und ermöglicht eine erfolgreiche Zertifikatsvalidierung, solange eine der beiden Bedingungen erfüllt ist:
- Der ELB muss ein Zertifikat vorlegen, das mit dem Ursprungsdomänennamen übereinstimmt.oder
- Der ELB muss ein Zertifikat vorlegen, das mit dem
Host
Header übereinstimmt, den CloudFront vom Browser an den ELB weiterleitet.
Andernfalls gibt CloudFront zurück 502 Bad Gateway
.
Die erste Bedingung ist nicht erfüllt, wenn Sie den ELB-Hostnamen als Ursprungsdomänennamen verwenden. Aus diesem Grund fordert die CloudFront-Konsole Sie auf, den Host
Header zur Weiterleitung auf die Whitelist zu setzen, wenn sie erkennt, dass Ihr Ziel ein ELB ist.
Aber solange Ihre Umgebung so aussieht ...
www.example.com
verweist auf CloudFront und ist im alternativen Domänennamen der Distribution konfiguriert.- Der
Host
Header ist für die Whitelist konfiguriert und - Der ELB-Hostname wird als Ursprungsdomänenname festgelegt und
- Die ELB verfügt über ein gültiges Zertifikat für
www.example.com
...dann funktioniert es, mit einer Ausnahme: Die dzczcexample.cloudfront.net
Domäne kann im Browser nicht verwendet werden, um über CloudFront auf Ihren Ursprung zuzugreifen. In einigen Konfigurationen ist dies wünschenswert, da Sie eigentlich nicht möchten, dass Ihre Inhalte über diesen zweiten Einstiegspunkt zugänglich sind.
Andernfalls ist es am besten, das von Ihnen vorgeschlagene Vorgehen zu befolgen: einen Hostnamen in einer von Ihnen kontrollierten Domäne dem ELB im DNS zuzuordnen und diesen Hostnamen als ursprünglichen Domänennamen in CloudFront zu konfigurieren.
CloudFront kann jeden über das Internet erreichbaren Hostnamen als Ursprung verwenden – der Ursprung muss nicht innerhalb von AWS liegen. Sie könnten beispielsweise einen Google Cloud Storage-Bucket als Ursprung in CloudFront verwenden. Die Integration zwischen CloudFront und dem Ursprung ist lose – damit meine ich, dass CloudFront keine spezielle Kenntnis von ELB hat. Es löst den Hostnamen einfach über öffentliches DNS auf und stellt Verbindungen her.
Beachten Sie auch: Wenn Sie sicherstellen möchten, dass nur Ihre CloudFront-Verteilung mit Ihrem Ursprung kommunizieren kann, müssen Sie einen geheimen benutzerdefinierten Ursprungsheader in CloudFront konfigurieren, und der Ursprung muss Anfragen ablehnen, denen dieser Wert fehlt. Obwohl es möglich ist, die ELB-Sicherheitsgruppe zu verwenden, um nur Zugriff aus dem CloudFront-Adressraum zuzulassen, wächst dieser Raum ziemlich oft, und Sie müssen Ihre Sicherheitsgruppen auf dem neuesten Stand halten, um neue Adressbereiche zuzulassen. Ich bin jedoch der Meinung, dass dies ein falsches Sicherheitsgefühl vermittelt, da technisch gesehen jeder eine CloudFront-Verteilung erstellen und sie überallhin verweisen kann, einschließlich Ihres ELB. Durch die Verwendung eines benutzerdefinierten Headers wird dies vermieden.