AWS S3静的ウェブホスティング ~ HTTPS化 ~ 

前回やってみた、S3静的ウェブホスティングにHTTPSでアクセスできるようにします。
簡単に出来るかと思いましたが、所々でつまずきました。

**[つまづいた点]**
1. **SESの設定は不要** (Route 53でHosted Zone作成済みならDNS検証が使える)
2. ACMでの証明書発行は**米国東部(バージニア北部)**で行うこと
3. Cloud Frontのオリジンには、S3の**静的ウェブホスティングの**エンドポイントを設定する

[[前回] AWS S3で独自ドメインの静的Webサイトを公開してみた](https://qiita.com/predora005/items/407dfe992e98d0369777)

# 何のためにHTTPS化
HTTPだとメッセージが平文のまま通信されるのでセキュリティ的によろしくありません。
HTTPSではTTLで、サーバ認証→鍵交換→暗号化通信を行うため、HTTPに比べて安全です。
ユーザーが安全にWebサイト閲覧・通信するための仕組みです。

# 概要
AWSのサービスを使用して、サーバ証明書の発行からHTTPSの設定までを行います。

## ネットワーク構成
<img src="https://qiita-image-store.s3.amazonaws.com/0/345798/83ba5870-c66b-fe9f-1655-ef455ec10de5.png" width=70%>

## 使用するAWSサービス
### ACM(AWS Certificate Manager)
AWSがサーバ証明書を発行してくれるサービス。プライベート認証局でなければ無料です。
ELBやCould Frontで使用することが可能です。

[AWS Certificate Manager（SSL/TLS 証明書を無料で作成） | AWS](https://aws.amazon.com/jp/certificate-manager/)

### Cloud Front
ACMで発行した証明書を使えるようにするためだけに利用します。
配信を高速化するためのサービスで、S3の前段に設置するのが一般的なようです。

[Amazon CloudFront（高速コンテンツ配信ネットワーク - CDN） | AWS](https://aws.amazon.com/jp/cloudfront/)

### Route 53, S3
前回も使用したので割愛します。

# 手順

## [0]ドメイン取得〜S3バケット作成まで
[前回投稿](https://qiita.com/predora005/items/407dfe992e98d0369777)をご参照ください。

## [1]ACMで証明書発行
### [1-1] リージョンの選択
**米国東部(バージニア北部)**を選択します。
他のリージョンでも証明書は発行できますが、Cloud Frontと紐づけることが出来るのは米国東部(バージニア北部)のみです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/345798/c3d22ba0-62fb-3294-27be-2fba647d80be.png">

### [1-2] 証明書の発行
- [パブリック証明書のリクエスト]を選択します。
- ドメイン名に「s3-route53-test.ga」「*.s3-route53-test.ga」を追加します。
- [DNSの検証]を選択します

※ 以前はEメールの検証のみだったため、SESによるメール受信が必要でしたが、今回は不要です。

![1-2-1.証明書のリクエスト.png](https://qiita-image-store.s3.amazonaws.com/0/345798/172d63cd-d8b9-9a54-4ccd-b6a09bf11451.png)
![1-2-2.ドメイン名の追加(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/f0d2f626-a0ff-95ce-d0d0-fb26dae6748e.png)
![1-2-3.検証方法の選択.png](https://qiita-image-store.s3.amazonaws.com/0/345798/52908827-1544-2e2c-992e-e5e433912b1c.png)
![1-2-4.確認(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/41bfd0ed-e985-ef4e-f3fd-c84af14759e0.png)

- "検証保留中"になっていますが問題ありません。ドロップダウンを選択すると[Route 53でのレコードの作成]が表示されますので、Route 53との紐付けを行います。
- 作成後、数分経つと"発行済み"に変わります。

![1-2-5.Route53でのレコード作成1(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/10d73a43-340e-26eb-b4f8-0aae99a1aaa3.png)
![1-2-5.Route53でのレコード作成2(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/03e1f130-0460-fb24-0e0b-810c2de15689.png)
![1-2-6.発行済み(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/a9c61a5a-5b43-5bc7-73ec-9c244819fb36.png)

## [2]Cloud Frontの設定

### [2-1] 配信メソッドの選択
- 「Web」を選択します。

![2-1.ディストリビューションの作成.png](https://qiita-image-store.s3.amazonaws.com/0/345798/82da1fb3-64c2-8a1d-4ac8-c84899ab1afd.png)
![2-2.配信メソッドの選択.png](https://qiita-image-store.s3.amazonaws.com/0/345798/147d525b-1932-198d-afa7-4240d54465b2.png)

### [2-2] オリジンの設定

Origin Domain Nameは**S3の静的ウェブホスティングのエンドポイント**を設定します。
入力候補で出てくるのは「s3-route53-test.ga.s3.amazonaws.com」の方ですが、
静的ウェブホスティングのエンドポイント「s3-route53-test.ga.s3-website-ap-northeast-1.amazonaws.com」の方を設定します。
そうしておかないと、いざWebサイトにアクセスした際に"Access Denied"になります。
詳細は[こちら](https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-website-cloudfront-error-403/)を参照ください。

Origin IDはオリジンを区別するためのIDです。今回はオリジンが1つだけですので自動入力されたものをそのまま使用しました。

![2-3.ディストリビューションの設定1(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/9a5afcbc-bd52-bbd8-c0ee-b3aa25807586.png)

### [2-3]ドメインと証明書の設定
- Alternate Domain Namesに「s3-route53-test.ga」「www.s3-route53-test.ga」を入力します。
- SSL Certificateで[Custom SSL Certificate)]を選択し、下の入力欄にてACMで作成した証明書を選択します。
- 残りの項目はデフォルトのまま作成を完了します。
![2-3.ディストリビューションの設定2(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/080e809b-292f-b3f1-f344-f083befae338.png)

### [2-4]作成直後
Statusが"In Progress"になっています。
準備が終了すると"Deplyoed"になります。数十分かかりました。

![2-4.作成直後(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/7862eb65-f35f-021c-b75e-44d67f7a1bba.png)

## [3]Route 53の設定

### [3-1]レコードの登録
ドメインとCloudFrontの紐付けを行います。
「s3-route53-test.ga」「www.s3-route53-test.ga」へのアクセスを、Cloud Frontの方へ流すようにします。
前回はS3と直接紐付けていましたが、今回は間にCloud Frontが入ることになります。

- Alias TargetにCloud Frontのドメイン名を入力します(自動候補が出てきます)
- 「www.s3-route53-test.ga」も同様に設定します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/345798/55faf02f-f9fd-17f7-dd1d-89f0025a21f2.png" width=50%>

## [4]動作確認
httpsでアクセスできることが確認できました。
証明書もAmazon発行のものが利用されていることを確認できました。
![4-1.動作確認(モザイク).png](https://qiita-image-store.s3.amazonaws.com/0/345798/71ea4b8a-554f-bacb-1872-f4b5e187c36e.png)




## 参考
[無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた ｜ DevelopersIO](https://dev.classmethod.jp/cloud/aws/mesoko-r53-cdn/)



# 備忘録
以降は、備忘のためのメモです。

## SES(Amazon Simple Email Service）
メール送受信のサービスです。
ACMで証明書を発行する際にDNS検証が使えなかった頃はEメール検証のみでした。
確認メールが下記アドレスに送られるのですが、メールサーバを行っていないのと受信できません。
メールを受信できるように、SES(Amazon Simple Email Service）を使います。

- administrator@ドメイン名
- postmaster@ドメイン名
- admin@ドメイン名
- hostmaster@ドメイン名
- webmaster@ドメイン名

[Amazon SES（高信頼性で安価なEメールサービス - Amazon Simple Email Service）| AWS](https://aws.amazon.com/jp/ses/)

手順は以下のサイトを参考にさせていただきました。
[[ACM] SSL証明書発行時のドメイン認証メールをSESで受け取ってみた ｜ DevelopersIO](https://dev.classmethod.jp/cloud/aws/acm-verifydomain-ses/)