search
LoginSignup
1

posted at

EC2のWEBサイトをロードバランサーの配下に再配置し、AWSのSSL証明書を使って暗号化する

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検証を選択。
  キーアルゴリズムはデフォルト設定のまま。タグは必要に応じて設定しリクエスト
ACM01.png
4.証明書一覧に戻りリクエストした証明書をクリック(保留中になっている)
5.ドメインのRoute53でレコードを作成をクリック
ACM02.png
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の一覧に追加される。
image.png
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証明書を指定する
image.png
最後に右下のcreate load balancerをクリックするとロードバランサーが生成される(一覧に出てくる)

AWS Route53にて対象ドメインにエイリアスにてロードバランサーを設定

1.AWSメニューよりRoute53を選択
2.左バーメニューからホストゾーンをクリック
3.対象のドメインをクリック
4.今回対象EC2のIPが設定されているAレコードを選択し、レコードを編集をクリックする
5.下記図のようにエイリアスをONにするとルーティング情報を設定出来るようになる。
  上から
  ・Application Load Balancer
  ・対象のリージョン
  ・【3.AWS EC2にてロードバランサーを生成】で生成したロードバランサ―
  を指定して保存をクリックする
image.png

ここまでの設定で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すれば完了

image.png
これでロードバランサ―がhttp(80)でアクセスされたらhttsp(443)のリスナーにリダイレクトしてくれる。

以上です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1