Beschränken Sie den Zugriff auf Application Load Balancers - Amazon CloudFront

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beschränken Sie den Zugriff auf Application Load Balancers

Sie können sowohl interne als auch mit dem Internet verbundene Application Load Balancer mit Amazon verwenden. CloudFront Sie können interne Application Load Balancer in privaten Subnetzen verwenden, CloudFront indem Sie VPC-Ursprünge verwenden. CloudFront VPC-Ursprünge ermöglichen es Ihnen, Inhalte von Anwendungen bereitzustellen, die in privaten VPC-Subnetzen gehostet werden, ohne sie dem öffentlichen Internet zugänglich zu machen. Weitere Informationen finden Sie unter Beschränken Sie den Zugriff mit VPC-Ursprüngen.

Wenn Sie einen mit dem Internet verbundenen Application Load Balancer mit verwenden CloudFront, können Sie die folgenden Sicherheitsmaßnahmen verwenden, um zu verhindern, dass Benutzer direkt auf einen Application Load Balancer zugreifen, und den Zugriff nur über zulassen. CloudFront

  1. Konfigurieren CloudFront Sie so, dass ein benutzerdefinierter HTTP-Header zu Anfragen hinzugefügt wird, die an den Application Load Balancer gesendet werden.

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

  3. Erfordern Sie HTTPS, um die Sicherheit dieser Lösung zu verbessern.

CloudFront kann auch dazu beitragen, die Latenz zu reduzieren und sogar einige Distributed-Denial-of-Service (DDoS) -Angriffe zu absorbieren.

Wenn Ihr Anwendungsfall einen doppelten Zugriff auf Webanwendungen CloudFront sowohl von beiden als auch von Application Load Balancer direkt über das Internet erfordert, sollten Sie Ihre Webanwendung APIs wie folgt aufteilen:

  • APIs das muss durchgehen. CloudFront In diesem Fall sollten Sie erwägen, einen separaten privaten Application Load Balancer als Ursprung zu verwenden.

  • APIs die Zugriff über Application Load Balancer erfordern. In diesem Fall umgehen CloudFront Sie.

Alternativ können für eine Webanwendung oder andere Inhalte, die von einem mit dem Internet verbundenen Application Load Balancer in Elastic Load Balancing bereitgestellt CloudFront werden, Objekte zwischengespeichert und direkt Benutzern (Viewern) bereitgestellt werden, wodurch die Belastung Ihres Application Load Balancer reduziert wird. Ein mit dem Internet verbundener Load Balancer hat einen öffentlich auflösbaren DNS-Namen und leitet Anfragen von Clients über das Internet an Ziele weiter.

Weitere Informationen finden Sie unter den folgenden Themen. Nachdem Sie diese Schritte abgeschlossen haben, können Benutzer nur über auf Ihren Application Load Balancer zugreifen CloudFront.

Konfigurieren Sie so CloudFront , dass Anfragen ein benutzerdefinierter HTTP-Header hinzugefügt wird

Sie können so konfigurieren CloudFront , dass den Anfragen, die es an Ihren Ursprung sendet (in diesem Fall ein Application Load Balancer), ein benutzerdefinierter HTTP-Header hinzugefügt wird.

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 Anfragen von CloudFront einem Ort, an dem dies nicht der Fall war. Um dies zu verhindern, halten Sie den Namen und den Wert des benutzerdefinierten Headers geheim.

Sie können mit der CloudFront Konsole oder der CloudFront API so konfigurieren CloudFront , dass zu ursprünglichen Anfragen ein benutzerdefinierter HTTP-Header hinzugefügt wird. AWS CloudFormation

Um einen benutzerdefinierten HTTP-Header (CloudFront Konsole) hinzuzufügen

Verwende in der CloudFront Konsole die Einstellung Benutzerdefinierte Origin-Header in den Origin-Einstellungen. Geben Sie den Header-Namen und seinen Wert ein.

Anmerkung

Verwenden Sie in der Produktion zufällig generierte Header-Namen und -Werte. Behandeln Sie Header-Namen und -Werte wie Benutzernamen und Passwörter als sichere Anmeldeinformationen.

Sie können die Einstellung Benutzerdefinierte Origin-Header bearbeiten, wenn Sie einen Ursprung für eine bestehende CloudFront Distribution erstellen oder bearbeiten und wenn Sie eine neue Distribution erstellen. Weitere Informationen erhalten Sie unter Eine Verteilung aktualisieren und Eine Verteilung erstellen.

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 unter Origin und OriginCustomHeaderEigenschaften im AWS CloudFormation Benutzerhandbuch.

Um einen benutzerdefinierten HTTP-Header (CloudFront API) hinzuzufügen

Verwenden Sie in der CloudFront API das CustomHeaders Objekt darinOrigin. Weitere Informationen finden Sie unter CreateDistributionund UpdateDistributionin der Amazon CloudFront API-Referenz sowie 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 nicht zu CloudFront ursprünglichen Anfragen hinzugefügt werden können.

Konfigurieren Sie einen Application Load Balancer so, dass er nur Anfragen weiterleitet, die einen bestimmten Header enthalten

Nachdem Sie konfiguriert haben CloudFront , dass den Anfragen, die er an Ihren Application Load Balancer sendet, ein benutzerdefinierter HTTP-Header hinzugefügt wird (siehe vorheriger Abschnitt), können Sie den Load Balancer so konfigurieren, dass er nur Anfragen weiterleitet, 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. Fügen Sie eine neue Regel hinzu. Folgen Sie den Anweisungen unter Regel hinzufügen mit den folgenden Änderungen:

    • Fügen Sie die Regel dem Load Balancer hinzu, der der Ursprung Ihrer CloudFront Distribution ist.

    • Wählen Sie für Bedingung hinzufügen die Option Http-Header aus. Geben Sie den Namen und den Wert des HTTP-Headers an, den Sie als benutzerdefinierten Origin-Header hinzugefügt haben CloudFront.

    • Wählen Sie für Aktion hinzufügen die Option Weiterleiten an aus. Wählen Sie die Zielgruppe aus, in die Sie Anfragen weiterleiten möchten.

  2. Bearbeiten Sie die Standardregel im Listener Ihres Load Balancers. Folgen Sie den Anweisungen unter Regel bearbeiten mit den folgenden Änderungen:

    • Bearbeiten Sie die Standardregel des Load Balancers, der der Ursprung Ihrer CloudFront Distribution ist.

    • Löschen Sie die Standardaktion, und wählen Sie dann für Aktion hinzufügen die Option Feste Antwort zurückgeben aus.

    • Geben Sie für den Antwortcode 403 ein.

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

Nachdem Sie diese Schritte abgeschlossen haben, hat Ihr Load Balancer-Listener zwei Regeln. Eine Regel leitet Anfragen weiter, die den HTTP-Header enthalten (Anfragen, die von kommen). CloudFront Die andere Regel sendet eine feste Antwort auf alle anderen Anfragen (Anfragen, die nicht von kommen CloudFront).

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 zur CloudFront Rückgabe Ihrer Webanwendung oder Ihres Inhalts und die direkt an Ihren Application Load Balancer gesendete Anfrage geben eine 403 Antwort mit der Klartextnachricht 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 beim Senden von Anfragen an Ihren Application Load Balancer immer HTTPS verwendet wird. 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 die Verwendung von HTTPS für ursprüngliche Anfragen CloudFront zu konfigurieren, setzen Sie die Einstellung Origin Protocol Policy auf Nur HTTPS. Diese Einstellung ist in der CloudFront Konsole und in der CloudFront API verfügbar. AWS CloudFormation Weitere Informationen finden Sie unter Protokoll (nur benutzerdefinierte Ursprünge).

Folgendes gilt auch, wenn Sie CloudFront die Verwendung von HTTPS für ursprüngliche Anfragen konfigurieren:

  • Sie müssen die Konfiguration so konfigurieren CloudFront , dass der Host Header mit der ursprünglichen Anforderungsrichtlinie an den Ursprung weitergeleitet wird. Sie können die Richtlinie für AllViewer verwaltete Ursprungsanfragen verwenden.

  • Stellen Sie sicher, dass Ihr Application Load Balancer über einen HTTPS-Listener verfügt (wie im vorherigen Abschnitt gezeigt). Weitere Informationen finden Sie unter Einen HTTPS-Listener erstellen im Benutzerhandbuch für Application Load Balancers. Für die Verwendung eines HTTPS-Listeners benötigen Sie ein SSL/TLS-Zertifikat, das dem Domainnamen entspricht, der an Ihren Application Load Balancer weitergeleitet wird.

  • SSL/TLS-Zertifikate für CloudFront können nur im in (ACM) angefordert (oder importiert) werden. us-east-1 AWS-Region AWS Certificate Manager Da es CloudFront sich um einen globalen Dienst handelt, verteilt er das Zertifikat automatisch von der us-east-1 Region an alle Regionen, die mit Ihrer Distribution verknüpft sind. CloudFront

    • Wenn Sie beispielsweise einen Application Load Balancer (ALB) in der ap-southeast-2 Region haben, müssen Sie SSL/TLS-Zertifikate sowohl in der ap-southeast-2 Region (für die Verwendung von HTTPS zwischen CloudFront und dem ALB-Ursprung) als auch in der us-east-1 Region (für die Verwendung von HTTPS zwischen Zuschauern und) konfigurieren. CloudFront Beide Zertifikate sollten mit dem Domainnamen übereinstimmen, der an Ihren Application Load Balancer weitergeleitet wird. Weitere Informationen finden Sie unter AWS-Region für AWS Certificate Manager.

  • Wenn die Endbenutzer (auch Viewer oder Clients genannt) Ihrer Webanwendung HTTPS verwenden können, können Sie auch so konfigurieren, dass HTTPS-Verbindungen von CloudFront den Endbenutzern bevorzugt (oder sogar erforderlich) 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 und in der CloudFront API verfügbar. AWS CloudFormation 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 CloudFront Sie so, dass ein zusätzlicher benutzerdefinierter HTTP-Header zu Anfragen hinzugefügt wird, die an den Application Load Balancer gesendet werden.

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

  3. Konfigurieren CloudFront Sie so, dass der ursprüngliche benutzerdefinierte HTTP-Header nicht mehr zu Anfragen hinzugefügt wird, die er an den Application Load Balancer sendet.

  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.

(Optional) Beschränken Sie den Zugriff auf den Ursprung, indem Sie die AWS Präfixliste -managed für verwenden CloudFront

Um den Zugriff auf Ihren Application Load Balancer weiter einzuschränken, können Sie die dem Application Load Balancer zugeordnete Sicherheitsgruppe so konfigurieren, dass sie nur Datenverkehr akzeptiert, CloudFront wenn der Dienst eine AWS-verwaltete Präfixliste verwendet. Dadurch wird verhindert, dass Datenverkehr, der nicht CloudFront stammt, Ihren Application Load Balancer auf der Netzwerkschicht (Schicht 3) oder Transportschicht (Schicht 4) erreicht.

Weitere Informationen finden Sie im CloudFront Blogbeitrag Beschränken Sie den Zugriff auf Ihre Ursprünge mithilfe der AWS-verwalteten Präfixliste für Amazon.