AWSのEC2をELB(ALB)配下にしてSSL化
今までEC2でWEBサーバを立てて公開する際はlet's encryptをインストールをしていましたが、AWS Certificate Managerを使用してSSL化をしたいという事でロードバランサ―を使用した構成に移行しつつSSL化をしてみました。
前提
・EC2のインスタンスがありWEBサーバが立っている
・ドメインは作成済みでRoute53で管理されている
・VPCはPUBLIC
手順
1.AWS Certificate ManagerにてSSL証明書の作成
2.AWS EC2にてターゲットグループを生成
3.AWS EC2にてロードバランサーを生成
4.AWS Route53にて対象ドメインにエイリアスにてロードバランサーを設定
5.AWS EC2にてhttp(80)アクセス時のリスナーを設定
AWS Certificate ManagerにてSSL証明書の作成
1.AWSメニューよりAWS Certificate Manager(ACM)
を選択
2."証明書をリクエスト"にてパブリック証明書をリクエスト
を選択し次へ
3.SSL化対象となるドメイン名を入力し、検証方法を指定。今回はDNS検証
を選択。
キーアルゴリズムはデフォルト設定のまま。タグは必要に応じて設定しリクエスト
4.証明書一覧に戻りリクエストした証明書をクリック(保留中になっている)
5.ドメインのRoute53でレコードを作成
をクリック
6.確認画面にてレコードを作成をクリック。
この操作にてRoute53にCNAMEレコードが生成され、DNS検証が行われる。
検証時間は約5分ほど。検証が完了するとステータスが"発行済み"となる
AWS EC2にてターゲットグループを生成
ロードバランサ―の生成時の際、EC2を指定する事になるがダイレクトに指定するのではなくtargetGroupを選択する形式となる。その為事前に生成しておくと良い。
1.AWSメニューよりEC2
を選択
2.左バーメニューからターゲットグループ
をクリック
3.ターゲットグループの生成の画面にて入力を進めていく
【Basic configuration】
(1)Choose a target type ターゲットタイプはInstances
を指定
(2)Target group name 名前を入力
(3)Protocol Port LBとEC2間の通信は暗号化しない為http(80)
を指定
(4)VPC 回対象のEC2が乗っかるVPCを選択
(5)Protocol version HTTP1
を選択
【Health checks】
(6)Health check protocol HTTP
を指定
(7)Health check path /
を指定(デフォルト)
4.NEXTをクリックして次画面に遷移するとinstanceの一覧が表示されるので対象のinstanceをチェックする。
5.チェックしたら下記図赤枠のInclude as pending below
をクリックすると下のReview targetsの一覧に追加される。
6.一覧に追加された状態でCreate target group
をクリックする
AWS EC2にてロードバランサーの生成
1.AWSメニューよりEC2
を選択
2.左バーメニューからロードバランサー
をクリック
3.一覧が表示されたらCreate load balancer
をクリック
4.Select load balancer typeになるのでAplication load balancer
のCleateをクリック
5.次の画面にて入力を進めていく
【Basic configuration】
(1)Load balancer name 名前を入力
(2)Scheme Internet-facingを選択(今回は公開されているEC2をLB配下にする為)
(3)IP address type IPv4を選択
【Network mapping】
(4)VPC 今回対象のEC2が乗っかるVPCを選択
(5)Mappings 今回対象となるEC2が乗っかるサブネットを選択
※2個以選択が必要の為、全部選んでも問題ない
【Security groups】
(6)Security groups EC2と同じセキュリティグループを指定
【Listeners and routing】
ここでルーティングの設定を行う。今回はSSL化が目的なのでhttps
の通信が発生した場合のリスナーを設定する。
(7)Protocol/port https/443
を指定
(8)Default action 【2.AWS EC2にてターゲットグループを生成】で作成したtargetgroup
を指定する
【Secure listener settings】
(9)Security policy デフォルトのまま
(10)Default SSL/TLS certificate FromACM
を選び、【1.AWS Certificate ManagerにてSSL証明書の作成】で作成したSSL証明書を指定する
最後に右下のcreate load balancer
をクリックするとロードバランサーが生成される(一覧に出てくる)
AWS Route53にて対象ドメインにエイリアスにてロードバランサーを設定
1.AWSメニューよりRoute53
を選択
2.左バーメニューからホストゾーン
をクリック
3.対象のドメインをクリック
4.今回対象EC2のIPが設定されているAレコード
を選択し、レコードを編集
をクリックする
5.下記図のようにエイリアスをONにするとルーティング情報を設定出来るようになる。
上から
・Application Load Balancer
・対象のリージョン
・【3.AWS EC2にてロードバランサーを生成】で生成したロードバランサ―
を指定して保存
をクリックする
ここまでの設定でEC2をロードバランサ―配下にする作業は完了です。
オマケとして最後にhttp(80)で通信が発生した場合の制御を追加します。
今のままだとhttpアクセス時はNotfondになってしまう為、httpsにリダイレクトさせる設定をLBに追加します。
AWS EC2にてhttp(80)アクセス時のリスナーを設定
1.AWSメニューよりEC2
を選択
2.左バーメニューからロードバランサー
をクリック
3.一覧が表示されたら対象のロードバランサーをクリック
4.Listeners(リスナーの一覧)よりAdd listener
をクリック
5.Add Action
にてRedirect
を選択するとRedirect用の設定項目が表示される
6.下図のように上段のProtocol/Portにhttp/80
、下段のProtocol/Portにhttps/443
を指定し、Add
すれば完了
これでロードバランサ―がhttp(80)でアクセスされたらhttsp(443)のリスナーにリダイレクトしてくれる。
以上です。