こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。
前回、『ALB+EC2のAWS環境にRoute53を利用して独自ドメインを適用させる手順』でALBを利用したWebサーバーのDNS設定手順について紹介しました。
今回はAWSのACM(Amazon Certificate Manager)を利用してALBのSSL化をおこない、HTTPS通信を実現する手順について紹介します。
- ACMの利用方法について理解する
- ALBを利用したWebサーバーでHTTPS通信を実現する
目次
今回利用するAWS検証環境のイメージ図
パブリックサブネットにALB、プライベートサブネットにEC2(Webサーバー)を配置した構成となっています。
EC2のマシンイメージ(AMI)は『Amazon Linux2』を利用しています。
なお、EC2へのnginxのインストールと、独自ドメインによるHTTPアクセスの設定が完了している前提で話を進めます。
今回利用するAWS検証環境の構築手順については『ALB+EC2のAWS環境にRoute53を利用して独自ドメインを適用させる手順』を参考にしてください。
ACMでSSLサーバー証明書を発行する
ACMとはAWS Certificate Managerの略で、SSLサーバー証明書を発行できるサービスです。
ACMはELBやCloudFrontをはじめとしたACM統合サービスにおいて利用可能です。
AWSマネージメントコンソールで『Certificate Manager』を選択します。
『証明書のプロビジョニング』の『今すぐ始める』を選択します。
『パブリック証明書のリクエスト』にチェックをし、『証明書のリクエスト』を選択します。
『ドメイン名』にSSL化対象の独自ドメインを入力し、『次へ』を選択します。
ACMでSSLサーバー証明書を発行するためにはまず独自ドメインの所有認証を行う必要があります。 ACMでは『DNSの検証』と『Eメールの検証』の2つの認証方法が用意されています。
今回は『DNSの検証』を利用して認証を行いたいと思います。
『DNSの検証』にチェックを入れ『次へ』を選択します。
必要であれば、タグの設定をします。
記載内容に問題なければ『確定とリクエスト』を選択します。
ドメインの検証を行う
ACMを利用したSSLサーバー証明書の発行を完了させるにはドメインの検証が必要です。
今回は『DNSの検証』を利用した認証手順について紹介します。
先ほどのACMの証明書リクエスト画面にある『DNS設定をファイルにエクスポート』を選択します。
ダウンロードしたファイルにはCNAMEタイプのレコードが記載されています。
CNAMEとは、acme.example.com
などの現在のレコードの名前に対する DNS クエリを、別のドメイン (example.com
、example.net
など) またはサブドメイン (acme.example.com
、zenith.example.org
など) にマッピングするレコードです。1
ダウンロードしたファイルに記載されているCNAMEをRoute53に登録することでDNS検証は完了します。
『Route53ダッシュボード』を開き、『ホストゾーン』にある紐付け対象のドメインをクリックします。
『レコードセットの作成』を選択します。
『タイプ』に『CNAME – 正規名』を指定します。
csvでエクスポートした情報を記載し、『作成』を押します。
作成後、CNAMEレコードが表示されていればOKです。
CNAMEレコードの登録が完了したら、ACMの画面を確認します。
対象のドメインの状況が『発行済み』になればOKです。
なお、今回はDNS検証を利用してドメインの所有認証を行いましたが、メール認証にした場合はRoute53にCNAMEを登録する作業は不要となります。
ACMで発行した証明書をALBに適用させる
発行したSSLサーバー証明書をALBに適用させます。
『EC2ダッシュボード』でロードバランサー一覧を開き、SSL化を行う対象のALBをチェックします。
チェック後、『リスナー』タブにある『リスナーの追加』を選択します。
『プロトコル』を『HTTPS』に、『デフォルトのSSL証明書』で先ほどACMで作成した証明書を選択します。
『デフォルトアクション』はターゲットグループへの転送とします。
設定後、『保存』を選択します。
リスナーの一覧にHTTPSが追加されていればOKです。
セキュリティグループの編集
ALBのセキュリティグループでHTTPSのインバウンドアクセスが許可されているか確認します。
ALBの詳細画面でセキュリティグループを選択します。
インバウンドルールにHTTPSが設定されていればOKです。
もし設定されていない場合はルールを編集してHTTPSを追加しておきましょう。
動作確認
https
でアクセスできるようになっていればOKです。鍵マークをクリックすると証明書の発行元がAmazonになっていることがわかります。
補足: HTTPのアクセスをHTTPSへリダイレクトさせる
ここまででHTTPSでアクセスできるようになりましたが、HTTPでアクセスがきた場合はHTTPで通信が行われます。 そこで、HTTPでアクセスがきた場合はHTTPSへリダイレクトさせるように設定を追加します。
ロードバランサーのリスナー一覧にあるHTTPの『ルールの表示/編集』を選択します。
現在のデフォルトアクションはターゲットグループへの転送となっています。
下記のように、『パスが*(全て)の場合にHTTPSでリダイレクトさせる』というルールを追加します。
以上で設定は完了です。これでhttp
でアクセスするとhttps
にリダイレクトされるようになっています。
curl
で確認する場合は以下のようになります。
### HTTPレスポンスヘッダーの取得
$curl -I http://deliciouslif.com/
→ httpsへ301リダイレクトされていればOK
HTTP/1.1 301 Moved Permanently
Server: awselb/2.0
Date: Wed, 03 Jun 2020 12:58:03 GMT
Content-Type: text/html
Content-Length: 150
Connection: keep-alive
Location: https://deliciouslif.com:443/
まとめ
以上でACMを利用して、ALBをSSL化する方法の紹介を終わります。
- ACMでSSLサーバー証明書の登録を行う
- DNS検証もしくはメール検証を行い証明書を発行する
- ALBのリスナーにACMの証明書を利用したHTTPSを登録する。
- ALBの所属するセキュリティグループでHTTPSのインバウンド通信を許可する
この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!