【AWS】ALBとEC2間をHTTPS化する② ~ALB⇔EC2間をHTTPS化してみた~
記事の目次
はじめに
前回の記事では、以下の構成でクライアント⇔ALB間をHTTPS化しました。
クライアント ⇄ HTTPS ⇄ ALB ⇄ HTTP ⇄ EC2
今回は、いよいよALB⇔EC2間もHTTPS化していきます!
最終的には、以下の構成を目指します。
クライアント ⇄ HTTPS ⇄ ALB ⇄ HTTPS ⇄ EC2
STEP 1:mod_sslをインストール
まずは、EC2にmod_sslをインストールします。
以下のコマンドを実行します。
sudo dnf install -y mod_ssl
mod_sslは、ApacheでSSL/TLS通信を利用するためのモジュールです。
STEP 2:自己署名証明書を作成
今回はテスト環境のため、自己署名証明書を使用します。
まずは、証明書を配置するディレクトリを作成します。
sudo mkdir -p /etc/httpd/ssl
cd /etc/httpd/ssl
秘密鍵を作成
以下のコマンドを実行します。
sudo openssl req -new -x509 \
-key server.key \
-out server.crt \
-days 365000
証明書情報の入力を求められますが、今回はテスト目的のため、すべてブランクのまま作成しました。
STEP 3:SSL設定ファイルを確認
Apacheの設定ファイルを確認します。
ls /etc/httpd/conf.d/
ssl.confが存在することを確認します。
STEP 4:SSL設定ファイルを修正
ssl.confを編集します。
sudo vi /etc/httpd/conf.d/ssl.conf証明書のパスを以下のように修正します。
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key変更前後の設定を確認します。
before

after

STEP 5:ApacheのSSL設定を確認
Apacheが443ポートを待ち受ける設定になっているか確認します。
grep -R "Listen 443" /etc/httpd
Listen 443が設定されていることを確認します。
ポートの待ち受けを確認
続いて、443ポートの待ち受け状況を確認します。
netstat -nat
STEP 6:Apacheを再起動
まずは、Apacheの設定に問題がないか確認します。
sudo apachectl configtest
Syntax OKと表示されれば問題ありません。
続いて、Apacheを再起動します。
sudo systemctl restart httpd再起動後、再度ポートの待ち受け状況を確認します。
netstat -nat
443ポートが待ち受け状態になっていることを確認します。
これで、EC2側のHTTPS設定は完了です!
STEP 7:HTTPS用のターゲットグループを作成
次に、ALB側の設定を変更していきます。
EC2ダッシュボードに移動し、左部メニューの「ターゲットグループの作成」を選択
下記のように設定を入力
保留中として以下を含めるをクリック
確認と作成で問題なければ「ターゲットグループの作成」をクリック
ターゲットを登録
STEP 8:ALBのターゲットグループを変更
次に、ALBのターゲットグループを変更します。
先ほど作成したHTTPSのターゲットグループに変更
STEP 9:Security Groupを変更
次に、EC2のSecurity Groupを変更します。
HTTPS通信を許可するため、443番ポートを許可します。
本来であれば、ソースはALBのSecurity Groupを指定するのが望ましいです。
ただし今回は、EC2へ直接HTTPSアクセスして確認したいため、テスト目的でソースを0.0.0.0/0にしています。
※本番環境では、通信元をALBのSecurity Groupに制限することを推奨します。
STEP 10:ヘルスチェックをHTTPSへ変更
続いて、ターゲットグループのヘルスチェック設定を変更します。
ターゲットグループのダッシュボード上の「ヘルスチェック」タブを選択し
「編集」をクリック
ヘルスチェックのプロトコルをHTTPSへ変更します。
httpsに変更
これで、ALBからEC2へのヘルスチェックもHTTPSで実施されます。
接続確認
まずは、EC2へ直接HTTPSアクセスしてみます。
今回はEC2をパブリックサブネットに作成しているため、以下のURLへアクセスします。
https://EC2のパブリックIP
自己署名証明書を使用しているため、ブラウザからいくつか警告が表示されます。
今回はテスト環境のため、警告を無視してWebページが表示されることを確認します。
ALB経由でHTTPS接続
続いて、ALBのDNS名をコピーします。
以下のURLへアクセスします。
https://ALBのDNS名
無事にWebページが表示されました!
ALB⇔EC2間もHTTPS通信で接続できています。
さらに、ApacheのSSLアクセスログにもアクセス履歴が出力されていることを確認します。
/var/log/httpd/ssl_access_log
#または下記
/etc/httpd/log/ssl_access_log
まとめ
今回は、ALB⇔EC2間をHTTPS化しました。
最終的な構成は以下のとおりです。
クライアント
↓ HTTPS
ALB
↓ HTTPS
EC2
前回のクライアント⇔ALB間のHTTPS化と合わせて、クライアントからEC2までHTTPS通信にすることができました!
今回の検証では自己署名証明書を使用しましたが、本番環境では証明書の管理方法や証明書の信頼性についても考慮する必要があります。
以上で、ALB終端HTTPS化計画は完了です!
お疲れ様でした!