CloudFront 経由で S3 のファイルにアクセスする

# もくじ

1. CloudFront 経由で S3 のファイルにアクセスできるようにする
2. 独自ドメインで CloudFront にアクセスできるようにする
3. CloudFront 経由の時だけ S3 のファイルにアクセスできるようにする

---
<br>

# 準備

![cloudfront_s3_001.png](https://qiita-image-store.s3.amazonaws.com/0/141934/3dc7addb-28b3-bc33-bedf-f555b0dafeaa.png)


- S3に画像ファイルをアップロードしておく
- 画像ファイルに`公開する`設定をしておく
- ブラウザから画像ファイルのリンクにアクセスして画像が表示されることを確認しておく

![cf_s3_000.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ed4fb0b0-d16f-9e63-1e95-4d8e2e1fbbeb.png)

| 種別 | URL | アクセス可否 |
| :--- | :--- | :---: | 
| S3公開リンク | http://s3-<リージョン>.amazonaws.com/<バケット名>/<ファイル名> | ○ | 
| CloudFrontドメイン | http://<ドメイン名>.cloudfront.net/<ファイル名> | 未設定 |
| 独自ドメイン | http://<ドメイン名>/<ファイル名> | 未設定 |

---
<br><br><br>

# 1. CloudFront 経由で S3 のファイルにアクセスできるようにする

![cloudfront_s3_002.png](https://qiita-image-store.s3.amazonaws.com/0/141934/e6ed5dae-4ffe-f310-aeaa-4c12936e5e70.png)

## 設定:CloudFront

CloudFrontのコンソールでDistributionを作成する

![cf_s3_01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/879f0146-3a28-24f1-c938-49667fb51b64.png)
![cf_s3_02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/57ad834d-5d98-37ee-772c-172f44ee5141.png)

`Origin Domain Name`にS３のバケットを指定する
> 補足：
> テキストボックスをクリックすると選択候補のリストが表示される

![cf_s3_03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/800242cf-b216-1b75-74f9-0b883f196092.png)

![cf_s3_04.png](https://qiita-image-store.s3.amazonaws.com/0/141934/fb17bf04-a66d-543c-9457-1b3978c998df.png)

`Status`が**Deployed**になるまで待つ

![cf_s3_05.png](https://qiita-image-store.s3.amazonaws.com/0/141934/f19bc900-ba23-cafd-157c-a387c1cc6179.png)

## アクセス確認

ブラウザから**CloudFrontドメインのURL**にアクセスして、ファイルにアクセスできるようになったことを確認する

| 種別 | URL| アクセス可否 |
| :--- | :--- | :---: | 
| S3公開リンク | http://s3-<リージョン>.amazonaws.com/<バケット名>/<ファイル名> | ○ | 
| CloudFrontドメイン | http://<ドメイン名>.cloudfront.net/<ファイル名> | ○ |
| 独自ドメイン | http://<ドメイン名>/<ファイル名> | 未設定 |

---
<br><br><br>

# 2. 独自ドメインで Cloud Front にアクセスできるようにする

![cloudfront_s3_003.png](https://qiita-image-store.s3.amazonaws.com/0/141934/e80e30d0-ef82-aa1c-1e15-d4a2c8173ed5.png)

## 設定：CloudFront

CloudFrontのコンソールでDistribution設定を変更する

 ![cf_s3_11.png](https://qiita-image-store.s3.amazonaws.com/0/141934/c6a18ec6-e57f-3b7a-ddea-bbce2bdc1792.png)
![cf_s3_12.png](https://qiita-image-store.s3.amazonaws.com/0/141934/63fbf919-343d-831d-533e-cf5cbb1db676.png)

`Altername Domain Name`にドメイン名を指定する

> 補足：
> 今回はファイルに「http://image.<独自ドメイン>/<ファイル名>」でアクセスできるように、
> `Altername Domain Name`には**image.<独自ドメイン>**を指定した

![cf_s3_13.png](https://qiita-image-store.s3.amazonaws.com/0/141934/1e93d8f7-9c39-122e-45db-63401b86f0cb.png)
![cf_s3_14.png](https://qiita-image-store.s3.amazonaws.com/0/141934/247dc50b-76ad-357b-64a1-8d6f47175162.png)
![cf_s3_15.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ff4dd5ee-306f-e941-a1d9-2c18b6738afa.png)

## 設定：Route53

Route53のコンソールで**image.<独自ドメイン>**のレコードを作成する

`Alias Target`にはCloudFrontのDistributionを指定する
> 補足：
> テキストボックスをクリックすると選択候補のリストが表示される

![cf_s3_16.png](https://qiita-image-store.s3.amazonaws.com/0/141934/0113a9ff-f3e7-b04a-74b6-ed0df1133cc8.png)
![cf_s3_17.png](https://qiita-image-store.s3.amazonaws.com/0/141934/0af406ed-9f5f-5e27-3f31-6b04c5cb85df.png)


## アクセス確認

ブラウザから**独自ドメインのURL**にアクセスして、ファイルにアクセスできるようになったことを確認する

| 種別 | URL | アクセス可否 |
| :--- | :--- | :---: | 
| S3公開リンク | http://s3-<リージョン>.amazonaws.com/<バケット名>/<ファイル名> | ○ | 
| CloudFrontドメイン | http://<ドメイン名>.cloudfront.net/<ファイル名> | ○ |
| 独自ドメイン | http://<ドメイン名>/<ファイル名> | ○ |

---
<br>

# 3. Cloud Front 経由の時だけ S3 のファイルにアクセスできるようにする

![cloudfront_s3_004.png](https://qiita-image-store.s3.amazonaws.com/0/141934/762515b5-5e13-bca3-97f6-ad9d6baea98c.png)

## 設定：CloudFront

CloudFrontのコンソールで`Restrict Bucket Access`を設定する

![cf_s3_21.png](https://qiita-image-store.s3.amazonaws.com/0/141934/7047b89f-d95b-b859-1adc-bdebd4305bc9.png)
![cf_s3_22.png](https://qiita-image-store.s3.amazonaws.com/0/141934/3951cd13-0108-937a-c528-8ea16d51fc92.png)
![cf_s3_23.png](https://qiita-image-store.s3.amazonaws.com/0/141934/bccdf3fb-56f9-9c8c-b5fe-c346d5b935e9.png)
![cf_s3_24.png](https://qiita-image-store.s3.amazonaws.com/0/141934/f7147967-a2b5-c4c1-83f1-4b2ebb1148d8.png)
![cf_s3_25.png](https://qiita-image-store.s3.amazonaws.com/0/141934/c00af67d-59f4-cada-78a6-b3bf465b1889.png)

## 確認：S3

S3のコンソールでバケットポリシーが設定されてることを確認する

![cf_s3_26.png](https://qiita-image-store.s3.amazonaws.com/0/141934/fe401e38-a49e-6dae-7265-03dabee9abc8.png)

## 設定：S3

S3のコンソールでパブリックアクセスを禁止しておく

![cf_s3_27.png](https://qiita-image-store.s3.amazonaws.com/0/141934/17b5e287-2a23-6316-3f49-87d85c5a06ca.png)

> 補足：
> CloudFrontで`Restrict Bucket Access`を設定しても、S3でパブリックアクセスが許可されていると公開リンクからファイルへアクセスすることが可能なため、上記の操作を行い`準備`で有効化した「公開する」設定を無効化する必要がある

## アクセス確認

ブラウザから**S3公開リンク**にアクセスして、ファイルにアクセスできなくなったことを確認する

| 種別 | URL | アクセス可否 |
| :--- | :--- | :---: | 
| S3公開リンク | http://s3-<リージョン>.amazonaws.com/<バケット名>/<ファイル名> | × | 
| CloudFrontドメイン | http://<ドメイン名>.cloudfront.net/<ファイル名> | ○ |
| 独自ドメイン | http://<ドメイン名>/<ファイル名> | ○ |