0

私はAWS Elastic Beanstalkアプリケーションを設定しており、そのトラフィックをHTTPSにしたいと考えています。AWS Elastic Beanstalk Load Balancerはどこで認証を取得しますか?

私はbeanstalk URLと一致するDNS CNAMEレコードを作成し、AWS Certificate ManagerでそのDNS名の証明書を作成して承認しました。

「セキュアリスナーポート」をOFFから443に設定し、自分の証明書を選択するには、Elastic Beanstalk環境 - >構成 - >ネットワーク層/ロードバランサ(下の図)に行った。

しかし、私の証明書は選択できません! 私の質問は、証明書や証明書をその選択リストに入れる方法ですか、それともAWSのバグですか?

Elastic Beanstock Listener configuration

注 - 私はEC2 /ロードバランサに行くとき、私の証明書を見ることができたとHTTPからHTTPSにロードバランサを変更して、そこに自分の証明書を選択することができました。 しかしこれはポート80を示しているElastic Beanstalkロードバランサの設定に反映されませんでした。HTTPSをBeanstalkに使用すると、このようには動作しませんでした。

ヘルプ!

答えて

0

ブライアン・フィッツジェラルドとthis blogによって答えは私が(Elastic BeanstalkでロードバランサにHTTPSを設定し、ためにCRMの証明書を使用することを行うための簡単な方法を考え出す助けましたそれ)。

AWS Elastic Beanstalk CLIeb)を使用する方が簡単です。環境を正しく設定したら、eb configコマンドを使用できます。 編集ウィンドウが開いたら、aws:elb:loadbalancerセクションまでスクロールします。

そうするロードバランサのセクションを変更します(私の場合、私は完全にポート80を削除し、あなたはそれを維持したい場合があります):

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"}' 

証明書のARNは、AWSで見つけることができます>証明書マネージャ。 証明書を開き、ARN番号をコピーします(右下にあります)。

私は設定を保存し、環境が更新されるのを待っていました。

1

現在、コンソールからは、証明書マネージャで作成した証明書をBeanstalk環境に割り当てる方法はありません。

これを実行するには、AWS CLIを使用する必要があります。私はこれを達成することができました。そして幸いにも、それは簡単です。

  • はELB-acm.jsonファイルを作成し、Webルートのどこかにそれを置く:要するに

    は、あなたがする必要があります。私は自分のアプリケーションのWebルートに直接心を入れました。
  • は(
  • はパスがあるため、単純にfile://elb-ecm.jsonだった私にとっては、ご使用の環境

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

に証明書を適用するupdate environmentコマンドを使用して証明書マネージャに移動し、証明書のARN IDを取得します私はその理由は信じていると信じています)私はWeb rootでコマンドを実行していて、そのファイルは同じディレクトリにありますThis article goes into detail(そして私のために働いていました)。がんばろう!

Beanstalk環境を再構築するたびに、ロードバランサが吹き飛ばされ再作成されるため、できるだけ早く証明書をLoad Balancerコンソール(EC2> Load Balancer)に割り当てることはできません。

また、Beanstalk環境に証明書を適用する前に証明書を設定していることを確認してください。たとえば、* .mydomain.comとnaked mydomain.comの両方を安全にしたい場合は、これらのコマンドを実行した後で証明書を環境から簡単に削除する方法がないため、完全に最初に設定されていることを確認してください(このシナリオで間違っていなければ、基本的にあなたの環境を完全に終了し、新しい環境を作成する必要があります)。

また、証明書の設定が完了すると、セキュリティ保護されていないリクエストに対して301リダイレクトを実行するために、アプリケーションにリダイレクトコードを設定することをお勧めします。リダイレクトを実行するには、着信要求でX-Forwarded-Protoヘッダーを検索する必要があります。安全でない場合は、セキュアポートにリダイレクトする必要があります。たとえば、ここに私のアプリケーションのコードがどのように見えるかです:

// 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。 aws cliについて - 私たちは 'awsebcli'または単に 'aws' cliについて話していますか?その手続きをすぐに確認します。 一方、私は実際にEC2> Load Balancerの変更によってこれを設定しましたので、アップグレードでこれが置き換えられると述べました。 – drorsun

+0

それはメインの 'aws' cliだと確信しています。私がAnand Capurにリンクしたその記事はかなり良いです。 –

関連する問題