S3でホスティングしているWebサイトに独自ドメインを割り当て、https化する方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/6ec16fbf-ad49-b975-cf6a-642ab0476747.png)

## はじめに
株式会社マイスター・ギルド新規事業部のヒツジーです。
弊社新規事業部では、新規サービスの立ち上げを目指して
日々、アイディアの検証やプロトタイプの作成などを行っています！

技術の進歩は目覚ましいので、置いてかれないように新しい技術のキャッチアップにもいそしんでいます！
本記事は、S3にホスティングしているWebサイトに独自ドメインを割り当て、https化する方法ついてご紹介します。

S3にホスティングしているWebサイトのURLは`http://<bucket名>.s3-website-<region名>.amazonaws.com/`のようになっていると思いますが、独自ドメインを割り当てhttps化させて`https://<original-domain>`のように使えるようにする方法を具体的に説明していきます！
サブドメインも合わせてhttps化したいという方は読む価値ありです。

## 独自ドメインを割り当て、https化する方法の概要
S3にホスティングしているだけの状態は以下のような構成図となります。
![フロントシステム構成２.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/b3359bd3-94c7-912c-1e72-ab59e01d86d2.png)

これを、独自ドメインを割り当ててhttps化するには、以下のような構成をとります。
- CloudFront
- Route53
- ACM

のサービスを追加することになります。
![フロントシステム構成.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/705bb995-25af-1cd4-c084-61edbc93793b.png)

CloudFrontでは主にルーティングを行います。ドメインとホスティング先、SSL証明書の一元管理を行います。
Route53はDNSサーバとしての役割を担います。対象のドメインへの問い合わせがあればIPアドレスを返します。
ACM（AWS Certificate Manager）は対象ドメインに対してSSL証明書を発行します。

構成を見ていると単純だなと思うんですが、手続きは初めてだとちょっと面倒です。
以下に具体的な方法を記していきます。

## 独自ドメインの割り当てとhttps化の具体的な方法
独自ドメインは事前に購入済みであることを前提とします。

**手順**
1. Route53でドメインの向き先を指定
2. ACMでSSL証明書を発行
3. CloudFrontでディストリビューション作成

※手順として、1, 2, 3と順番を書いていますが、一部行ったり来たりしないといけない部分もあります。

### 1. Route53で独自ドメインの向き先を指定
- Route53の「ホストゾーン」ページで「ホストゾーンの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/ca889f54-04ab-c4e3-63e5-b8b7ce3ccdbc.png)

- ドメイン名を入力し、「パブリックホストゾーン」にチェックを入れ、「ホストゾーンの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/ceeabf52-dc37-f085-d9b7-1fbd3cf55ada.png)

- デフォルトではタイプがNSとSOAのレコードが作成されています。
- レコードを追加するために「レコードを作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/0e600b8d-56bd-7e41-c412-859699b485aa.png)


まずはAレコードを作成します
- レコード名は空のまま
- レコードタイプ「A」を選択
- エイリアスでトラフィックのルーティング先をCloudFrontを選択
- 「レコードを作成」ボタンをクリックし、Aレコードを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/0dd2514f-db1a-7142-379b-a3a35f6d7bfb.png)

次にサブドメインのCNAMEレコードを作成します
- レコード名にサブドメインを入力します。例えば「www」
- レコードタイプ「CNAME」を選択
- 値のところにルートドメインを入力します

これでサブドメインへのアクセスはルートドメインへルーティングされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/8812f2ec-ea22-78ab-452c-dc87be138e72.png)


### 2. ACMでSSL証明書を発行
注意１：リージョンはバージニア北部にしましょう。
注意２：サブドメインも利用したい場合は、証明書1つに対して、`http://<domain>`と `http://*.<domain>`の両方を紐づける必要があります。
これをやっていないと後で、証明書を作り直すはめになります（なりました）。


- ACMのサービス画面で「証明書をリクエスト」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/99d62a57-7ee4-5f15-ae22-4a77311c85fb.png)

- 「パブリック証明書をリクエスト」にチェックを入れ、「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/70deb174-a6c4-f5b5-eb1d-e524b5b0c82d.png)

- 「完全修飾ドメイン名」に購入済みの独自ドメインを入力します。サブドメインにもhttps化したい場合は、ここで「*.(domain)」のようにワイルドカードで入力しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/c564af15-e796-5ebb-65a7-e5ab5716f2e5.png)

- SSL証明書の詳細画面にて、「Route 53でレコードを作成」をクリックし、「レコードを作成」します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/9f090540-15ee-69ca-5c34-5e4bce675ad9.png)

- ステータスが「発行済み」になるまで待つ。早くて30分くらいです。ドメインを購入していないと発行済みにはなりませんのでご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/06a60652-ba90-f816-81bf-1a6086218a0c.png)


### 3. CloudFrontでディストリビューション作成

- CloudFrontのサービス画面にて「ディストリビューションを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/a2f8817a-527a-0a30-e76d-4480901684ed.png)

- オリジンドメインでホスティングしているs3バケットを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/06b365a1-726e-965c-cc2a-23f676b3b46b.png)

（ここは人によりますが）
- ビューワープロトコルポリシーで「redirect HTTP to HTTPS」をチェック
- 許可されたHTTPメソッドで「GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE」をチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/64f11ee5-9fea-ac9b-ab09-32e340e2bd9f.png)

- 代替ドメイン名にルートドメインとサブドメインを追加します
- カスタムSSL証明書にACMで作成したSSL証明書を選択します（ここはACMで作成後に選択、もしくは先にSSL証明書を作成します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/9a396b42-a261-d2a7-d87a-ddac186afe29.png)


最後に「ディストリビューションを作成」ボタンをクリックで、作成完了です。

# 最後に
以上が、S3でホスティングしているWebサイトに独自ドメインを割り当て、https化する方法となります。
CloudFrontは1つのSSL証書しか紐づけられないので、サブドメインも含めた複数のドメインもhttps化するためには、証明書の発行側で複数のドメインを紐づけないといけません。
ここの部分は詰まった部分だったんで、同じことをしたい人にとっては、このドキュメントが役立つかと思います。