現在、コンソールを介して、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);
}
}
}