AWS Application Load Balancer は、AWS Certificate Manager(ACM)(証明書の発行/管理/自動配置を行うサービス)で取得したSSL/TLSサーバー証明書を使用することで、証明証に関するすべての運用作業を自動化することができます。(しかも証明書の発行費用は無料!)そこで今回は、AWS Certificate Manager で SSL/TLSサーバー証明書を発行し、AWS Application Load Balancer を SSL/TLS(HTTPSリスナー)に設定する方法をメモしておきました。
設定する構成
今回は、Application Load Balancer 配下(ターゲットグループと呼びます)のサーバーはEC2インスタンス1つのみです。負荷分散機能を使わないのでちょっともったいない気もしますが、Application Load Balancer が、SSLアクセラレータ(暗号化と復号を行う機器)としても機能しますので、配下のサーバーの負荷を軽減することができます。また、Application Load Balancer は HTTP/2 にも対応していますので、HTTP/2リバースプロキシとしても動作します。
承認メール受信用のメールアドレスの準備
まず初めに、AWS Certificate Manager で SSL/TLSサーバー証明書を取得するのですが、証明書を取得する際にドメインの所有者であることを確認するために、AWS から承認メールが以下のメールアドレスに送られてきます。(メールアドレスの example.com は、証明書を発行するドメイン名になります)
- admin@example.com
- webmaster@example.com
- postmaster@example.com
- hostmaster@example.com
- administrator@example.com
もし、これらのメールアドレス宛のメールを受信できない場合は、事前に受信できるようにしておく必要があります。
受信する方法としては、Eメール送受信サービスの Amazon SES を使う、もしくはメールサーバーソフトの Postfix をサクッと設定して、普段使っているメールアドレス宛に転送するといった方法もあります。もしよければ「簡単!サーバ証明書の承認メールを Postfix で受信/転送する方法」もあわせてご参照ください。
AWS Certificate Manager で SSL/TLSサーバー証明書を取得
承認メール受信用のメールアドレスの準備ができたら AWS Certificate Manager(ACM)で、 SSL/TLSサーバー証明書を取得します。今回 Application Load Balancer は、東京リージョンに作成しますので、AWS Certificate Manager も同じ東京リージョンを選択しておきます。
SSL/TLSサーバー証明書を発行するドメイン名を入力し「確認とリクエスト」をクリックします。
ドメイン名の登録所有者宛にメールを送信する旨が表示されます。前述した承認メール受信用のメールアドレスの準備がOKなら「確定とリクエスト」をクリックします。
承認メールが以下のメールアドレス宛に送信され、承認の完了待ちになります。
下のような内容のメールが届きますので、「Amazon Certificate Approvals」をクリックします。
WEBブラウザで確認画面が開きますので。間違えがなければ「I Approve」をクリックします。
承認が成功すると、以下の画面が表示されます。
AWS Certificate Manager の管理画面に戻り「続行」をクリックします。
以上で、SSL/TLSサーバー証明書が発行されます。認証局(CA)は「Amazon」、有効期限は約1年です。
証明書有効期限の60日前から自動更新プロセスが始まります。ただし、自動更新プロセスが適用されるには条件があるようです。(特にワイルドカード証明書を取得した場合は注意が必要です)詳しくはAWSの公式ブログをご参照ください。
AWS Certificate Manager (ACM) 証明書の自動更新時の注意点 | AWS Solutions Architect ブログ
VPC にサブネットを作成
Application Load Balancer は、EC2-VPC(バーチャルプライベートクラウド)のみサポートされています。また、ロードバランサーを作成する時に、2 つ以上のアベイラビリティーゾーンからサブネットを指定する必要がありますので、下準備として、異なるアベイラビリティーゾーンのサブネットを少なくとも2つ作成しておきます。
配下のEC2インスタンスの配置
Application Load Balancer の配下に登録するEC2インスタンスは、先ほど作成した異なるアベイラビリティーゾーンのサブネットのどちらかに配置しておきます。
Application Load Balancer を作成するときに、2 つ以上のアベイラビリティーゾーンからサブネットを指定する必要がありますが、配下のEC2インスタンスは1つでも構いません。
Application Load Balancer の設定
かなり下準備が長くなりましたが、本題の Application Load Balancer の作成です。
[サービス] → [EC2] → [ロードバランサー] 画面で「ロードバランサーの作成」をクリック
Application Load Balancer を選択し、「次へ」をクリック
ステップ 1: ロードバランサーの設定
適当な名前を入力し、ロードバランサーのプロトコルを「HTTPS (セキュア HTTP)」に変更します。(下に続きます)
(続き)下にスクロールして、先ほど異なるアベイラビリティーゾーンのサブネットを作成したVPCを選択し(+)ボタンをクリックしてサブネットを選択したら、次の手順に進みます。
ステップ 2: セキュリティ設定の構成
先ほど AWS Certificate Manager(ACM)で取得した証明書を選択し、次の手順に進みます。
ステップ 3: セキュリティグループの設定
セキュリティグループの設定で、Application Load Balancer の HTTPSのポートTCP/443番を空けておきます。
ステップ 4: ルーティングの設定
ここからは、ターゲットグループ(Application Load Balancer の配下に登録するインスタンス)の設定になります。
ターゲットグループに適当な名前を入力し、次の手順に進みます。
ステップ 5: ターゲットの登録
ターゲットグループに登録するインスタンスを選択し、「登録済みに追加」をクリックします。
「登録されたインスタンス」に、インスタンスが追加されていることを確認し、次の手順に進みます。
ステップ 6: 確認
設定内容を確認し、間違いがなければ「作成」ボタンをクリックします。
状態が、provisioning から active に変われば、Application Load Balancer の作成完了です。
動作確認
WEBブラウザの開発ツールなどで、表示するとHTTP/2プロトコルが使われているのが確認できると思います。
Qualys SSL LABS の「SSL Server Test」でテストしてみると、A評価でした。当たり前ですが、HTTPS設定についてまったく問題ありません。
おわりに
この記事を書くのにあたって AWS Application Load Balancer のことを調べていたら、あまりにもWEBフロントエンド機能が素晴らしいので、それらを別の記事「AWS Application Load Balancer のフロントエンド機能が凄すぎる件」にまとめました。よければご参照ください。
コメント