【AWS完全に理解したへの道】 CloudFront 基本編
AWS過去記事
IAM 基本編
VPC 基本編
S3 基本編
データベース(RDS/ElastiCache/DynamoDB)基本編
EC2 基本編
ELB 基本編
CloudFront
- CDNサービス(Contents Delivery Network)
- 元となるコンテンツを保持するバックエンドサーバ(ELB, EC2, S3, オンプレ)が必要。
CludFrontは何を解決する?
- レスポンスの遅延、不安定なレスポンス
- 大量アクセスへの対応
CDNの利点
- 地理的に近い場所に配置されているサーバからコンテンツ(動画や画像、HTMLページなど)を取得することで配信を高速化する
- オリジンのサーバサイドとコンテンツ配信をするサーバを分離することでオリジンのサーバの負荷を下げる
AWS Black Belt Online Seminar Amazon CloudFrontの概要より画像引用
ディストリビューション
-
ダウンロードディストリビューション
プロトコル:HTTPS, HTTP -
ストリーミングディストリビューション
プロトコル:Real-Time Messaging Protocol
キャッシュルール
- 拡張子やURLパス毎にキャッシュ期間を指定可能
CloudFrontコンテンツ配信設定の流れ
- Amazon S3バケット、ALB、EC3、オンプレにある独自のHTTPサーバなどのオリジンサーバを設定
- ファイルをオリジンサーバにアップロード
- CloudFrontディストリビューションを作成
- CloudFrontがドメイン名を割り当て
- ディストリビューションの構成を全てのエッジロケーションに送信
CloudFrontエッジでのgzip圧縮機能
gzip圧縮する事でより高速にコンテンツを配信
S3はgzip圧縮をサポートとしないので、こちらを利用する事でコンテンツ配信がより高速になる
キャッシュコントロール
キャッシュヒット率を向上させる事がCDN導入におけるポイントとなる
特徴
- GET/HEAD/OPTIONのリクエストが対象
- URLパス毎にキャッシュ期間指定が可能
- フォワードオプション機能による動的ページ配信(Header/Cookie/Query Stringを考慮したページ配信が可能)
- 単一ファイルサイズのキャッシングはMAX 20GBまで
URL及び有効化したフォワードオプション機能のパラメタ値の完全一致でキャッシュが再利用される
キャッシュファイルの無効化
- コンテンツ毎の無効化パス指定可能(同時にMAX3,000個まで)
- ワイルドカードを利用した無効化パス指定可能(同時にMAX15個まで)
- オブジェクト数の制限はなし
AWS Management Console or APIで実行可能
動的コンテンツ機能のキャッシュ動作
ヘッダーをオリジンへ転送
- CloudFront 独自ヘッダー
CloudFront側でクライアントの情報を独自に判定し、オリジンにフォワード
全てのヘッダーをフォワードするとキャッシュ効率が大幅に低下するため必要最小限のヘッダー指定することを推奨
Type | Header | 説明 |
---|---|---|
接続プロトコル判定 | CroudFront-Forwarded-Proto | HTTP or HTTPSを設定 |
デバイス判定 | CloudFront-Is-Mobile-Viewer CloudFront-Is-Tablet-Viewer CloudFront-Is-Desktop-Viewer |
User-Agentをもとに、クライアントデバイスの情報をTrue/Falseで設定 |
地域判定 | CloudFront-Is-Viewer-Country | クライアントのIPアドレスをもとに、地域コードを設定 (ISO-3166-1 alpha-2準拠) |
オリジンフェイルオーバー
CloudFrontオリジンフェイルオーバーによる高可用性
- HTTPステータス 500, 502, 503等のHTTPステータスコードを返した場合や接続タイムアウトした場合にバックアップオリジンにルーティングする機能
- Lambda@Edge関数やカスタムエラーページでもオリジンフェイルオーバー可能
データ保護機能
HTTPS対応(強制リダイレクト/HTTPSのみ許可)
SSL証明書
デフォルト証明書
cloudfront.netドメインのSSL証明書は標準で利用可能
独自SSL証明書
X.509PEM形式かつ認証チェーンが含まれること、鍵長はMAX2048bit
様々な証明書タイプをサポート(Domain Validated, Extend Validatedなど)
ACM(AWS Certification Manager)で発行された証明書
SNI(Server Name Indication)SSL証明書
CloudFrontの専用IPアドレス費用を負担せず、独自ドメインでのSSL通信が可能
専用IPアドレスSSL証明書
専用IPアドレス使用時はCloudFrontにて別途利用課金される
ビューワー接続SSLセキュリティポリシー
クライアントとCloudFront間の事前定義されたSSL/TlSプロトコルとCipherの組み合わせをサポート
(TLSv1.2_2018, TLSv1.1_2016(推奨), TLSv1_2016, TLSv1から選択可能)
地域制限(GEO Restrictions)
- 接続されるクライアントの地域情報を元に、エッジでアクセス判定する
- Blacklist or Whitelistにより指定可能
- ディストリビューション全体に対して適用される
- 制限されたアクセスには403を返す
署名付きURL/Cookie
- Restricted Viewer Accessを有効にするだけで、署名のないアクセスを全てブロック
フィールドレベル暗号化を使用した機密データの保護
POSTリクエストの特定データフィールドを特定のアプリケーションのみアクセスできるように保護する
(公開鍵暗号方式により実現)
eg. 個人情報などの機密データに特定のアプリケーションのみからアクセスできるようにする
設定方法
- RSAキーペアを取得
- パブリックキーをCloudFrontに追加
- フィールドレベル暗号化のプロファイルを作成
- 暗号化を行うリクエストのコンテンツタイプを指定する設定を作成
- キャッシュ動作に設定を追加
- オリジンでデータフィールドを復号化
AWS Encryption SDKを使用し実装する。
また、C, Java, Python, JavaScript CLIも使用可能。