Beschränken des Zugriffs auf Application Load Balancer
Für eine Webanwendung oder andere Inhalte, die von einem Application Load Balancer in Elastic Load Balancing bereitgestellt werden, kann CloudFront Objekte zwischenspeichern und direkt Benutzern (Betrachter) bereitstellen, wodurch die Belastung Ihres Application Load Balancers reduziert wird. CloudFront kann auch dazu beitragen, die Latenz zu reduzieren und sogar einige DDoS-Angriffe (Distributed Denial of Service) zu absorbieren. Wenn Benutzer CloudFront jedoch umgehen und direkt auf Ihren Application Load Balancer zugreifen können, erhalten Sie diese Vorteile nicht. Sie können Amazon CloudFront und Ihren Application Load Balancer jedoch so konfigurieren, dass Benutzer nicht direkt auf den Application Load Balancer zugreifen. Auf diese Weise können Benutzer nur über CloudFront auf den Application Load Balancer zugreifen, wodurch sichergestellt wird, dass Sie die Vorteile der Verwendung von CloudFront nutzen.
Um zu verhindern, dass Benutzer direkt auf einen Application Load Balancer zugreifen, und um den Zugriff nur über CloudFront zuzulassen, führen Sie die folgenden Schritte aus:
-
Konfigurieren Sie CloudFront so, dass es Anforderungen, die es an den Application Load Balancer sendet, einen benutzerdefinierten HTTP-Header hinzufügt.
-
Konfigurieren Sie den Application Load Balancer so, dass nur Anforderungen weitergeleitet werden, die den benutzerdefinierten HTTP-Header enthalten.
-
(Optional) Fordern Sie HTTPS an, um die Sicherheit dieser Lösung zu verbessern.
Weitere Informationen finden Sie unter den folgenden Themen. Nachdem Sie diese Schritte ausgeführt haben, können Benutzer nur über CloudFront auf Ihren Application Load Balancer zugreifen.
Themen
Konfigurieren von CloudFront zum Hinzufügen eines benutzerdefinierten HTTP-Headers zu Anfragen
Sie können CloudFront so konfigurieren, dass es den Anforderungen, die es an Ihren Ursprung sendet (in diesem Fall ein Application Load Balancer), einen benutzerdefinierten HTTP-Header hinzufügt.
Dieser Anwendungsfall beruht darauf, den Namen und den Wert des benutzerdefinierten Headers geheim zu halten. Wenn der Header-Name und der Wert nicht geheim sind, könnten andere HTTP-Clients sie möglicherweise in Anfragen aufnehmen, die sie direkt an den Application Load Balancer senden. Dies kann dazu führen, dass sich der Application Load Balancer so verhält, als kämen die Anforderungen von CloudFront, obwohl dies nicht der Fall war. Um dies zu verhindern, halten Sie den Namen und den Wert des benutzerdefinierten Headers geheim.
Sie können CloudFront so konfigurieren, dass mit der CloudFront-Konsole, AWS CloudFormation oder der CloudFront-API ein benutzerdefinierter HTTP-Header zu Ursprungsanfragen hinzugefügt wird.
- So fügen Sie einen benutzerdefinierten HTTP-Header hinzu (CloudFront-Konsole)
-
Verwenden Sie in der CloudFront-Konsole die Einstellung Angepasste Ursprungs-Header in den Ursprungseinstellungen. Geben Sie den Header-Namen und seinen Wert ein, wie im folgenden Beispiel gezeigt.
Anmerkung Der Header-Name und der Wert in diesem Beispiel dienen nur zur Demonstration. Verwenden Sie in der Produktion zufällig generierte Werte. Behandeln Sie den Namen und den Wert des Headers als sichere Berechtigung, ähnlich einem Benutzernamen und einem Passwort.
Sie können die Einstellung Angepasste Ursprungs-Header bearbeiten, wenn Sie einen Ursprung für eine vorhandene CloudFront-Distribution erstellen oder bearbeiten und wenn Sie eine neue Distribution erstellen. Weitere Informationen finden Sie unter Aktualisieren einer Verteilung und Erstellen einer Verteilung.
- So fügen Sie einen benutzerdefinierten HTTP-Header hinzu (AWS CloudFormation)
-
Verwenden Sie in einer AWS CloudFormation-Vorlage die
OriginCustomHeaders
Eigenschaft, wie im folgenden Beispiel gezeigt.Anmerkung Der Header-Name und der Wert in diesem Beispiel dienen nur zur Demonstration. Verwenden Sie in der Produktion zufällig generierte Werte. Behandeln Sie den Namen und den Wert des Headers als sichere Berechtigung, ähnlich einem Benutzernamen und einem Passwort.
AWSTemplateFormatVersion: '2010-09-09' Resources: TestDistribution: Type: 'AWS::CloudFront::Distribution' Properties: DistributionConfig: Origins: - DomainName: app-load-balancer.example.com Id: Example-ALB CustomOriginConfig: OriginProtocolPolicy: https-only OriginSSLProtocols: - TLSv1.2 OriginCustomHeaders: - HeaderName: X-Custom-Header HeaderValue: random-value-1234567890 Enabled: 'true' DefaultCacheBehavior: TargetOriginId: Example-ALB ViewerProtocolPolicy: allow-all CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 PriceClass: PriceClass_All ViewerCertificate: CloudFrontDefaultCertificate: 'true'
Weitere Informationen finden Sie in den Eigenschaften Origin und OriginCustomHeader im AWS CloudFormation-Benutzerhandbuch.
- So fügen Sie einen benutzerdefinierten HTTP-Header hinzu (CloudFront API)
-
Verwenden Sie in der CloudFront-API das darin enthaltene
CustomHeaders
ObjektOrigin
. Weitere Informationen finden Sie unter CreateDistribution und UpdateDistribution in der Amazon CloudFront-API-Referenz und in der Dokumentation für Ihr SDK oder einen anderen API-Client.
Es gibt einige Header-Namen, die Sie nicht als benutzerdefinierte Ursprungs-Header angeben können. Weitere Informationen finden Sie unter Benutzerdefinierte Header, die CloudFront nicht zu Ursprungsanforderungen hinzufügen kann.
Konfigurieren eines Application Load Balancers zum Weiterleiten von Anforderungen, die einen bestimmten Header enthalten
Nachdem Sie CloudFront so konfiguriert haben, dass es den Anforderungen, die es an Ihren Application Load Balancer sendet, einen benutzerdefinierten HTTP-Header hinzufügt (siehe vorheriger Abschnitt), können Sie den Load Balancer so konfigurieren, dass nur Anforderungen weitergeleitet werden, die diesen benutzerdefinierten Header enthalten. Dazu fügen Sie eine neue Regel hinzu und ändern die Standardregel im Listener Ihres Load Balancers.
Voraussetzungen
Um die folgenden Verfahren verwenden zu können, benötigen Sie einen Application Load Balancer mit mindestens einem Listener. Wenn Sie noch keinen erstellt haben, lesen Sie Create an Application Load Balancer im Benutzerhandbuch für Application Load Balancer.
Die folgenden Verfahren ändern einen HTTPS-Listener. Sie können den gleichen Prozess verwenden, um einen HTTP-Listener zu ändern.
So aktualisieren Sie die Regeln in einem Application Load Balancer-Listener
-
Öffnen Sie die Seite Load Balancers
in der Amazon EC2-Konsole. -
Wählen Sie den Load Balancer aus, der der Ursprung für Ihre CloudFront-Verteilung ist, und wählen Sie dann die Registerkarte Listener.
-
Wählen Sie für den Listener, den Sie ändern, Regeln anzeigen/bearbeiten aus.
-
Wählen Sie das Symbol, um Regeln hinzuzufügen.
-
Klicken Sie auf Insert Rule (Regel einfügen).
-
Für die neue Regel gehen Sie folgendermaßen vor:
-
Wählen Sie Bedingung hinzufügen und dann HTTP-Header aus. Geben Sie den HTTP-Header-Namen und -Wert an, den Sie als angepassten Ursprungs-Header in CloudFront hinzugefügt haben.
-
Wählen Sie Aktion hinzufügen und klicken Sie dann auf Weiterleiten zu. Wählen Sie die Zielgruppe aus, in die Sie Anfragen weiterleiten möchten.
-
Wählen Sie Speichern aus, um die neue Regel zu erstellen.
-
-
Wählen Sie das Symbol, um Regeln zu bearbeiten.
-
Wählen Sie das Bearbeitungssymbol für die Standardregel aus.
-
Für die Standardregel gehen Sie folgendermaßen vor:
-
Löschen Sie die Standardaktion.
-
Wählen Sie Aktion hinzufügen und wählen Sie dann Feste Antwort zurückgeben.
-
Geben Sie für den Antwortcode
403
ein. -
Geben Sie für den Antworttext
Access denied
ein. -
Wählen Sie Aktualisieren, um die Standardregel zu aktualisieren.
-
Nachdem Sie diese Schritte ausgeführt haben, hat Ihr Load Balancer-Listener zwei Regeln, wie in der folgenden Abbildung gezeigt. Die erste Regel leitet Anforderungen weiter, die den HTTP-Header enthalten (Anfragen, die von CloudFront stammen). Die zweite Regel sendet eine feste Antwort auf alle anderen Anfragen (Anfragen, die nicht von CloudFront kommen).

Sie können überprüfen, ob die Lösung funktioniert, indem Sie eine Anfrage an Ihre
CloudFront-Distribution und eine an Ihren Application Load Balancer senden. Die Anfrage
an CloudFront gibt Ihre Webanwendung oder Ihren Inhalt zurück, und diejenige, die
direkt an Ihren Application Load Balancer gesendet wird, gibt eine 403
Antwort mit der einfachen Textnachricht Access denied
zurück.
(Optional) Verbesserung der Sicherheit dieser Lösung
Um die Sicherheit dieser Lösung zu verbessern, können Sie Ihre CloudFront-Distribution so konfigurieren, dass sie immer HTTPS verwendet, wenn Sie Anfragen an Ihren Application Load Balancer senden. Denken Sie daran, dass diese Lösung nur funktioniert, wenn Sie den benutzerdefinierten Header-Namen und den Wert geheim halten. Die Verwendung von HTTPS kann dazu beitragen, dass ein Spion den Namen und den Wert des Headers entdeckt. Wir empfehlen außerdem, den Namen und den Wert des Headers regelmäßig zu wechseln.
Verwenden von HTTPS für Origin-Anfragen
Um CloudFront so zu konfigurieren, dass HTTPS für Ursprungsanforderungen verwendet wird, legen Sie die Einstellung Ursprungsprotokollrichtlinien auf Nur HTTPS fest. Diese Einstellung ist in der CloudFront-Konsole, AWS CloudFormation und der CloudFront-API verfügbar. Weitere Informationen finden Sie unter Ursprungsprotokollrichtlinien.
Wenn Sie CloudFront für die Verwendung von HTTPS für Ursprungsanforderungen konfigurieren, müssen Sie sicherstellen, dass Ihr Application Load Balancer über einen HTTPS-Listener verfügt (wie im vorherigen Abschnitt gezeigt). Dies erfordert, dass Sie über ein SSL/TLS-Zertifikat verfügen, das dem Domänennamen entspricht, der an Ihren Application Load Balancer weitergeleitet wird. Weitere Informationen finden Sie im Benutzerhandbuch für Application Load Balancer unter Erstellen eines HTTPS-Listeners.
Wenn die Endbenutzer (auch als Betrachter oder Clients bezeichnet) Ihrer Webanwendung HTTPS verwenden können, können Sie CloudFront auch so konfigurieren, dass HTTPS-Verbindungen von den Endbenutzern bevorzugt (oder sogar angefordert) werden. Verwenden Sie dazu die Einstellung Betrachter-Protokollrichtlinie. Sie können es so einstellen, dass Endbenutzer von HTTP auf HTTPS umgeleitet oder Anfragen, die HTTP verwenden, abgelehnt werden. Diese Einstellung ist in der CloudFront-Konsole, AWS CloudFormation und der CloudFront-API verfügbar. Weitere Informationen finden Sie unter Betrachter-Protokollrichtlinien.
Wechseln des Header-Namens und des Werts
Zusätzlich zur Verwendung von HTTPS empfehlen wir auch, den Header-Namen und -Wert regelmäßig zu ändern. Befolgen Sie hierfür die folgenden Schritte:
-
Konfigurieren Sie CloudFront so, dass es Anforderungen, die es an den Application Load Balancer sendet, einen zusätzlichen benutzerdefinierten HTTP-Header hinzufügt.
-
Aktualisieren Sie die Application Load Balancer-Listener-Regel, um Anforderungen weiterzuleiten, die diesen zusätzlichen benutzerdefinierten HTTP-Header enthalten.
-
Konfigurieren Sie CloudFront so, dass es das Hinzufügen des ursprünglichen benutzerdefinierten HTTP-Headers zu Anforderungen, die es an den Application Load Balancer sendet, beendet.
-
Aktualisieren Sie die Application Load Balancer-Listener-Regel, um die Weiterleitung von Anforderungen zu beenden, die den ursprünglichen benutzerdefinierten HTTP-Header enthalten.
Weitere Informationen zum Ausführen dieser Schritte finden Sie in den vorherigen Abschnitten.