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 Sie einen benutzerdefinierten Domänennamen für Ihre Elastic-Beanstalk-Umgebung konfiguriert haben, können Sie HTTPS verwenden, um Benutzern eine sichere Verbindung zu Ihrer Website zu ermöglichen. Wenn Sie keinen Domänennamen besitzen, können Sie HTTPS mit einem selbstsignierten Zertifikat für Entwicklungs- und Testzwecke nutzen.

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

Es hat sich bewährt, AWS Certificate Manager (ACM) zur programmgesteuerten Bereitstellung und Verwaltung Ihrer Serverzertifikate zu verwenden. Sie können 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 IhrerAWS-Region nicht verfügbar ist, verwenden Sie AWS CLI.

**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Lösung

Vorbereiten Ihrer Elastic-Beanstalk-Umgebung

  1. Um Datenverkehr an Ihre Elastic-Beanstalk-Umgebung weiterzuleiten, registrieren Sie eine neue Domain mit Amazon Route 53 oder einem anderen Domainanbieter.
  2. Wenn die URL Ihrer Umgebung eine Region enthält, erstellen Sie einen Aliasnamen. Oder erstellen Sie einen CNAME-Datensatz, wenn die URL Ihrer Umgebung keine Region enthält.
    **Wichtig:**Sie können CNAME-Datensätze für Umgebungen verwenden, die Sie vor 2016 erstellt haben. Sie können keinen CNAME-Datensatz mit einer Zonen-Apex-Domain verwenden; auch bekannt als Stammdomain oder Naked Domain. Weitere Informationen finden Sie unter Choosing between alias and non-alias records.
  3. Erstellen Sie ein Zertifikat in ACM oder laden Sie ein Zertifikat eines Drittanbieters oder ein selbstsigniertes Zertifikat und einen privaten Schlüssel auf IAM hoch.

Hinzufügen von Listeners zu Ihren Load Balancers

  1. Öffnen Sie die Elastic-Beanstalk-Konsole und wählen Sie Ihre Umgebung aus.
  2. Wählen Sie im Navigationsbereich Konfiguration aus.
  3. Wählen Sie in der Kategorie Load Balancer die Option Ändern aus.
  4. Um den Listener für Port 443 hinzuzufügen, führen Sie die Schritte für den Load Balancer aus, der sich in Ihrer Elastic-Beanstalk-Umgebung befindet.

Classic Load Balancer

Führen Sie die folgenden Schritte aus:

  1. Wählen Sie Listener hinzufügen.
  2. Geben Sie als Port den Port für den eingehenden Datenverkehr ein, meist 443.
  3. Wählen Sie für Protokoll die Option HTTPS aus.
  4. Geben Sie für Instance-Port 80 ein.
  5. Wählen Sie für Instance-Protokoll die Option HTTP aus.
  6. Wählen Sie für SSL-Zertifikat Ihr Zertifikat und dann die SSL-Richtlinie aus der Dropdown-Liste aus.
  7. Wählen Sie Hinzufügen und dann Anwenden.

Application Load Balancer

Führen Sie die folgenden Schritte aus:

  1. Wählen Sie Listener hinzufügen.
  2. Geben Sie als Port den Port für eingehenden Datenverkehr ein, meist 443.
  3. Wählen Sie für Protokoll die Option HTTPS aus.
  4. Wählen Sie für SSL-Zertifikat Ihr Zertifikat und dann die SSL-Richtlinie aus der Dropdown-Liste aus.
  5. Wählen Sie Hinzufügen und dann Anwenden.

Network Load Balancer

Führen Sie die folgenden Schritte aus:

  1. Wählen Sie Listener hinzufügen.
  2. Geben Sie als Port den Port für eingehenden Datenverkehr ein, meist 443.
  3. Wählen Sie Hinzufügen und dann Anwenden.

Konfigurieren Ihrer Instances zum Beenden von HTTPS-Verbindungen

Um Ihre Instances so zu konfigurieren, dass sie HTTPS-Verbindungen beenden, müssen Sie mittels Konfigurationsdateien die auf den Instances ausgeführte Software modifizieren. Verwenden Sie Konfigurationsdateien außerdem, um Sicherheitsgruppen so zu ändern, dass sie sichere Verbindungen ermöglichen.

**Wichtig:**Wenn Sie eine Single-Instance-Umgebung verwenden, überspringen Sie die folgenden Schritte. Führen Sie die Schritte im Abschnitt Beenden von HTTPS auf der Instance (End-to-End-HTTPS) in einer Single-Instance-Umgebung aus.

  1. Fügen Sie Ihrem Load Balancer einen sicheren Listener hinzu. Verwenden Sie je nach Typ des Load Balancers in Ihrer Elastic-Beanstalk-Umgebung eine der folgenden Konfigurationsdateien.

    Verwenden Sie 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/

    Verwenden Sie 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

    Verwenden Sie 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:
    
  2. Aktualisieren Sie den Load Balancer, damit er Datenverkehr über Port 443 empfängt.

    Sie können 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:**Ersetzen Sie VpcId durch den Wert für Ihre Umgebung.

    Das vorangehende Beispiel beinhaltet den Ein- und Ausgang über Port 80, um HTTPS-Verbindungen zu ermöglichen. Um nur sichere Verbindungen zuzulassen, entfernen Sie die Konfiguration für Port 80 im Abschnitt SecurityGroupIngress.

  3. Fügen Sie Eingangs- und Ausgangsregeln hinzu, die Kommunikation über Port 443 zwischen der Sicherheitsgruppe des Load Balancers und der Sicherheitsgruppe der Instance erlauben.

    Sie können 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"]}
      # Add 443-outbound to load 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"]}

    Der Load Balancer verwendet nun HTTPS, um eine sichere Verbindung zu Ihren Backend-Instances herzustellen. Der Load Balancer akzeptiert jedes Zertifikat von der Instance, z. B. ein selbstsigniertes oder eines von einer vertrauenswürdigen Zertifizierungsstelle.

    **Hinweis:**Sie können dem Load Balancer Richtlinien hinzufügen, die diesem Load Balancer mitteilen, nur einem bestimmten Zertifikat zu vertrauen. Die folgende Datei .ebextensions/https-backendauth.config erstellt beispielsweise zwei Richtlinien. Eine Richtlinie gibt ein öffentliches Zertifikat an, während die andere den Load Balancer anweist, für Verbindungen zum Instance-Port 443 nur diesem öffentlichen Zertifikat zu vertrauen.

    option_settings:
      # Backend Encryption Policy
      aws:elb:policies:backendencryption:
        PublicKeyPolicyNames: backendkey
        InstancePorts:  443
      # Public Key Policy
      aws:elb:policies:backendkey:
        PublicKey: |
          -----BEGIN CERTIFICATE-----
          ################################################################
          ################################################################
          ################################################################
          ################################################################
          ################################################
          -----END CERTIFICATE-----
  4. Konfigurieren Sie den Proxy-Server, der auf der Instance läuft, um HTTPS zu beenden.

    **Hinweis:**Die Konfiguration variiert je nach Ihrem 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, können Sie die Inhalte auf Amazon Simple Storage Service (Amazon S3) hochladen und mithilfe von S3Auth zu Amazon EC2 abrufen.

  5. Um Konfigurationsdateien in Ihrer Umgebung bereitzustellen, fügen Sie die Konfigurationsdateien zu einem Verzeichnis namens .ebextensions im Stammverzeichnis Ihres Anwendungspakets hinzu. Stellen Sie dann den Quellcode bereit, der diese Konfigurationsdateien enthält.

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

  1. Erlauben Sie eingehenden Datenverkehr auf Port 443 derjenigen Instance, auf der Ihre Elastic-Beanstalk-Anwendung ausgeführt wird.

    Das folgende Beispiel verwendet .ebextensions, um eingehenden Datenverkehr auf Port 443 zuzulassen:

    Resources:
      sslSecurityGroupIngress:
        Type: AWS::EC2::SecurityGroupIngress
        Properties:
          GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
          IpProtocol: tcp
          ToPort: 443
          FromPort: 443
          CidrIp: 0.0.0.0/0
  2. Konfigurieren Sie den Proxy-Server, der auf der Instance läuft, um HTTPS zu beenden.

    **Hinweis:**Die Konfiguration variiert je nach Ihrem 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, können Sie die Inhalte auf Amazon S3 hochladen und mit S3Auth zu Amazon EC2 abrufen.

  3. Um Konfigurationsdateien in Ihrer Umgebung bereitzustellen, fügen Sie die Konfigurationsdateien zu einem Verzeichnis namens .ebextensions im Stammverzeichnis Ihres Anwendungspakets hinzu. Stellen Sie dann den Quellcode bereit, der diese Konfigurationsdateien enthält.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Monaten