S3で静的ホスティングしているWebサイトをHTTPS化する



最近、AWSを少し触っていて、Amazon S3の静的ホスティング機能を使ってWebサイトを作ってCognitoでログイン機能を付けてみたりして遊んでいたのですが、
![sakuzyo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/1f2ec5c8-a60a-bcf4-b42a-d836de620cc9.png)
####これちょっと恥ずかしい！
Chromeだとわざわざ保護されていないことを晒上げてくれます！やったー！（笑）
でも、今時SSL化されてないWebページの方が珍しいですし、S3でホストしているWebサイトをhttps化(SSL化)してみることにしました。

#はじめに
この記事では、AWS Certificate Manager(以下「ACM」)とAmazon CloudFrontを利用してSSL証明書を発行・設定して、https接続できるようにしてみます。

Amazon S3で静的ホスティングをしていて、Amazon Route 53で独自ドメインを管理してルーティングしている事を前提にしています。***（説明のためにドメイン名はexample.comとして書いていきます。）***


#まずはACMでSSL証明書を発行する
##・注意点
いきなりですが注意点です！
ACMで証明書を発行する前にAWSマネジメントコンソールの右上から***リージョンを [米国東部 (バージニア北部)us-east-1] に変更してください！！***
![image0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/f53c0675-c7af-2875-c51a-d08d027373d2.png)



ACMで発行した証明書をCloudFrontで使用するには、 「米国東部 (バージニア北部)[us-east-1]」リージョンで証明書を発行する必要があるようです。

##・実際に証明書を発行
AWSマネジメントコンソールで「Certificate Manager」を選択します。

・ACMが開いたら証明書のプロビジョニングの「今すぐ始める」をクリック
![51a3bc7a2c584d1474d374c6c9bb892c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/e755e173-7b64-bc1b-9a02-37dceacf1240.png)


証明書のリクエストという画面になりますので、パブリック証明書のリクエストにチェックがついていることを確認して、証明書のリクエストをクリック。
<br><br>
・ドメイン名の追加でexample.comと*.example.comと入力して次へをクリック。
![fb67b95880bfaa94b1c68f3e15be957f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/885ef26a-cdde-f235-9ba2-468d7b61a01d.png)
<br>
・DNSの検証にチェックが入っていることを確認して次へをクリック
![c3ad0225e187053f89d157aff6bdee13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/225d41f6-7c5c-7f23-9a45-600b0554ffd4.png)
タグを設定する方は設定していただいて、確定とリクエストをクリックします。
<br><br>
検証保留中になっていると思います。
![Inkede84d2784f5c3ada575e6caa33e85f8e4_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/f20d71fc-303d-1908-6d65-b255d600477b.jpeg)
次に、▶マークのドロップダウンボックスを選択して
「Route 53でのレコード作成」という青のボタンをクリックします。(両方のドメインでRoute 53のレコード作成を行ってください)
![Inked4c4fccc1c0fd3027380aac62c147486b_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/82c71937-eb36-4e81-3467-65d86976b304.jpeg)

しばらくすると発行済みになるのでこれでSSL証明書の発行は完了です。
![発光完了_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/891b0d35-40d8-832a-c6ff-41958b9ee201.jpeg)

#CloudFrontのディストリビューションに証明書を設定する
AWSマネジメントコンソールで「CloudFront」を選択します。
<br>
・「Distributions」タブの「Create Distribution」という青のボタンをクリック。
![cf1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/aae55757-f47e-fec8-3ce8-3d3f5919934f.png)


![cf2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/f442f96d-0140-22f2-79c2-a43a502e9648.png)
「Web」の「Get Started」をクリック。


####・変更箇所のみ説明
以下は変更する欄のみを画像付きで説明しますので、説明していない欄はデフォルトで大丈夫です。
<br><br>
・「Origin Domain Name」欄をクリックするとプルダウンメニューがでるので、***静的ホスティングに使っているエンドポイントのS3を選択。***
![Inkedcf設定２_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/efca0a33-dc0e-52d5-fff9-9f1a5c745508.jpeg)
<br>

・「Viewer Protocol Policy」欄の「Redirect HTTP to HTTPS」をチェック
![redirect-http-to-https.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/85244d1a-860f-d39a-2939-0e9c05ec288e.png)
***ここにチェックを入れておくとhttpへ接続しようとしても自動的にhttpsにリダイレクトしてくれます。***
筆者は最初やった時にチェックを忘れていて直すのにRoute 53をいじったりしてしまってまあまあ時間がかかりました（汗）

<br><br><br>
・「Alternate Domain Names(CNAMEs)」欄にドメイン名を入力。
![cf設定変更点.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/e0f625cc-4e3a-4770-f6b9-802a5309aa1a.png)
<br><br>
・「SSL Certificate」欄の「Custom SSL Certificate(example.com):」欄にチェックをつけてACMで発行したSSL証明書を選択。
![Inked設定４_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/b15eb82a-5be4-9faa-3aca-12f997a66270.jpeg)

<br><br>
・最後に、「Default Root Object」欄にS3で静的ホスティングを有効にする際にインデックスドキュメントとして設定したファイル名を入力します。
![設定３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/a174112f-d56b-a1bb-1342-de0689439e22.png)
<br>
設定直後は「Status」が「In Progress」ですが、しばらくすると「Deployed」に変わります。
![Inked5adc451b8d07ed627c41e75798d02fbd_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/cb2a920a-0b12-ff25-9c1a-34f55a55f0ff.jpeg)
![Inked3882116b8b3819c82c6df4d476a41331_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/98316975-53c7-1a03-e9a4-33ff5b9b7a13.jpeg)



これでCloudFrontに証明書を設定することが出来ました。

#Route 53のレコードを設定
ここまで来たら最後に、S3に向いているRoute 53のルーティング先をCloudFrontへ変更するだけです。

まずは、AWSマネジメントコンソールで「Route 53」を選択します。
ホストゾーンタブをクリックしてドメイン名を選択します。

![Inked092d91522bceec9d3dc652da1fb3d1c0_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/feed0419-b59c-0995-cd40-9d8d448281fd.jpeg)
Aレコードにチェックボックスをつけて編集をクリック。
<br>
![Inkedf33255cd2a707dc5cfd4870f269e71e9_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/d426453f-9429-a16c-6cf3-b859af0af9a1.jpeg)
「値/トラフィックのルーティング先」欄を「CloudFrontディストリビューションへのエイリアス」「米国東部(バージニア北部)[us-east-1]」に変更し、ディストリビューションの選択から作成したディストリビューションを選択して「変更を保存」をクリックします。
<br>
これでACMで証明書を発行して、CloudFrontに設定、Route 53のルーティング先をCloudFrontに変更することができました！

#動作確認
いざchromeにドメイン名を入力！
![最後.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693048/3da182e3-60ed-326a-a0e0-3c366fc26c6c.jpeg)
えいちてぃーてぃーぴーえす！！！！
ついにあの忌々しい「保護されていない通信」の表記とおさらばです！！

#おわりに
S3で静的ホスティングしているサイトをhttps化(SSL化)してみましたが、意外と簡単にできちゃうんですね。

最近SAA(AWS認定ソリューションアーキテクトアソシエイト）を受けて無事合格できました。
その合格体験記とかもいずれ書ければなと思っています。