CloudFrontの設定項目（少しかみ砕いて書いてみました）

自分が触ったところだけですがメモします。主に署名URL周りです。
触ってみて理解が少し進んでいるところは自分なりの言葉でかみ砕いて書いています。
よくわからず情報もない部分は書籍や管理画面の英語解説を
google翻訳でほぼそのままな部分、本家サイトのリンクを紹介しているものもあります。
CloudFrontって何?という方は最下部に簡単な解説を書いています。


#General
|設定項目|解説|
|:------------------|:------------------|
|Price Class|エッジロケーションを指定して低価格の地域のみを指定したりできる|
|AWS WAF Web ACL|WAFを設定している場合はここで指定することができる|
|Alternate Domain Names(CNAMEs)|独自ドメインでCloudFront経由でアクセスしたい時に設定。ワイルドカード設定も可能|
|SSL Certificate|独自ドメインを使用する場合はCustomを選択しドメインを設定する。|
|Custom SSL Client Support|古いブラウザなどの特殊な環境にも対応するか。All Clientsを選択すると約6万円/月かかる。通常はOnly Clients that Support Server Name Indication (SNI)で大丈夫。|
|Security Policy|CloudFrontでHTTPS接続に使用するセキュリティポリシーを選択します。カスタムSSL証明書とSNIを使用する場合は、TLSv1以降を使用する必要があります。ユーザーがTLSv1.1以降をサポートしていないブラウザまたはデバイスを使用している場合を除き、TLSv1.1_2016を指定することをお勧めします。カスタムSSL証明書と専用IPアドレスを使用する場合は、TLSv1を使用することをお勧めします。|
|Supported HTTP Versions|HTTP2に対応するかしないか|
|Default Root Object|ルートにアクセスがあった時に返すファイルを指定|
|Logging|ログをとるかどうか|
|Bucket for Logs|ログの保存先のs3バケットを指定|
|Log Prefix|ログにつける接頭子|
|Cookie Logging|ログにCookieを含めるかどうか|
|Enable IPv6|IPアドレスの新しい規格Ipv6を使用するかどうか。署名付きURL、Cookieを使用する際はオフにする|
|Distribution State|CloudFrontのディストリビューション設定が完了した時点で自動的に有効にするかどうか。|

#Origin Settings
オリジンに関する設定。
CloudFront経由のみのアクセスを許可し、オリジンへの直接のアクセスを遮断みたいなこともここで設定できます。

|設定項目|解説|
|:------------------|:------------------|
|Origin Domain Name|オリジンの名前を入れます。<br>・EC2のパブリックDNS<br>・beanstalkのロードバランサ<br>・s3バケット<br>などキャッシュしたいデータが入っている場所のURLを設定します。<br>途中まで入力すると候補が出る場合もあります|
|Origin Path|ここにパスを設定するとそのパス以下のものに限定してデータをキャッシュをすることができる。設定なしではオリジン全体をキャッシュする。設定する際は/から始め、最後には/を含めない。|
|Origin ID|自動で設定されるID|
|Restrict Bucket Access|Yesでオリジンに直接アクセスできなくなります。CloudFront経由のみアクセス可の状態に|
|Origin Access Identity（OAI）|CloudFrontからS3にアクセスする際にはS3で設定されたバケットポリシーを通過する必要があります。そのS3のバケットポリシーをこのCloudFrontコンソールから自動生成してくれたり、S3に設定されているバケットポリシーを選んだりここでできます。例としてS3でウェブサイトホスティングをしている際にはバケットポリシーで誰でも見られる設定パブリック・アクセスを許可にする必要があります。これをCloudFront経由でのみアクセス可能にするとセキュリティレベルを一つ上げることができます。CloudFrontからS3にアクセスする際の設定がここで可能になっています。|
|Grant Read Permissions on Bucket|上記設定した内容でs3バケットポリシーに書き込むかの確認。自分の使った感じだと追記される？形だと思います。あっでもバックアップ必須です。|
|Origin Custom Headers|おそらくいわゆるHTTPリクエストヘッダに好きなものを設定できて、オリジンに渡し、ごねごねできるっぽい|
|Origin Protocol Policy|CloudFrontからオリジンへのアクセスプロトコルをここで指定できる。例えばhttpを選択すると、httpsでroute53からアクセスが来ても、CloudFrontからオリジンへのアクセスはhttpを使用するような設定となる。CloudFrontへのHTTPによるリクエストはHTTPSにリダイレクトされる。|
|Enable Origin Shield|料金はかかる（動的リクエストの総数 x 10,000 リクエストあたりの Origin Shield 料金 / 10,000）がキャッシュヒット率の向上やオリジンの負荷軽減などの効果がある。具体的なユースケースは[本家サイト](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html#origin-shield-costs)に詳細が載っています。|

#Behaviors
ここでファイルごとだったりディレクトリごとだったり好きにキャッシュ時間を設定したり、署名URL発行したりできる項目。例えば管理画面ディレクトリは動的に動いているからキャッシュ無しでとか、jpgは長期間キャッシュとかができる。

|設定項目|解説|
|:------------------|:------------------|
|Path Pattern|キャッシュしたいファイル名だったりディレクトリだったりを指定。ワイルドカードも使用可能。初期*の設定が必須っぽいのでまずはベースの設定をしてその後にファイルごとに好きに追加していく感じ。|
|origin|上記path patternが存在するオリジンを設定|
|Viewer Protocol Policy|HTTPとHTTPS両方にアクセスできる<br>HTTPをHTTPSにリダイレクトにする<br>HTTPSのみアクセスさせる<br>の選択|
|Allowed HTTP Methods|許可するHTTPメソッド多くの場合は[GET,HEAD]を設定。WEBDAVなどデータをアップする際などは[GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE]|
|Field-level Encryption Config|フィールドレベルの暗号化設定とのこと|
|Cached HTTP Methods|HTTPメソッドのキャッシュ設定|
|Cache Based on Selected Request Headers|リクエストヘッダをキャッシュするかという設定。キャッシュ無し、whitelistでキャッシュする、すべてキャッシュするから選ぶことができる。|
|Object Caching|キャッシュする時間をここで設定するか、オリジンで設定するか。最低何秒、最高何秒、通常何秒キャッシュするかを設定できる。|
|Forward Cookies|クライアントから届いたクッキーをオリジンに転送するかどうか。特殊な用途以外はnone|
|Query String Forwarding and Caching|クライアントから届いたクエリ文字列をオリジンに転送するかどうか|
|Smooth Streaming|オンデマンド配信で「Microsoft Smooth Streaming」を利用しているときはYes|
|Restrict Viewer Access(Use Signed URLs orSigned Cookies)|署名URLを使用するかどうか|
|Compress Objects Automatically|クライアントがAccept-Encoding: gzipを送信してきてgzip圧縮をサポートしているときは自動的にデータをgzipで圧縮して返すかどうかを指定する。yesは圧縮。|
|real-time logs|リアルタイムログを取るかどうか。ここも料金がかかってくるものなので必要に応じて設定。詳細は[本家サイトリアルタイムログ](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html?icmpid=docs_cf_help_panel)|

#そもそもCloudFrontとは
最後に少し解説を書いておきます。
CloudFrontとはamazonが提供するCDNです。
サイトの高速表示、DDos対策、ワンタイムURLの発行
指定した国からのアクセスをはじく（ブラックリスト、ホワイトリスト）など様々な機能があります。

まずDistributionというものを設定します。
Create Distributionというところから作成をしていきます。
通常用途であれば一つのサイト、プロジェクトに1つのディストリビューションを設定することになります。
1つのディストリビューションにEC2とs3など複数のオリジンを設定することも可能です。
前述の設定項目はその設定項目ですが最初に設定を始めるときは順番が違いますのでご注意ください。設定後の設定画面の順番で書いていきます。
（設定する項目によって項目自体が非表示になったりするので注意）

#キャッシュヒット率がビヘイビアごとに確認できます
左メニューのPopular object reportからビヘイビアごとのキャッシュヒット率を確認することができるので
定期的に確認してビヘイビアのTTL設定をうまく調整すると高速化につなげることができる。


#ディストリビューションの情報をCLIで取得できます。
CloudFrontのIDに割り当てられているkey情報などはコンソールから確認できない？
みたいなのでCLIで取得しました。
※keyが一つなら認証情報見ればいいと思います。

```
aws CloudFront get-distribution --id XXXXXXXX
```

以下のようなエラーが出たら

```
AWS CLI support for this service is only available in a preview stage.

However, if you'd like to use the "aws CloudFront" commands with the
AWS CLI, you can enable this service by adding the following to your CLI
config file:

    [preview]
    CloudFront=true

or by running:

    aws configure set preview.CloudFront true
```

提示されている以下のコマンドを実行すると解消されます。
```
aws configure set preview.CloudFront true
```

↑このコマンドでCLIのconfigファイルが更新され以下の部分が追記されました。

```
[preview]
CloudFront = true
```

falseにするには以下でいけました。
```
aws configure set preview.CloudFront true
```

私の環境の場合

```
[preview]
CloudFront = true
```
がそもそもなかったのでvimで削除しました。