S3静的ウェブサイト＋CloudFront+Route53 + ACMの構築

##　はじめに
前回作成したS3静的ウェブサイト + CloudfrontにACMを実装します。手順としては簡単かと思いましたが、そもそも『ACMとは？』的なことを深掘りした自分用の言語理解メモとしての記事となります。

##　構成図
__前回構築ACMなし__
![スクリーンショット 2022-02-21 11.54.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/e46136c3-e07f-fb56-1c20-61e13ec570ff.png)
__今回構築ACMあり__
![スクリーンショット 2022-02-21 11.56.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/c1f7e2aa-cc92-6209-e90b-228673f39168.png)

## 言語整理
### AWS Certificate Manager とは
AWS Certificate Manager（以下、ACM）とは、とても大雑把に説明するとAWS上でSSL/TLSを利用することが可能となるサービス
[AWS：ドキュメント　AWS Certificate Manager とは？]
(https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/acm-overview.html)

ちなみにSSL/TLSとはインターネットで情報を送受信する際の仕組み（プロトコル）の一種で、__サーバ〜PC間の通信を暗号化して安全を担保してくれる__ものです

↓導入の漫画は端的でイメージを掴みやすい
[参考：　SSL/TLSってなんだろう？　]
(https://www.sslcerts.jp/)

通常SSL/TLSを利用するには、クライアントに説明して、CSR（Certificate Signing Request）ファイルと呼ばれる証明書の発行申請書を作成して、認証局にお金を支払って、証明書を発行してもらって、サーバへインストールするなどの面倒くさー(ry手続きが必要になります。が、ACMを利用することで簡単にSSL/TLSでの通信を利用することが可能となります。

### SSL/TLSの種類について
|名称|種類|認証方法|認証レベル|暗号化強度|
|:-:|:-:|:-:|:-:|:-:|
|ドメイン認証証明書（DomainValidationSSL:DV）|ドメイン認証|ドメイン認証|低|同じ|
|組織認証証明書（OrganaizationValidationSSL:OV）|実在証明型|ドメイン認証・会社実在認証|中|同じ|
|EV証明書（ExtentedValidationSSL:EV）|実在証明拡張型|ドメイン認証・会社実在認証・電話実在認証|高|同じ|

今回ハンズオンするACMはドメイン認証（Domain Validation）SSL の証明書です。後述するハンズオンの中では『パブリック証明書をリクエスト』でDNS検証か、ドメイン管理者に確認のメールが届いてメールに記載されているURLをクリックすることで証明書の取得が可能ですが、AWSの推奨によりDNS検証で手順を進めています。

他の組織認証・EV認証証明書は、組織が存在するかなど第三者からの審査があるため、今の所ここまで手軽にはなりません（そのぶん信頼度があるけれども）。しかしながらSSL/TLSは当たり前のようになっているので、クライアントがいるケースなどでは認証に要する必要な日数の確保など余裕を持って対応していきたいところです。
誰が認証するか？という違いなので、__暗号の強度が変わってくるということはない__（何と同じかツッコまれそうですが、図は”同じ”としてしまいました）

それでは早速ハンズオンをしていきます。
因みにに下記URLでは2018年記事ですが、__AWSでHTTPS化のパターン__が整理されており大変見やすく参考になると思います。
[参照：　AWSでWebサイトをHTTPS化 全パターンを整理してみました](https://recipe.kc-cloud.jp/archives/11067)


##　ハンズオン
### 0：前回のS3静的ウェブサイト+CloudFront+Route53の確認

[①AWS CLIを利用してAmazon S3静的ウェブサイトのホスティング](https://qiita.com/i3no29/items/0cbeaf9030859956e615)
[②S3静的ウェブサイト+CloudFrontの構築](https://qiita.com/i3no29/items/ede78ab15c0287fdc84e)
[③S3静的ウェブサイト+CloudFront+Route53の構築](https://qiita.com/i3no29/items/f05887aab2fcc346892e)

### 1：ACMの作成
#### 1.1 CloudFrontサービスページに遷移して前回作成したデイストリビューションを押下する
作成したディストリビューションをクリックします
![スクリーンショット 2022-02-21 13.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/5f048b96-c1ca-6d27-c256-94c1532785de.png)

#### 1.2 ディストリビューションの『一般』にある『設定』を押下、『設定を編集』を開き『証明書をリクエスト』を押下する
![スクリーンショット 2022-02-21 13.10.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/a07ee793-2d02-81fe-0b8e-c8c7c3e79dcb.png)

#### 1.3 別のページで『パブリック証明書をリクエスト』に遷移して、『ドメイン名』を入力して『リクエスト』を押下する
入力するのは前回作成したドメイン名です

![スクリーンショット 2022-02-21 13.12.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/f5892bee-cca2-8ce8-f9a6-729a73338a37.png)

#### 1.4 Route53にレコードを作成してACMの認証を発行する
![スクリーンショット 2022-02-21 13.19.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/41d71faf-7bfa-1d76-2b76-5ebcfc4704c6.png)

#### 1.5 別ページからCloudFrontのページに戻り、設定を編集する
・`代替ドメイン名（CNAME）`に利用するドメインを記入する
・`カスタムSSL証明書`の右側にある更新ボタンを押下して、1.4で作成したACM証明書を付与する
![スクリーンショット 2022-02-21 13.24.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/e36bd10f-865b-a78d-e0f2-06312c96f2d0.png)

#### 1.6 編集した設定が適応されているか確認する
![スクリーンショット 2022-02-21 13.25.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/fdda7c0d-0164-d962-c3b4-3c39f4603b0c.png)

### 2：挙動の確認
#### 2.1 Route53に登録したドメインでアクセスをする

![スクリーンショット 2022-02-21 13.28.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/f21a391e-42d1-3261-7c06-c7a694312c25.png)

前回の設定（ACMがない）とは異なり現状の設定（ACMあり）だと、HTTP/HTTPSどちらからのアクセスも受け入れられる状態となっています。
HTTP通信はセキュリティ的な観点からも受け入れないようにCloudFrontを設定していきます

#### 2.2 CloudFrontの『ビヘイビア』の『編集』より『ビューワー』を変更する
ビューワーの『HTTPS only』に設定を変更する
![スクリーンショット 2022-02-21 13.34.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/92f4020a-f482-611f-4100-22cbb74c3a57.png)

上記設定後、HTTPでドメインにアクセスすると『403 ERROR』で接続ができないようになっていました。

##　さいごに
AWS座学で学習→分からないからハンズオン構築→付随する知識（今回ならSSL/TLS）を学ぶ→深く知識の定着という、よちよちした学習サイクルを回しながら学んでいきたいと思います。次回はこちらの構築にWAFやベーシック認証などを設定していきたいかと思っています。しかしタイトルばかりが長くなっていく。

__いちおうですが前回及び今回の構築したものは全て削除してしまっているので、現状では確認できる状態にはありません__