AWS CloudFront
# AWS CloudFront
https://d1.awsstatic.com/webinars/jp/pdf/services/20190730_AWS-BlackBelt_Amazon_CloudFront.pdf
## Webアクセスの課題
- レスポンスの遅延、不安定なレスポンス
- ネットワークレイテンシの低い場所からレスポンスを返したい
- 大量アクセスへの対応
- 静的なコンテンツはキャッシュしたい
## Contents Delivery Network
- CloudFront の特徴
## 高速配信機能
- CloudFront ディストリビューション
- ウェブディストリビューション
- サポートプロトコル HTTPメソッド
- オリジンへのアクセスはInternet 経由
- エッジでもgzip 圧縮機能
- キャッシュ動作
- キャッシュコントロール
- 単一ファイルのキャッシュは20GBまで
- URLパスごとにキャッシュ期間指定が可能
- フォワードオプション機能による動的ページ配信
- Header / Cookie / Query Strings
- URLおよび有効かしたフォワードオプション機能のパラメータ値の完全一でキャッシュが再利用される
- キャッシュコントロールヘッダ
- キャッシュファイルの無効化
- コンテンツごとに設定可能
- 動的コンテンツ機能
- 動的コンテンツへの対応
- ヘッダーをオリジンへ転送
- オリジンに任意のヘッダー情報を転送することで動的なページ生成にも対応
- 全てのヘッダーをするとキャッシュヒット率が低下するので悪手
- カスタムヘッダーにも対応
- CloudFront独自ヘッダー
- Cookieをオリジンへ転送
- クエリ文字列のパラメータの値をオリジンへ転送
- きめ細やかなキャッシング
- キャッシュ動作(Behaviors)を活用したマルチオリジンおよびキャッシュコントロールの個別設定
- カスタムエラーページの生成
- オリジンが5xx or 4xx を返す時にS3からカスタムエラーページを返すようにできる
- カスタムオリジンのタイムアウト
- オリジンフェイルオーバー
- オリジングループを作成し、プライマリ、セカンダリと指定可能
## データ保護機能
- データ保護機能
- セキュア配信
- HTTPS
- SSL証明書
- ビューワー接続 SSLセキュリティポリシー
- オリジン暗号化通信
- CloudFront エッジとオリジンの間の通信方式を制御
- Origin Protocol Policy
- オリジンカスタムヘッダー
- エッジ通過時にカスタムHTTPヘッダの追加/上書きが可能
- オリジンにアクセスできるのはCloudFront のみから
- リクエストヘッダの調整
- 地域制限(white list / black list)
- 制限された場合は403を返す
- 署名付き URL/Cookie
- Restricted Viewer Access を有効にするだけで、署名のないアクセスを全てブロック
- 有効か期間を最小化することを推奨
- URLの生成
- フォールドレベル暗号化を仕様した機密データの保護
- POSTリクエストの得ていデータフィールドを特定のアプリケーションのみアクセスできるように保護
- オリジンサーバの保護
- オリジンがS3の場合
- Origin Access Identity(OAI)を利用
- CloudFront + S3 の組み合わせでS3への直接アクセスをさせず、CloudFront でS3にアクセスできる人を絞れる機能
- カスタムオリジンの場合
- ALBのホストヘッダーのルーティングルールで任意のヘッダをチェック
- CloudFrontが利用するIPアドレスのみを許可する
- WAF連携
- WAFで定義したWeb ACLをCloudFront ディストリビューションに適用
- WAF はCloudFrontの前段で機能
- AWS Shield によるDDoS対策
- デフォルトで有効化、無料
## レポート&ロギング機能
- CloudFront Reports & Analytics
- レポートできるもの
- Cache Statistics
- Monitoring / Alerms -> CloudWatch
- Popular Objects
- Top Referrers
- Usage
- Viewers
- Access Log -> S3
## Lambda@Edge
CloudFront + Lambda = Lambda@Edge
- 特徴
- 完全に自動化された管理
- 自動スケーリング
- 利用に応じた支払い
- 組み込みの耐障害性
- グローバル分散
- ユースケース
## 雑感
キャッシュ目的でなくても、CloudFront を挟むことでレイテンシが改善することは知らなかった。( -> ただしアクセス頻度によっては課金額が怖いことになりそう)
一般的なことであるが、ここをサービスの入り口にして、オリジンはCloudFront 経由でしか受け付けないようにする。キャッシュヒット率を上げることが重要。グローバルサービスでの地域制限はこれを使うとサクッとできそう(ブロードキャスト系のサービスはよくやっている気がする)。職場で運用しているサービスで使えば効果ありそうと思った。