Direkt zum Inhalt

Wie kann ich HTTPS für meine Elastic-Beanstalk-Umgebung konfigurieren?

Lesedauer: 7 Minute
0

Ich möchte HTTPS für meine AWS-Elastic-Beanstalk-Umgebung konfigurieren, um Daten von meinem Load Balancer zu meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance zu verschlüsseln.

Kurzbeschreibung

Wenn du einen benutzerdefinierten Domainnamen für die Elastic-Beanstalk-Umgebung konfiguriert hast, dann verwende HTTPS, um Benutzern eine sichere Verbindung zu der Website zu ermöglichen. Wenn du keinen Domänennamen besitzt, dann nutze HTTPS mit einem selbstsignierten Zertifikat für Entwicklungs- und Testzwecke.

Für Single-Instance-Umgebungen musst du den privaten Schlüssel und das Zertifikat lokal erstellen. Lade dann das Zertifikat auf AWS Identity and Access Management (IAM) hoch.

Es hat sich bewährt, Load Balancer mit AWS Certificate Manager (ACM) zur programmgesteuerten Bereitstellung und Verwaltung der Serverzertifikate zu verwenden. Du kannst auch AWS Command Line Interface (AWS CLI) verwenden, um ein Drittanbieter-Zertifikat oder ein selbstsigniertes Zertifikat und einen privaten Schlüssel zu IAM hochzuladen. Wenn ACM in der AWS-Region nicht verfügbar ist, verwende AWS CLI.

Lösung

Vorbereiten der Elastic-Beanstalk-Umgebung

Registriere eine neue Domain mit Amazon Route 53 oder einem anderen Domainanbieter, um Datenverkehr an die Elastic-Beanstalk-Umgebung weiterzuleiten.

Wenn die URL der Umgebung eine Region enthält, erstelle einen Aliasnamen. Oder erstelle einen CNAME-Datensatz, wenn die URL der Umgebung keine Region enthält.

Wichtig: Du kannst CNAME-Datensätze für Umgebungen verwenden, die du vor 2016 erstellt hast. Du kannst keinen CNAME-Datensatz mit einer Zonen-Apex-Domain verwenden, auch bekannt als Stammdomain oder Naked Domain. Weitere Informationen findest du unter Vergleich von Alias- und CNAME-Datensätzen.

Erstelle dann ein Zertifikat in ACM oder lade ein Zertifikat eines Drittanbieters oder ein selbstsigniertes Zertifikat und einen privaten Schlüssel auf IAM hoch.

Hinzufügen von Listeners zu den Load Balancers

Führe die folgenden Schritte aus:

  1. Öffne die Elastic-Beanstalk-Konsole.
  2. Wähle die Umgebung aus.
  3. Wähle im Navigationsbereich Konfiguration.
  4. Wähle in der Kategorie Load Balancer die Option Ändern.
  5. Um den Listener für Port 443 hinzuzufügen, führe die Schritte für den Load Balancer in der Elastic-Beanstalk-Umgebung aus.
    Hinweis: Es hat sich bewährt, einen Application Load Balancer oder Network Load Balancer zu verwenden.

Für Application Load Balancer

Führe die folgenden Schritte aus:

  1. Wähle Listener hinzufügen.
  2. Gib als Port den Port für den eingehenden Datenverkehr ein. Zum Beispiel, 443.
  3. Wähle für Protokoll die Option HTTPS.
  4. Wähle für SSL-Zertifikat das Zertifikat und dann die SSL-Richtlinie aus der Drop-down-Liste aus.
  5. Wähle Hinzufügen und dann Anwenden.

Für Netzwerk Load Balancer

Führe die folgenden Schritte aus:

  1. Wähle Listener hinzufügen.
  2. Gib als Port den Port für den eingehenden Datenverkehr ein. Zum Beispiel, 443.
  3. Wähle Hinzufügen und dann Anwenden.

Für Classic Load Balancer

Führe die folgenden Schritte aus:

  1. Wähle Listener hinzufügen.
  2. Gib als Port den Port für den eingehenden Datenverkehr ein. Zum Beispiel, 443.
  3. Wähle für Protokoll die Option HTTPS.
  4. Gib für Instance-Port 80 ein.
  5. Wähle für Instance-Protokoll die Option HTTP.
  6. Wähle für SSL-Zertifikat das Zertifikat und dann die SSL-Richtlinie aus der Drop-down-Liste aus.
  7. Wähle Hinzufügen und dann Anwenden.

Instances so konfigurieren, dass HTTPS-Verbindungen beendet werden

Um die Instances so zu konfigurieren, dass HTTPS-Verbindungen beendet werden, verwende die Konfigurationsdatei .ebextensions, um die Software zu ändern, die auf den Instances ausgeführt wird. Weitere Informationen findest du unter Beenden von HTTPS auf Amazon EC2-Instances, auf denen .NET Core unter Linux ausgeführt wird. Verwende Konfigurationsdateien außerdem, um Sicherheitsgruppen so zu ändern, sodass sichere Verbindungen ermöglicht werden.

Wichtig: Wenn du eine Single-Instance-Umgebung verwendest, überspringe die folgenden Schritte. Führe die Schritte im Abschnitt Stoppen von HTTPS auf der Instance (End-to-End-HTTPS) in einer Single-Instance-Umgebung aus.

Gehe wie folgt vor, um die Instances so zu konfigurieren, dass sie HTTPS-Verbindungen beenden:

  1. Füge dem Load Balancer einen sicheren Listener hinzu. Verwende je nach Typ des Load Balancers in der Elastic-Beanstalk-Umgebung eine der folgenden Konfigurationsdateien.
    Verwende für einen Classic Load Balancer eine .ebextensions/https-reencrypt-clb.config-Datei:

    option_settings:
      aws:elb:listener:443:
        InstancePort: 443
        InstanceProtocol: HTTPS
      aws:elasticbeanstalk:application:
        Application Healthcheck URL: HTTPS:443/

    Verwende für einen Application Load Balancer eine .ebextensions/https-reencrypt-alb.config-Datei:

    option_settings:
      aws:elbv2:listener:443:
        DefaultProcess: https
        ListenerEnabled: 'true'
        Protocol: HTTPS
      aws:elasticbeanstalk:environment:process:https:
        Port: '443'
        Protocol: HTTPS

    Verwende für einen Network Load Balancer eine .ebextensions/https-reencrypt-nlb.config-Datei:

    option_settings:
      aws:elbv2:listener:443:
        DefaultProcess: https
        ListenerEnabled: 'true'
      aws:elasticbeanstalk:environment:process:https:
        Port: '443'
  2. Aktualisiere den Load Balancer, damit er Datenverkehr über Port 443 empfängt.
    Du kannst eine neue Sicherheitsgruppe erstellen und Elastic Beanstalk diese Sicherheitsgruppe verwenden lassen, um Datenverkehr über Port 443 zu empfangen. Die folgende Datei .ebextensions/https-lbsecuritygroup.config erstellt beispielsweise eine Sicherheitsgruppe und fügt diese an den Load Balancer an:

    option_settings:
      # Use the custom security group for the load balancer
      aws:elb:loadbalancer:
        SecurityGroups: '`{ "Ref" : "loadbalancersg" }`'
        ManagedSecurityGroup: '`{ "Ref" : "loadbalancersg" }`'
    Resources:
      loadbalancersg:
        Type: AWS::EC2::SecurityGroup
        Properties:
          GroupDescription: load balancer security group
          VpcId: vpc-#######
          SecurityGroupIngress:
            - IpProtocol: tcp
              FromPort: 443
              ToPort: 443
              CidrIp: 0.0.0.0/0
            - IpProtocol: tcp
              FromPort: 80
              ToPort: 80
              CidrIp: 0.0.0.0/0
          SecurityGroupEgress:
            - IpProtocol: tcp
              FromPort: 80
              ToPort: 80
              CidrIp: 0.0.0.0/0

    Hinweis: Ersetze VpcId durch den Wert für die Umgebung. Das vorherige Beispiel beinhaltet Eingabe und Ausgabe über Port 80, um HTTP-Verbindungen zu ermöglichen. Um nur sichere Verbindungen zuzulassen, entferne die Konfiguration für Port 80 im Abschnitt SecurityGroupIngress.

  3. Füge Eingangs- und Ausgangsregeln hinzu, die Kommunikation über Port 443 zwischen der Sicherheitsgruppe des Load Balancers und der Sicherheitsgruppe der Instance erlauben.
    Du kannst beispielsweise die folgende .ebextensions/https-backendsecurity.config-Datei verwenden:

    Resources:
    # Add 443-inbound to instance security group (AWSEBSecurityGroup)
    httpsFromLoadBalancerSG:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
    GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
    IpProtocol: tcp
    ToPort: 443
    FromPort: 443
    SourceSecurityGroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
    balancer security group (loadbalancersg)
      httpsToBackendInstances:
        Type: AWS::EC2::SecurityGroupEgress
        Properties:
          GroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
          IpProtocol: tcp
          ToPort: 443
          FromPort: 443
          DestinationSecurityGroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
  4. Füge das folgende Snippet zu der Konfigurationsdatei hinzu und speicher es dann im Verzeichnis .ebextensions:

    files:
      /etc/pki/tls/certs/server.crt:
        content: |
          -----BEGIN CERTIFICATE-----
          certificate file contents
          -----END CERTIFICATE-----
    
      /etc/pki/tls/certs/server.key:
        content: |      
          -----BEGIN RSA PRIVATE KEY-----
          private key contents
          -----END RSA PRIVATE KEY-----

    Hinweis: Ersetze den Inhalt der Zertifikatsdatei durch den Inhalt der Zertifikatsdatei und den Inhalt des privaten Schlüssels durch den Inhalt des privaten Schlüssels.

    Die Konfiguration der HTTPS-Terminierung variiert je nach Lösungs-Stack. Die .ebextensions für jeden Lösungs-Stack schreibt den Wert des privaten Schlüssels und des Serverzertifikats in den .ebextensions fest. Um diese Dateien weitergehend zu sichern,lade die Inhalte auf Amazon Simple Storage Service (Amazon S3) hoch und verwende dann S3Auth, um sie zu Amazon EC2 abrufen.

  5. Verwende den Schlüssel files, um die folgenden Dateien auf der Instance /etc/pki/tls/certs/server.crt zu erstellen.

  6. Verwende die folgende Zertifikatsdatei, um die Zertifikatsdatei auf der Instance zu erstellen: 

         -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      first intermediate certificate
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      second intermediate certificate
      -----END CERTIFICATE-----

    Hinweis: Ersetze den Inhalt der Zertifikatsdatei durch den Inhalt des Zertifikats. Wenn du Zwischenzertifikate hast, füge diese nach dem Standortzertifikat in server.crt ein.

  7. Verwende /etc/pki/tls/certs/server.key, um die private Schlüsseldatei auf der Instance zu erstellen.
    Hinweis: Ersetze den Inhalt des privaten Schlüssels durch den Inhalt des privaten Schlüssels, der zum Erstellen der Zertifikatsanforderung oder des selbstsignierten Zertifikats verwendet wurde.

  8. Konfiguriere den Proxy-Server, der auf der Instance läuft, um HTTPS zu beenden. Alle Plattformen starten die Proxy-Serverkonfiguration auf einheitliche Weise.

  9. Füge die Konfigurationsdateien zu einem Verzeichnis namens .ebextensions im Stammverzeichnis des Anwendungspakets hinzu, um Konfigurationsdateien in ser Umgebung bereitzustellen.

  10. Stelle den Quellcode bereit, der diese Konfigurationsdateien enthält.

Stoppen von HTTPS auf der Instance (End-to-End-HTTPS) in einer Single-Instance-Umgebung

Verwende die Datei .ebextensions, um eingehenden Datenverkehr auf Port 443 zu der Instance zuzulassen, auf der die Elastic Beanstalk-Anwendung ausgeführt wird. 

Beispiel:

Resources:
  sslSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0

Konfiguriere den Proxy-Server, der auf der Instance läuft, um HTTPS zu beenden.

Hinweis: Die Konfiguration der HTTPS-Terminierung variiert je nach Lösungs-Stack. Die .ebextensions für jeden Lösungs-Stack schreibt den Wert des privaten Schlüssels und des Serverzertifikats in den .ebextensions fest. Um diese Dateien weitergehend zu sichern, kannst du die Inhalte auf Amazon Simple Storage Service (Amazon S3) hochladen und mithilfe von S3Auth zu Amazon EC2 abrufen.

Um Konfigurationsdateien in der Umgebung bereitzustellen, füge die Konfigurationsdateien zu einem Verzeichnis namens .ebextensions im Stammverzeichnis des Anwendungspakets hinzu. Stelle dann den Quellcode bereit, der diese Konfigurationsdateien enthält.

AWS OFFICIALAktualisiert vor 8 Monaten