はじめに
プログラミングスクール卒業時にオリジナルアプリケーションを作成しましたが、発表時にはまだまだ多くの課題が残っていました。その中でも、AWSにデプロイした際にhttpのままで、安全ではない通信、いわゆるSSL化対応が出来ていないということになりhttps対応をしたいと思い調べて対応した備忘録になります。
下記のさまざまなサイトを参考にさせていただきました。ありがとうございました。
各項目の詳細は今後勉強していきますので今回は手順のみ簡単に記載したいと思います。
参考記事
- EC2上のwebサーバをSSL化対応
- [初心者向け]AWS Certificate Managerを使用してインターネットからELBへの通信をHTTPS化してみた
- 【AWS解説】SSL証明書を取得してブログをhttps通信化する方法
- 【AWS手順解説】ロードバランサー作成とドメインの設定
- 【AWS画像付き解説】HTTPリクエストをHTTPSにリダイレクトする方法
前提
今回はRuby on Railsでアプリを作成しAWSへデプロイ済みです。
(EC2-ElasticIP-ドメイン名)で紐付けしています。
ドメインはお名前.comさんで取得しています。
http・httpsとは?
httpとは「Hyper Text Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル)」の略で、Webサイトを環境に依らず問題なく表示するための通信規格(プロトコル)のことです。
URLの最初の部分で「http://~」と記載されています。
httpsとは、「Hypertext Transfer Protocol Secure(ハイパーテキスト・トランスファー・プロトコル・セキュア)」の略で、SSL(暗号化通信)によってセキュリティを高めたhttpのことです。
httpsにすることで、通信経路での第三者による情報の盗聴や改ざんのリスクを防止できます。
引用:
httpsとは? httpとのちがいやセキュリティ上の意味を初心者向けに解説!
実施内容
- SSL証明書の取得
- ロードバランサーの作成
- ドメインとロードバランサーの紐付け
- http通信をhttps通信へリダイレクト
SSL証明書の取得
まずは、https通信をするために「SSL証明書」を取得します。
AWSにログインし、「Certificate Manager」 を検索します。
すると下記のような画面になるので 「証明書をリクエスト」 をクリック
「ドメイン名」 には取得したドメイン名を入力します。
「検証方法を選択」 では「DNS検証」を選択します。
「タグ」 については自分は特に設定しませんでした。
リクエストをしてしばらくするとステータスが 「発行済み」 に変わります。
その後 「Route53でレコードを作成」 を押します。
ロードバランサーの作成
一度「EC2ダッシュボード」に戻り、左側メニュー内にある 「ロードバランサー」 をクリック
「ロードバランサーの作成」 をクリック
この中の 「Application Load Balancer」 の 「Create」 をクリック
Create Application Load Balancer
「Create Application Load Balancer」のページに遷移しますので下記の4項目についてそれぞれ設定をしていきます。
- Basic configuration
- Network mapping
- Security groups
- Listeners and routing
Basic configuration
「Load balancer name」 はわかりやすいようにアプリ名LoadBalancer
としました。あとはデフォルトのままですが写真のように設定しています。
Network mapping
「VPC」はデフォルトのままとし、「Mappings」は2つは設定しなければならないのでap-northeast-1a
とap-northeast-1c
を選択しました。
Security groups
「Create new security group」 を選択し新たにセキュリティグループを作成し、作成したセキュリティグループを選択しました。(後述)
セキュリティグループを作成
「セキュリティグループ名」 はわかりやすくLoadBarancerSecurityGroup
とし、「説明」 にもわかりやすいようにLoadBarancerSecurityGroup
と記載しました。「VPC」 にはデフォルトで表示されているままにしています。
「インバウンドルール」「アウトバウンドルール」 はそれぞれ下記のように設定しました。
インバウンドルール
- インバウンドルール1
タイプ:HTTP
ソース:0.0.0.0/0
- インバウンドルール2
タイプ:HTTPS
ソース:0.0.0.0/0
を設定しました。
アウトバウンドルール
Listeners and routing
「Protocol」はHTTP
「Port」は80
に設定し、
「Create target group」 を選択し新たにターゲットグループを作成し、作成したターゲットグループを選択しました。(後述)
ターゲットグループを作成
「Choose a target type」 はInstances
を選択し、「Target group name」 はわかりやすくアプリ名TargetGroup
としました。
そのほかの箇所はデフォルトのままで写真のような設定になっています。
上段のInstance ID にチェックを入れInclude as pending below
を押すと下段のReviw targets に選択したインスタンスが表示されるので 「Create target group」 をクリック
先ほどの 「Listeners and routing」 の中の 「Default action」 で作成したターゲットグループを選択。
その後 「Create load balancer」 をクリックでロードバランサーの作成が完了
ドメインとロードバランサーの紐付け
まずは Route53 へアクセスし、 ホストゾーン を選択
「ドメイン名」 に自分が使用しているドメインが表示されるため選択し、 「詳細を表示」 をクリック
詳細が表示されたら、タイプが「A」と書かれた欄の右側に以前下の記事でドメイン名と紐づけたElasticIPの値が表示されているのでそれを選択します。
選択すると右側に 「レコードの詳細」 が表示されるので 「レコードの編集」 をクリック
「エイリアス」 にチェックを入れると入力フォームが変化するため、 「レコードタイプ」「トラフィックのルーティング先」 を下記のように変更します。
「レコードタイプ」
A-IPv4アドレスと一部のAWSリソースにトラフィックをルーティングします
「トラフィックのルーティング先」
Application Load BalancerとClassic Load Balancerへのエイリアス
アジアパシフィック(東京)[ap-northeast-1]
作成したALBのドメイン名(~elb.amazonaws.com)
http通信をhttps通信へリダイレクト
EC2ダッシュボードへ移動し、左側メニューの 「ロードバランサー」 を選択
先ほど作成したALBを選択し下部の 「リスナー」 をクリックし、 「HTTP:80」 のルールにある 「ルールの表示/編集」 をクリック
上部メニューの「+(ルールの追加)」をクリックしルールを下記のように追加します。
「IF」パス = *
「THEN」リダイレクト先 「HTTPS」、「443」
を選択して保存します。
これで設定は以上となります。
終わりに
まだまだAWSについて勉強不足なので一つ一つの設定について理解できていませんが、参照先のサイトでは詳しく説明してくださっています。勉強をして理解できるようにしていきたいと思います。
長い記事にお付き合いいただきありがとうございました。