目次
参照: ALB とバックエンド EC2 間を HTTPS 通信させてみた
0. Introduction
EC2 の Web サーバは HTTPS 通信に対応していましたが、毎年 SSL 証明書の更新をする必要がありました。非常に小規模なシステム(約 200 名くらい使わない)ですが、ALB(Application Load Balancer)を導入することで、この手間を省くことを試みました。
-
対象となる読者
- EC2 の SSL 証明書を毎年更新するのが面倒だと思っている方
- ALB 導入を検討している方
-
本記事の価値
- ALB を導入することで、EC2 の Web サーバ上で毎年 SSL 証明書の更新をする作業を自動化することができます
-
前提
- EC2 を Web サーバとして公開している方
- Route53 で独自ドメインを管理している方
1. ALB を導入するメリット
ロードバランサというと、外部からのアクセスを複数のサーバーに振り分けて、負荷分散を行うことが目的でありますが、1 台の EC2 体制の Web システムにも導入するメリットはあります。下記 4 つのメリットとコストを天秤にかけて、導入するかどうかを検討する必要があります。
- HTTPS の SSL 終端にできる点
- SSL の管理を AWS に移管することが可能
- ACM の無料 SSL 証明書が利用できる点
- ACM の無料 SSL 証明書(ドメイン証明書)を利用可能
- AWS Shield Standard が有効になる点
- SYN フラッド攻撃(TCP Dos/DDoS 攻撃)に対する保護可能
- AWS WAF の利用ができる点
- AWS WAF が利用可能でルール等を設定可能
2. ACM で SSL 証明書を作成
まず、新しい SSL 証明書を作成します。「AWS Certificate Manager」で新しい ACM 管理証明書を「リクエスト」します。
- 「証明書をリクエスト」で「パブリック証明書をリクエスト」を選択
- ドメイン名には、Route53 で登録されているドメイン( 以下、「www.example.com」とする。)で「DNS検証」を選択
- 「Route53」でレコードを作成(CNAME を登録する)。「Route53 でレコードを作成」ボタンを押せば、自動的に Route53 に追加される。
- レコード作成後、DNS 検証が成功したことを確認。

3. ロードバランサーのターゲットグループ作成
次に、ロードバランサの作成の前に、ロードバランサからの転送先である「ターゲットグループ」の作成を行います。
- EC2 メニューの「ターゲットグループ」の「Create target group」を押下
- 「Specify group details」の「Basic configuration」で「Instance」を選択
- 「Target group name」では、好きなグループ名を記入
- 「Protocol Port」では、HTTPS 443
- 「VPC」 は EC2 の存在する VPC を選択
- 「Health checks」では、HTTPS 443 で、「Health check path」は、それぞれカスタマイズする必要あり。確認する方法としては、
curl -I https://www.example.com
でレスポンスヘッダーを見て、HTTP 200 OK が返るかどうかを確認すると良い。 - 「Register targets」で、ターゲットとなる EC2 を選択
- 「Available instances」から選択し、「Ports for the selected instances」で 443 として、「Include as pending below」を押下
- 最後に「create target group」で作成完了


4. ロードバランサーの作成
次に、ロードバランサの作成を行います。
- EC2 メニューの「ロードバランサー」の「ロードバランサーの作成」を押下
- 「Select load balancer type」では、「Application Load Balancer」を選択
- 「Basic configuration」で「Load balancer name」では、好きな名前を記入。「scheme」は「Internet-facing」、「IP address type」は「IPv4」
- 「Network mapping」では、「VPC」は EC2 の存在する VPC を選択。Mappings は、とりあえず「ap-northeast-1a」と「ap-northeast-1c」を選択
- 「Security groups」は、新規に作成(状況による)。以下では、HTTPS しか許可しないセキュリティグループにしている。


- 「Listeners and routing」は、HTTPS 443 として、Default Action には、5 で作成したターゲットグループに転送するように設定
- 「Secure listener settings」では、Security policy に、「ELBSecurityPolicy-2016-08」(デフォルト)にして、Default SSL/TLS certficate に「From ACM」で 前述で作成した SSL 証明書を選択
- 最後「Create load balancer」で作成完了


5. Route53 で設定を変更する
ドメインと IP を変換する Route53 の見る先を、従来の EC2 から ALB に変更します。つまり、Route53→EC2 から、Route53→ALB→EC2 に変更します。
- 「www.example.com」のAレコード「〇.〇.〇.〇(EC2のIP)」が登録されているのを確認
- この A レコードを「編集」する。「トラフィックのルーティング先」を、前述の「ALB へのエイリアス」に変更

6. EC2 のセキュリティグループの変更
ALB が終端になる構成になるので、EC2 へのアクセスは、ALB のみ許可することにする。つまり、EC2 のセキュリティグループの HTTP と HTTPS で前述のロードバランサー用のセキュリティグループに設定し直す。EC2 のセキュリティグループにチェックを入れ、インバウンドルールを編集します。

7. 動作確認
最後に、Route53→ALB→EC2 のようなルーティングになっているかどうかを確認します。SSL 証明書を更新した際に、切断が発生するのかどうかだが、新規セッションから有効となり、既存セッションへの影響は受けません。つまり切断は発生しません。
- EC2 にアクセス出来ているかどうかの確認
- Amazon から発行されている SSL 証明書に更新されているかどうかの確認
参考
- ALB とバックエンド EC2 間を HTTPS 通信させてみた
- 1台の EC2 でも ELB を使うメリットについてまとめてみました
- ALB とバックエンド EC2 間を HTTPS 通信させてみた
- AWS EC2 Nginx 環境での ELB ヘルスチェック設定 unhealthy