【AWS】ACM+Route 53+ELB+EC2でSSL化に対応する

現在、個人アプリを製作しており、
AWSの本番環境へのデプロイ及びDNS設定まで完了したので、今日はSSL化を行った。
全てAWS内で完結している為、作業はとてもシンプルだが、説明を省略している記事が多く少し迷う部分があったので、記録として残しておく。

## 前提
・EC2インスタンスでサーバー構築している
・Route53を使ってDNS設定をしている（ドメイン設定済み）
・ELB（ALB）を使用するので、その分の費用が発生する（を許容出来る）
・VPC構成はデフォルトのものを使用する
・とにかくサクッとSSL化したい人向け

## ざっくり手順
1. AWS Certificate ManagerでSSL証明書を取得する
2. ELB（ALB）を設定する
3. EC2のセキュリティグループ設定を確認する
4. 接続確認

## 1. AWS Certificate ManagerでSSL証明書を取得する

まずはSSL証明書を取得します。
AWSコンソールで`Certificate Manager`の画面に遷移します。
![スクリーンショット 2021-02-25 21.40.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/524df506-bc4b-6c19-3f39-2d9e397d84c7.png)

デフォルトで`パブリック証明書のリクエスト`にチェックが入っています。
そのまま`証明書のリクエスト`へ進みます。
![スクリーンショット 2021-02-25 21.43.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/c5187b1c-cd31-3079-94eb-2585a0227305.png)
設定したいドメインを入力し、次へ進みます。
![スクリーンショット 2021-02-25 21.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/3c8a5086-e909-9519-3e4f-ca496f1c33b5.png)
Route53でDNS設定している前提なので、
検証方法は`DNSの検証`を選択した状態で次へ進みます。
![スクリーンショット 2021-02-25 21.49.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/d2948848-6752-1a1c-bba0-407e1c11a1a5.png)
必要に応じてタグを設定しましょう。
![スクリーンショット 2021-02-25 21.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/415caf84-974c-a6f0-0120-6950789f713d.png)
確定とリクエストを押します。
![スクリーンショット 2021-02-25 21.53.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/b912475d-bae0-1cc6-6a95-4fa842e3e7c1.png)
検証状態が検証保留中から成功に変わるまで待ちます。
正常に手続き出来ていれば、1分程度で直ぐに成功に変わると思います。成功になったら続行をクリック。
![スクリーンショット 2021-02-25 21.56.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/18f503b1-f7dc-f083-557d-265ef3c4dec5.png)
Certificate Managerの管理画面に遷移してきました。
赤枠のドメインあたりをクリックします。
![スクリーンショット 2021-02-25 22.10.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/446243ac-6bc1-d10f-9120-e9e4c6a71355.png)
手動でRoute53にレコードを作成する事も出来るのですが、
ここから簡単にRoute53と連携させる事が出来ます。Route53でのレコードの作成をクリックします。
![スクリーンショット 2021-02-25 22.12.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/ca7c418f-455b-239b-e872-db7cd5a61013.png)
Route53のCNAMEレコードに登録が確認出来たら、SSL証明書取得のプロセスは完了です。

## 2. ELB（ALB）を設定する
続いて、ELBの設定を行います。
今回の構成としてはインターネットからのトラフィックをELBでHTTPS（443）で受け、
EC2にHTTP（80）で通信します。

EC2のコンソールからロードバランサーを開き、Application Load Balancerを選択します。
![スクリーンショット 2021-02-25 22.34.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/b5abd900-249b-700a-2fda-4b901dfe5844.png)
まず、基本的な設定でロードバランサーの名前を設定します。
今回の構成ではスキームはインターネット向けのままでOKです。リスナーはインターネットからALBまではHTTPS（443）になるので、HTTPS（セキュアHTTP）を選択します。
![スクリーンショット 2021-02-26 20.09.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/f5696f56-d6de-6374-a6fd-11adc28ac1ae.png)
ALBを設置するVPC、サブネットを選択します。
ここではVPCについての説明は省きますが、インターネットと通信するので、プライベートではなく、パブリックサブネットを選択するようにして下さい。
![スクリーンショット 2021-02-26 20.15.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/aeed0187-6129-3ba1-e08d-65a8db62664f.png)
続いて、セキュリティ設定です。
証明書タイプを`ACMから証明書を選択する`を選びます。
証明書の名前で先ほど発行した証明書を選択しましょう。セキュリティポリシーは`ELBSecurityPolicy-2016-08`のままでOKです。
![スクリーンショット 2021-02-26 20.19.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/0962f646-0f13-2758-4cb9-1c94ab57a2a1.png)
セキュリティグループの設定です。
既に設定済みのものをアタッチしても良いですが、なければここで設定しましょう。
HTTPSのインバウンドを許可するように出来ていればOKです。
![スクリーンショット 2021-02-26 20.27.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/8936778b-9815-449e-cab0-f351d285d379.png)
ターゲットグループを設定します。
こちらも事前に用意しているものをアタッチするのでも大丈夫です。
適用に名前をつけて、ターゲットの種類は`インスタンス`、プロトコルは`HTTP`、ポートは`80`でいきます。ヘルスチェックは`HTTP`で。
![スクリーンショット 2021-02-26 20.30.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/66cab4b9-ea50-d295-a35b-9b8d25791f8f.png)
ターゲットとして登録するインスタンスにチェックを入れて、`登録済みに追加`します。
![スクリーンショット 2021-02-26 20.35.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/2c36edf1-ba6a-4af6-913e-8ca1ca54b015.png)
確認画面に遷移するので、作成を押せば完了です。elbタブに遷移しましょう。
![スクリーンショット 2021-02-26 20.39.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/e1817089-8036-66ba-73aa-f6b2f58b4f1a.png)
作成したALBのDNS名（Aレコード）をコピーします。
![スクリーンショット 2021-02-26 20.40.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/c4ddd605-8594-0d28-318b-f0401204d1a0.png)
少し分かり辛くて申し訳無いです。
最後にRoute53のホストしているドメインのAレコードにコピーした値を入れます（赤枠のあたり）。お疲れ様でした。
![スクリーンショット 2021-02-26 20.45.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/b8bbd6b3-f2a5-7200-f61f-eb337e519ceb.png)

## 3. EC2のセキュリティグループ設定を確認する
もうほぼ対応としては完了ですが、念のため、EC2にアタッチしているセキュリティグループで、HTTP（80）のインバウンドトラフィックが許可されているかを確認しておきましょ。
![スクリーンショット 2021-02-26 20.51.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/1460a850-cd52-8d72-0a79-d5a9eb1a7877.png)

## 4. 接続確認
ALBがターゲットグループ（今回で言うとEC2インスタンスに対して）に
ヘルスチェックを行った結果を確認する事が出来ます。EC2メニューのターゲットグループから設定したものを選択します。`healthy`となっていれば正常です。
![スクリーンショット 2021-02-26 20.57.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/4224cfac-8812-7d69-8c70-e5da655ce010.png)
ブラウザ（画像はchromeです）でアクセスして見ると、
![スクリーンショット 2021-02-26 21.03.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531606/d8eaf137-a29a-7895-07be-01bd66c281b9.png)
SSLの鍵マークがついていますね〜、無事にSSL化する事が出来ました。お疲れ様でした。

## 参考にさせて頂いた記事
・[AWSでWebサイトをHTTPS化 その1：ELB(+ACM発行証明書)→EC2編](https://recipe.kc-cloud.jp/archives/11084)
・[ALB-EC2構成のhttps接続を構築](https://oji-cloud.net/2019/09/15/post-3017/)
・[AWS Certificate Managerを使って無料でSSL証明書を発行する](https://qiita.com/masatomix/items/7c90f1a625c736af5a81)