0

AWS Elastic Beanstalk アプリケーションをセットアップしており、トラフィックを HTTPS にしたいと考えています。

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

ここで、「セキュア リスナー ポート」をオフから 443 に設定し、証明書を選択するために、Elastic Beanstalk 環境 --> 構成 --> ネットワーク層/ロード バランサー (下の画像) に移動しました。

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

Elastic Beanstock リスナーの構成

注 - EC2 / ロード バランサーに移動すると証明書が表示され、ロード バランサーを HTTP から HTTPS に変更して、そこで証明書を選択することができました。しかし、これはポート 80 を表示する Elastic Beanstalk ロードバランサー設定には反映されませんでした。Beanstalk に HTTPS を使用しても、この方法では機能しませんでした。

ヘルプ!

4

2 に答える 2

1

現在、コンソールを介して、Certificate Manager で作成した証明書を Beanstalk 環境に割り当てる方法はありません。

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

つまり、次のことを行う必要があります。

  • elb-acm.json ファイルを作成し、Web ルートのどこかに配置します。私は自分のアプリケーションの Web ルートに直接気を配っています。
  • Certificate Manager に移動し、証明書の arn ID を取得します。
  • コマンドを使用してupdate environment、証明書を環境に適用します

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

私にとって、パスは単純でしたfile://elb-ecm.json(理由はそのためだと思います)。Web ルートでコマンドを実行していて、ファイルは同じディレクトリにありました。幸運を!

できますが、Beanstalk 環境を再構築するたびにロード バランサーが吹き飛ばされて再作成されるため、ロード バランサー コンソール (EC2 > ロード バランサー) から直接証明書を割り当てないでください。

また、証明書を Beanstalk 環境に適用する前に、必要な方法で証明書をセットアップしたことを確認してください。たとえば、*.mydomain.com とネイキッドの 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);

        }

    }

}
于 2016-04-06T11:48:20.163 に答える
0

Brian FitzGerald による回答とこのブログは、それを行う簡単な方法を理解するのに役立ちました (Elastic Beanstalk ロード バランサーに https を設定し、CRM 証明書を使用します)。

このソリューションは、AWS Elastic Beanstalk CLI (略してeb ) を使用するとより簡単です。環境を適切に設定したら、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 > Certificate Manager にあります。証明書を開き、ARN 番号 (右下) をコピーします。

構成を保存し、環境が更新されるのを待ちました。

于 2016-04-18T11:27:08.537 に答える