AWS ALB導入で無料のSSL証明書更新

ALB(Application Load Balancer)を導入することで、EC2のWebサーバ上で毎年SSL証明書の更新をする作業を自動化することができます。

images/cards/alb-ec2.webp

目次


参照: 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 つのメリットとコストを天秤にかけて、導入するかどうかを検討する必要があります。

  1. HTTPS の SSL 終端にできる点
    • SSL の管理を AWS に移管することが可能
  2. ACM の無料 SSL 証明書が利用できる点
    • ACM の無料 SSL 証明書(ドメイン証明書)を利用可能
  3. AWS Shield Standard が有効になる点
    • SYN フラッド攻撃(TCP Dos/DDoS 攻撃)に対する保護可能
  4. AWS WAF の利用ができる点
    • AWS WAF が利用可能でルール等を設定可能

2. ACM で SSL 証明書を作成

まず、新しい SSL 証明書を作成します。「AWS Certificate Manager」で新しい ACM 管理証明書を「リクエスト」します。

  1. 「証明書をリクエスト」で「パブリック証明書をリクエスト」を選択
  2. ドメイン名には、Route53 で登録されているドメイン( 以下、「www.example.com」とする。)で「DNS検証」を選択
  3. 「Route53」でレコードを作成(CNAME を登録する)。「Route53 でレコードを作成」ボタンを押せば、自動的に Route53 に追加される。
  4. レコード作成後、DNS 検証が成功したことを確認。
SSL証明書のステータス
SSL証明書のステータス例

3. ロードバランサーのターゲットグループ作成

次に、ロードバランサの作成の前に、ロードバランサからの転送先である「ターゲットグループ」の作成を行います。

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

Target groupsのHealth checks
Target groupsのHealth checks

4. ロードバランサーの作成

次に、ロードバランサの作成を行います。

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

ALBのセキュリティグループ(アウトバウンドルール)
アウトバウンドルール

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

ロードバランサーのリスナー
ロードバランサーの「リスナー」

5. Route53 で設定を変更する

ドメインと IP を変換する Route53 の見る先を、従来の EC2 から ALB に変更します。つまり、Route53→EC2 から、Route53→ALB→EC2 に変更します。

  1. 「www.example.com」のAレコード「〇.〇.〇.〇(EC2のIP)」が登録されているのを確認
  2. この A レコードを「編集」する。「トラフィックのルーティング先」を、前述の「ALB へのエイリアス」に変更
Route53の設定変更例
Route53の設定変更例

6. EC2 のセキュリティグループの変更

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

EC2のセキュリティグループ変更例
セキュリティグループ変更例

7. 動作確認

最後に、Route53→ALB→EC2 のようなルーティングになっているかどうかを確認します。SSL 証明書を更新した際に、切断が発生するのかどうかだが、新規セッションから有効となり、既存セッションへの影響は受けません。つまり切断は発生しません。

  1. EC2 にアクセス出来ているかどうかの確認
  2. Amazon から発行されている SSL 証明書に更新されているかどうかの確認

参考

関連記事