0

Ich bin AWS Elastic Beanstalk-Anwendung einrichten und ich möchte den Verkehr zu es HTTPS sein.Wo sucht AWS Elastic Beanstalk Load Balancer nach Zertifizierungen?

Ich habe einen DNS-CNAME-Datensatz erstellt, der der BeanStalk-URL entspricht, und ein Zertifikat für diesen DNS-Namen in AWS Certificate Manager erstellt und genehmigt.

Jetzt ging ich zu Elastic Beanstalk-Umgebung -> Konfiguration -> Network Tier/Load Balancer (Bild unten), um den "Secure listener port" von OFF auf 443 zu setzen und mein Zertifikat zu wählen.

Aber mein Zertifikat ist nicht zur Auswahl! Also meine Frage ist, wie man mein Zertifikat oder ein Zertifikat in diese Auswahlliste bekommt, oder ist das ein Fehler in AWS?

Elastic Beanstock Listener configuration

Hinweis - ich konnte mein Zertifikat sehen, wenn sie auf EC2/Load Balancer geht und konnte den Load-Balancer von HTTP auf HTTPS ändern und mein Zertifikat dort wählen. Dies hat sich jedoch nicht in der Load Balancer-Konfiguration von Elastic Beanstalk widergespiegelt, die Port 80 weiterhin anzeigt. Die Verwendung von HTTPS mit dem Beanstalk funktionierte nicht auf diese Weise.

Hilfe!

Antwort

0

Die Antwort von Brian FitzGerald und this blog mir eine einfachen Möglichkeit, herauszufinden, half, das zu tun (Set https auf dem Elastic Bohnenstengel Load Balancer und ein CRM-Zertifikat verwendet für es). Die Lösung ist einfacher unter Verwendung AWS Elastic Beanstalk CLI (eb für kurz). Nachdem Sie die Umgebung ordnungsgemäß eingerichtet haben, können Sie den Befehl eb config verwenden. Wenn das Bearbeitungsfenster geöffnet wird, blättern Sie bis zum Abschnitt aws:elb:loadbalancer.

den Load-Balancer Abschnitt ändern, so zu sein (in meinem Fall habe ich den Port 80 vollständig entfernt, können Sie es halten):

aws:elb:loadbalancer: 
    CrossZone: 'true' 
    LoadBalancerHTTPPort: 'OFF' 
    LoadBalancerHTTPSPort: '443' 
    LoadBalancerPortProtocol: HTTP 
    LoadBalancerSSLPortProtocol: HTTPS 
    SSLCertificateId: PLACE HERE THE CRM CERTIFICATE ARN 
    SecurityGroups: '{"Fn::GetAtt":["AWSEBLoadBalancerSecurityGroup","GroupId"]},{"Ref":"AWSEBLoadBalancerSecurityGroup"}' 

Die arn des Zertifikats kann in AWS> Certificate Manager gefunden werden . Öffnen Sie das Zertifikat und kopieren Sie die ARN-Nummer (rechts unten).

Ich speicherte die Konfiguration, wartete auf die Aktualisierung der Umgebung und das war es.

1

Über die Konsole ist es derzeit nicht möglich, Ihr Zertifikat, das Sie im Zertifikatsmanager erstellt haben, Ihrer Beanstalk-Umgebung zuzuweisen.

Um dies zu erreichen, müssen Sie die AWS CLI verwenden. Ich konnte das schaffen, und zum Glück ist es einfach.

Kurz gesagt, müssen Sie: es in Ihrem Web-Root irgendwo

  • eine elb-acm.json-Datei erstellen und platzieren. Ich lege meinen Geist direkt in den Webstamm meiner Anwendung.
  • zum Zertifikat-Manager gehen und die arn ID Ihres Zertifikats
  • den update environment Befehl erhalten Sie Ihr Zertifikat an Ihre Umgebung

aws elasticbeanstalk update-environment --environment-name Your-Environment --option-settings file://PATH-TO-JSON/elb-acm.json

Für mich ist der Weg einfach anzuwenden war file://elb-ecm.json da (Ich glaube der Grund ist, weil) Ich habe den Befehl ausgeführt, während im Webstamm und die Datei in demselben Verzeichnis war This article goes into detail (und arbeitete für mich). Viel Glück!

Bitte beachten Sie, dass Sie das Zertifikat NICHT direkt über die Load-Balancer-Konsole (EC2> Load Balancer) zuweisen sollten, da der Load Balancer bei jeder Neuerstellung Ihrer Beanstalk-Umgebung weggeblasen und neu erstellt wird.

Stellen Sie außerdem sicher, dass Sie Ihr Zertifikat wie gewünscht eingerichtet haben, bevor Sie es auf Ihre Beanstalk-Umgebung anwenden. Wenn Sie zum Beispiel * .mydomain.com und die nackte mydomain.com beide sicher haben möchten, stellen Sie sicher, dass diese zuerst vollständig konfiguriert ist, da es keine einfache Möglichkeit gibt, Ihr Zertifikat von Ihrer Umgebung zu trennen, sobald Sie diese Befehle ausgeführt haben (Sie müssten Ihre Umgebung grundsätzlich beenden und eine neue erstellen, wenn ich mich in diesem Szenario nicht täusche).

Sie möchten auch einen Umleitungscode in Ihrer App haben, um eine 301-Weiterleitung bei einer unsicheren Anfrage durchzuführen, sobald Sie Ihr Zertifikat eingerichtet haben.Um die Weiterleitung durchzuführen, müssen Sie in der eingehenden Anfrage nach dem Header X-Forwarded-Proto suchen. Wenn es nicht sicher ist, sollten Sie zum sicheren Port umleiten. Zum Beispiel, hier ist, wie mein Anwendungscode aussieht:

// in production, only allow secure requests (https) 
public function performSecureRedirect(rc) { 

    // based on domain comparison 
    var isLive = myEnvironmentData.isLive; 

    // setting up the health check url is important for smooth beanstalk deployments 
    // beanstalk issues this healthcheck request via a non-secure port 
    var isAmazonHealthcheckUrl = rc.event eq "system.healthcheck"; 

    if (isLive and not isAmazonHealthcheckUrl) { 

     var headerData = getHTTPRequestData().headers; 

     // x-forwarded-proto is a special header 
     // setup by Amazon ELB (Elastic Load Balancer) 
     var requestProtocol = getHttpRequestData().headers['x-forwarded-proto']; 
     var isSecureRequest = requestProtocol eq "https"; 

     if (not isSecureRequest) { 

      location("https://" & cgi.server_name & cgi.path_info, false, 301); 

     } 

    } 

} 
+0

Tx dafür. In Bezug auf aws cli - reden wir über den 'awsebcli' oder nur den 'aws' cli? Ich werde das Verfahren bald überprüfen. Inzwischen habe ich es tatsächlich geschafft, dies durch Änderung von EC2> Load Balancer so gut einzustellen, dass Sie erwähnt haben, dass dies bei Upgrades ersetzt werden würde. – drorsun

+0

Ziemlich sicher, es ist der wichtigste 'aws' CLI. Dieser Artikel, den ich mit Anand Capur verlinkt habe, ist ziemlich gut. –

Verwandte Themen