CloudFrontとElasticBeanstalkを使った際のHTTPS化
CloudFrontとElasticBeanstalkを併用する構成の場合にどうやって通信をHTTPS化するを解説します。
ざっくり概要
- CloudFrontだけじゃなく、ElasticBeanstalkの方にもドメイン名を指定しておくと便利です。
- ユーザーとCloudFront間の通信だけではなく、CloudFrontのオリジンとなるとElasticBeanstalk間の通信もHTTPS化します。
- ElasticBeanstalkはCloudFrontを経由しないアクセスを制限するために別途設定を追加します。
ドメイン設定
CloudFrontの方をexample.com、ElasticBeanstalkの方をserver.example.comと設定することにします。
CloudFrontのHTTPS化
CloudFrontのHTTPS化はCertificateManagerから証明書を発行し、それをCloudFrontで利用します。
このときに気をつけることはただ一つだけです。CloudFrontで使う証明書はバージニア北部リージョンで作らなくてはいけません。東京リージョンで作ったものは使えませんのでご注意ください。
ElasticBeanstalkのHTTPS化
証明書をElasticBeanstalkの設定画面で設定します。このときの証明書は東京リージョンのElasticBeastalkを使っているのであれば東京リージョンのCertificateManagerで設定した証明書を使います。つまりCertificateManagerとElasticBeanstalkで使う証明書は全く別物になります。
ElasticBeanstalkでリダイレクト設定
リダイレクトの方法は複数考えられると思いますが、今回はApacheのmod_rewriteでリダイレクト設定します。
files:
# ALBを通しているのにHOST名がAPP_URLと一致していなかったらリダイレクト
# healthcheckのためにALBを通していないアクセスはリダイレクトしない
"/tmp/force_host_redirect.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
{
echo "RewriteEngine On"
echo "RewriteCond %{HTTP:X-Forwarded-Proto} !^$"
echo "RewriteCond https://%{HTTP_HOST} !=https://example.com"
echo "RewriteRule (.*) https://example.com%{REQUEST_URI} [R=301,L]"
} > /etc/httpd/conf.d/force_host_redirect.conf
container_commands:
set_up:
command: /tmp/force_host_redirect.sh
HOSTが期待したものと違ったらリダイレクトする、というだけの設定ですが、ElasticBeanstalkのhealthcheckが通るように工夫しています。
まとめ
最初、CloudFrontとElasticBeanstalkで同じ証明書を使わないといけないんじゃないかと思って、だいぶハマってしまいましたが、ElasticBeanstalkに対してCloudFrontがクライアントのように働きHTTPS通信してくれるので、問題なく設定出来るということが分かりました。CloudFrontからElasticBeanstalkへの通信がグローバルなインターネット経由であるという認識がなかったですが、理解したら早かったです。
Author And Source
この問題について(CloudFrontとElasticBeanstalkを使った際のHTTPS化), 我々は、より多くの情報をここで見つけました https://qiita.com/kazuhei/items/d92d6214116b6d7641fc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .