LoginSignup
7
11

More than 3 years have passed since last update.

【AWS完全に理解したへの道】 CloudFront 基本編

Posted at

【AWS完全に理解したへの道】 CloudFront 基本編

スクリーンショット 2020-01-18 17.24.36.png

AWS過去記事

IAM 基本編
VPC 基本編
S3 基本編
データベース(RDS/ElastiCache/DynamoDB)基本編
EC2 基本編
ELB 基本編

CloudFront

  • CDNサービス(Contents Delivery Network)
  • 元となるコンテンツを保持するバックエンドサーバ(ELB, EC2, S3, オンプレ)が必要。

CludFrontは何を解決する?

  1. レスポンスの遅延、不安定なレスポンス
  2. 大量アクセスへの対応

CDNの利点

  • 地理的に近い場所に配置されているサーバからコンテンツ(動画や画像、HTMLページなど)を取得することで配信を高速化する
  • オリジンのサーバサイドとコンテンツ配信をするサーバを分離することでオリジンのサーバの負荷を下げる

スクリーンショット 2020-01-18 18.03.34.png

AWS Black Belt Online Seminar Amazon CloudFrontの概要より画像引用

ディストリビューション

  • ダウンロードディストリビューション
    プロトコル:HTTPS, HTTP

  • ストリーミングディストリビューション
    プロトコル:Real-Time Messaging Protocol

キャッシュルール

  • 拡張子やURLパス毎にキャッシュ期間を指定可能

CloudFrontコンテンツ配信設定の流れ

  1. Amazon S3バケット、ALB、EC3、オンプレにある独自のHTTPサーバなどのオリジンサーバを設定
  2. ファイルをオリジンサーバにアップロード
  3. CloudFrontディストリビューションを作成
  4. CloudFrontがドメイン名を割り当て
  5. ディストリビューションの構成を全てのエッジロケーションに送信

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

  1. Restricted Viewer Accessを有効にするだけで、署名のないアクセスを全てブロック スクリーンショット 2020-02-01 9.15.51.png

フィールドレベル暗号化を使用した機密データの保護

POSTリクエストの特定データフィールドを特定のアプリケーションのみアクセスできるように保護する
(公開鍵暗号方式により実現)
eg. 個人情報などの機密データに特定のアプリケーションのみからアクセスできるようにする

設定方法
  1. RSAキーペアを取得
  2. パブリックキーをCloudFrontに追加
  3. フィールドレベル暗号化のプロファイルを作成
  4. 暗号化を行うリクエストのコンテンツタイプを指定する設定を作成
  5. キャッシュ動作に設定を追加
  6. オリジンでデータフィールドを復号化

AWS Encryption SDKを使用し実装する。
また、C, Java, Python, JavaScript CLIも使用可能。

参考

[AWS Black Belt Online Seminar] Amazon CloudFrontの概要

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11