【AWS】ALBとEC2間をHTTPS化する② ~ALB⇔EC2間をHTTPS化してみた~

ALBアイキャッチ

はじめに

前回の記事では、以下の構成でクライアント⇔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

ssl.conf修正前

after

ssl.conf修正前

STEP 5:ApacheのSSL設定を確認

Apacheが443ポートを待ち受ける設定になっているか確認します。

grep -R "Listen 443" /etc/httpd
443作人

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化計画は完了です!

お疲れ様でした!