ACMとELBでEC2へのアクセスをSSL化
前回までEC2へのLaravelアプリデプロイ、
Route53を使ったドメイン名登録などを行ってきた
現状すべてのアクセスがHTTPで行われてしまっているのでこれをHTTPSでの接続に変更していく
HTTPS接続を実現するためにSSLサーバ証明書を取得し、それをELBに設定することで実現する
今回使用するのは以下の通り
- AWS Certificate Manager(ACM)
- Elastic Load Balancing(ELB)
ACMでSSLサーバ証明書の取得
SSLサーバ証明書は、サーバの管理者が存在することを確認及び通信データの暗号化を行うために必要になる
ここでは、AWS Certification Manager(ACM)から取得する
AWSマネジメントコンソールを開き、Certificate Managerを開く
左のナビゲーションから「証明書をリクエスト」を選択
証明書タイプは「パブリック証明書をリクエスト」を選択
(というかプライベートは選択できないと思う)
完全修飾ドメイン名には先ほど作成したドメイン名を指定する
(サブドメイン含め全てを指定する場合は以下のようにする)
*.ドメイン名
*はワイルドカードとして働き、サブドメイン全てを保護できるようになる
検証方法は「DNS検証を選択」(推奨になっている)
キーアルゴリズムはとりあえずデフォルトのRSA 2048で
設定がOKならリクエストボタンを押下
ボタンを押すと検証画面に入り、ステータスが保留中の検証になっている
「Route 53でレコードを作成」ボタンを押下して検証用のCNAMEレコードを作成することができる
十数分程度かかるが、証明書のステータスが発行済みになれば証明書の発行は無事完了となる
ELBへの設定
AWSマネジメントコンソールを開き、EC2のダッシュボードを開く
左側のナビゲーションから「ロードバランサー」を選択し、ロードバランサーの作成を押下する
タイプと比較が表示されるので「Application Load Balancer(ALB)」で作成を押下する
ロードバランサー名にはわかりやすい名前をつける(ただし一意である必要がある)
「ネットワークマッピング」項目ではVPCには情報が入力されているはず
マッピングで少なくとも2つのAZを選択する
「セキュリティグループ」へは以下のインバウンドルールを持つセキュリティグループを設定する必要がある
IPv4 HTTPS TCP ポート:443 ソース:0.0.0.0/0
IPv4 HTTP TCP ポート:80 ソース:0.0.0.0/0
無ければ新しく作成すること
「リスナーとルーティング」項目のリスナーのプロトコルをHTTPからHTTPSへ変更する
ここに設定するためのターゲットグループを新たに作成する
設定は以下
ターゲットタイプ … インスタンス
ターゲットグループ名 … [任意]
プロトコル:ポート … HTTP/80
IPアドレスタイプ … IPv4
VPC … 1つしかなければデフォで
プロトコルバージョン … HTTP1
ヘルスチェックプロトコル … HTTP
ヘルスチェックパス … /
次のページで作成ボタンを押して準備完了
再びALBのリスナー設定へ戻り、HTTPSのリスナーのデフォルトアクションに今作ったHTTPのターゲットグループをセットする
「セキュアリスナーの設定」ではセキュリティーポリシーはデフォルトのままにしておき、
デフォルトSSL/TLSサーバー証明書の部分で「ACMから」を選択し、先ほど作った証明書を選択する
全てOKなら作成ボタンを押下する
Route53のコンソールを開き、ホストゾーンの一覧を表示する
対象のAレコードを選択し編集画面を開く
エイリアスのチェックを入れ、値/トラフィックのルーティング先を変更する
これで保存ボタンを押して変更
https:// ドメイン名をブラウザで入力し接続できるか確認する
HTTPリクエストをHTTPSにリダイレクト
ついでにHTTPでリクエストされたものもHTTPSで通信されるようにリスナーの設定を追加する
EC2 > ロードバランサーで対象のロードバランサーを選んで詳細画面から作業する
画面下部の「リスナーとルール」タブを選択し、リスナーの追加ボタンを押す
プロトコルはHTTPを選択し、ポートは80を入力
デフォルトアクションのルーティングは「URLにリダイレクト」を選択し、
プロトコルはHTTPS、ポートは443を入力して追加ボタンで追加
先ほどのリスナーとルールの画面でHTTPS:443に加えてHTTP:80が追加されたのを確認
(画像では次の手順のリダイレクト設定も反映されているが)
追加されたHTTP:80を選択し、もう1つルールを追加する
今はデフォルトのルールだけあると思うので、ルールを追加するボタンを押す
名前は適宜つける
次に条件の設定になるので、条件の追加ボタンを押し以下のように
ルールの条件タイプはパス、パスは * を入力して確認へ
次へ進むとアクションの選択になる
アクションはURLにリダイレクトを選択してプロトコルをHTTPS、ポートを443に
優先度はとりあえず1とか適当な数字で
問題なければ保存
これで先ほどの画像と同じ設定になるはず
もしセキュリティグループでHTTPのリクエストを許可していない場合は許可すること
これでHTTPでアクセスしてHTTPSへリダイレクトされていればOK😎
おわりに
これにてHTTPSでドメインからアクセスできるセキュアな状態になった
Unityの方もHTTPSアクセスに切り替え以前のHTTPを許可する設定も元に戻せた
余裕があればRDSへの置き換えあたりも触っておきたい
参考記事
ありがとうございました🙇
Discussion