https://immersed-in-knowing.com/?p=301 の続きです。
HTTP通信ではなくHTTPS通信できるようにします。
HTTPアクセスをHTTPSアクセスに変換するためには、SSL/TLS証明書を取得し、EC2インスタンスにインストールする必要があります。次に、WebサービスをHTTPSで提供するために、ウェブサーバーの設定を変更します。
AWS Certificate Manager (ACM) を使用して無料のSSL/TLS証明書を取得することができます。
本記事でやること
- 証明書の取得
- SSLモジュールの有効化
- ターゲットグループの設定
- ロードバランサの設定
- セキュリティグループの更新
1.証明書の取得
AWSマネジメントコンソールを開き、Certificate Manager (ACM)を開き、リクエストを押下します。
パブリック証明書をリクエストに選択したまま次へを押下します。
完全修飾ドメイン名にドメインを入力します。
検証方法はAWS Certificate Manager (ACM) でパブリック証明書をリクエストする際に、DNS検証とEメール検証は、証明書の所有権を確認するための異なる方法です。
今回はDNS検証を選択します。
リクエストを押下します。
成功すると「ID のある証明書が正常にリクエストされました」と表示されます。
ステータスが保留中の検証となっています。
AWS Certificate Manager (ACM)で証明書一覧から証明書IDを押下します。
ドメインから「Route53でレコードを作成」を押下します。
遷移先画面でレコードを作成を押下します。
CNAMEレコード(Canonical Nameレコード)は、ドメインネームシステム(DNS)において、あるドメイン名を別のドメイン名にエイリアス(別名)するためのレコードタイプです。
あるドメイン名にアクセスすると、CNAMEレコードで指定された別のドメイン名にリダイレクトされます。これにより、同じリソース(ウェブサイト、メールサーバーなど)に異なる名前でアクセスできるようになります。
発行済になります。
AWSコンソールよりRoute53を開きホストゾーンのドメインを押下します。
タイプAにチェックを入れて、レコードの編集を押下します。
Application Load BalancerとClassic Load Balancerへのエイリアスを選択します。
リージョンを東京を設定します。検索マークを設定して保存します。
更新されたら正常に更新されました。と表示されます。
2.SSLモジュールの有効化
ApacheにSSLモジュールを有効にします。
SSLモジュールの有効化とは、webサーバー(この場合はApache)がSSL(Secure Sockets Layer)通信を処理するための機能を有効にすることです。
SSLは、ウェブサーバーとクライアント間の通信を暗号化し、セキュリティを強化するためのプロトコルです。HTTPS通信を提供するためには、ウェブサーバーがSSLをサポートしている必要があります。しかし、デフォルトではApacheにはSSLが無効になっています。
AWSコンソールよりEC2を開き、webサーバーを選択し、接続を押下して、サーバーにアクセスします。(EC2 instance connectを利用しています)
sudo vi /etc/httpd/conf.d/ssl.conf
ssl.confを作成+編集をします。
ssl.confはApacheでSSL設定を構成するためのファイルです。このファイルは、SSL関連の設定を含むため、SSL通信を有効にし、HTTPS接続を提供するために使用されます。
LoadModule ssl_module modules/mod_ssl.so
上記を入力して保存します。
Apache HTTP ServerでSSL(Secure Sockets Layer)モジュールを有効にするための設定です。
Apacheが起動時にSSLモジュールを読み込むように指示します。
3.ターゲットグループの設定
HTTPS通信をする際に
AWSコンソールよりEC2を開き、ロードバランシング内のターゲットグループを開きます。
ターゲットグループの作成を押下します。
ターゲットタイプの選択はインスタンにして、ターゲットグループ名に任意のグループ名を入力します。
プロトコル:ポートはHTTPで80を設定します。
IPアドレスタイプはIPv4です。
VPCを設定して、プロトコルバージョンはHTTP1にします。
ヘルスチェックパスはなくても問題ないです。次へを押下します。
HTTP1はテキストベースのプロトコルでシンプルで広く使われていますが、複数のリクエストを並行処理ができません。
HTTP2はバイナリベースのプロトコルでHTTP1の欠点を克服して複数のリクエストとレスポンスを並行して処理可能になりました。
gRPCはHTTP/2ベースのバイナリプロトコルで高機能なものです。
今回はHTTP1で問題ないですね。
選択したインスタンスのポートを80にして「保留中として以下を含める」を押下します。
ターゲットグループの作成を押下します。
4.ロードバランサの設定
ロードバランサでHTTPS通信が来た時に振り分けを行います。
現状VPC内には1つのサブネットしかなく、ロードバランサは2つのサブネットが必要になります。なのでいったん2つ目のサブネットを作成します。
https://immersed-in-knowing.com/?p=166 を参考してください。
AWSコンソールよりEC2を開き、サブネット作成を押下します。
VPC IDを設定し、サブネット名を指定します。
サブネット名を入力してアベイラビリティゾーンを1cにします。
ここは1つめのサブネットが1aなので別のゾーンである1cを使用します。
IPV4サブネットは今回10.0.2.0/24を設定して、サブネットを作成を押下します。
こちらで事前準備が完了したのでロードバランサを設定します。
AWSコンソールよりEC2を開き、ロードバランサーの作成を押下します。
ロードバランサータイプは「Application Load Balancer」で作成を押下します。
ロードバランサ設定①
任意のロードバランサー名を入力し、スキームをインターネット向け、IPアドレスタイプをIPv4を選択します。
ネットワークマッピングでVPCを作成したVPCを選択します。マッピング1aと1cの両方にチェックを入れてサブネットを選択します。ここで事前準備した1cが選択できるようになっています。
1cがない場合ロードバランサの設定ができないので注意です。
セキュリティグループは作成したものを利用します。
ロードバランサ設定②
リスナーにはHTTPS:443を指定してターゲットグループをweb-invitationを指定します。
(画面上は以前設定してしまったあとにキャプチャを撮ったので使用中になっています)
セキュリティポリシーはそのままにして、デフォルトSSL/TLSサーバー証明書をACMからに設定します。
証明書は1.証明書の取得で取得したものを設定します。
あとはデフォルトのままでよいと思います。
「ロードバランサーの作成」を押下します。
こんな感じで設定できていればOKです。
5.セキュリティグループの更新
AWSコンソールよりEC2を開き、セキュリティグループを表示します。インバウンドのルールを編集を押下します。
HTTPS通信はすべての通信を許可するので0.0.0.0/0のままにします。
HTTP通信とSSHはVPC内でしか利用しないので10.0.0.0/16を設定します。
ルールを保存を押下します。
正常に変更された旨の文言が表示されます。
ここまでの設定でIPで直接アクセスできていましたが、HTTPS通信のみがOKとなります。
ここまでで作成したアーキテクチャはこちらです。