Beschränken des Zugriffs auf Application Load Balancer - Amazon CloudFront

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:

  1. Konfigurieren Sie CloudFront so, dass es Anforderungen, die es an den Application Load Balancer sendet, einen benutzerdefinierten HTTP-Header hinzufügt.

  2. Konfigurieren Sie den Application Load Balancer so, dass nur Anforderungen weitergeleitet werden, die den benutzerdefinierten HTTP-Header enthalten.

  3. (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.

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.

Wichtig

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.


                            Angepasste Ursprungs-Header-Felder in der CloudFront-Konsole.

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 Objekt Origin. 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

  1. Öffnen Sie die Seite Load Balancers in der Amazon EC2-Konsole.

  2. Wählen Sie den Load Balancer aus, der der Ursprung für Ihre CloudFront-Verteilung ist, und wählen Sie dann die Registerkarte Listener.

  3. Wählen Sie für den Listener, den Sie ändern, Regeln anzeigen/bearbeiten aus.

    
                        Link zumAnzeigen/Bearbeiten von Regeln für einen Load Balancer in der Amazon EC2-Konsole.
  4. Wählen Sie das Symbol, um Regeln hinzuzufügen.

    
                        Fügen Sie Regeln zu einem Load Balancer in der Amazon EC2-Konsole hinzu.
  5. Klicken Sie auf Insert Rule (Regel einfügen).

    
                        Fügen Sie eine Regel in einen Load Balancer in der Amazon EC2-Konsole ein.
  6. Für die neue Regel gehen Sie folgendermaßen vor:

    1. 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.

    2. 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.

    3. Wählen Sie Speichern aus, um die neue Regel zu erstellen.

    
                        Neue Regel in einem Load Balancer in der Amazon EC2-Konsole.
  7. Wählen Sie das Symbol, um Regeln zu bearbeiten.

    
                        Bearbeiten Sie Regeln für einen Load Balancer in der Amazon EC2-Konsole.
  8. Wählen Sie das Bearbeitungssymbol für die Standardregel aus.

    
                        Bearbeiten Sie die Standardregel für einen Load Balancer in der Amazon EC2-Konsole.
  9. Für die Standardregel gehen Sie folgendermaßen vor:

    1. Löschen Sie die Standardaktion.

      
                                Löschen Sie die Standardregel für einen Load Balancer in der Amazon EC2-Konsole.
    2. Wählen Sie Aktion hinzufügen und wählen Sie dann Feste Antwort zurückgeben.

    3. Geben Sie für den Antwortcode 403 ein.

    4. Geben Sie für den Antworttext Access denied ein.

    5. Wählen Sie Aktualisieren, um die Standardregel zu aktualisieren.

    
                        Aktualisieren Sie die Standardregel für einen Load Balancer in der Amazon EC2-Konsole.

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).


                Aktualisierte Regeln für einen Load Balancer in der Amazon EC2-Konsole.

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 HTTP-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 Viewer-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:

  1. Konfigurieren Sie CloudFront so, dass es Anforderungen, die es an den Application Load Balancer sendet, einen zusätzlichen benutzerdefinierten HTTP-Header hinzufügt.

  2. Aktualisieren Sie die Application Load Balancer-Listener-Regel, um Anforderungen weiterzuleiten, die diesen zusätzlichen benutzerdefinierten HTTP-Header enthalten.

  3. 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.

  4. 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.