
【AWS】 CloudFrontの解説
Amazon CloudFront
コンテンツ配信ネットワーク(CDN)サービスで、世界中に分散配置されたサーバー(エッジロケーション)を使用して、ウェブサイトやアプリケーションのコンテンツをエンドユーザーに高速に配信する。
静的コンテンツ(画像やスタイルシートなど)だけでなく、動的コンテンツ(リアルタイムのAPIレスポンスやインタラクティブ)も配信できる。
コンテンツがエッジロケーション内に最も低いレイテンシーですでに存在している場合、CloudFront はそのコンテンツを即時に配信します。
コンテンツがエッジロケーションに存在しない場合、コンテンツの最終バージョンのソースとして識別されている Amazon S3 バケット、または HTTP サーバーなどの定義されたオリジンからコンテンツを取り込む。
エッジサーバーに関連付けられているIP アドレス範囲は JSON 形式で公開されている。
ディストリビューション
コンテンツをエンドユーザーに配信するための設定の集まり。コンテンツの配信元とコンテンツ配信の追跡および管理方法の詳細を CloudFront に伝える。
設定要素
オリジン
オリジンはCloudFrontがコンテンツを取得する場所。
Amazon S3バケット、EC2インスタンスやELBが含まれる。オリジンごとにIDを設定し、特定のオリジンポリシーを適用することができる。
1 つの配信に対して最大 25 個のオリジンを任意に組み合わせて指定できる。
キャッシュ動作設定
リクエストごとにCloudFrontがどのように応答するかを定義する。キャッシュキー、キャッシュの保存期間、リクエストの転送方法などを詳細に設定できる。
パスパターンに基づいて異なるキャッシュ動作を設定することができ、特定のタイプのコンテンツに対して異なるルールを適用することが可能。
ディストリビューションの設定
ディストリビューションには一意のドメイン名が割り当てられる。カスタムドメイン名(例えば example.com)を使用する場合は、DNS設定でCNAMEレコードをCloudFrontディストリビューションに指定する必要がある。
SSL証明書の管理も可能で、HTTPSを通じたセキュアなコンテンツ配信をサポートする。
セキュリティ設定
AWS WAFと統合でき、特定のセキュリティポリシーをディストリビューションに適用できる。
より細かなアクセス制御のために、署名付きURLや署名付きCookieを使用して、コンテンツのアクセスを限定できる。
ログ:
アクセスログを有効にすると、CloudFrontはすべてのリクエストに関する詳細情報をS3バケットに保存する。これにより、トラフィックパターンの分析やセキュリティ監視が可能になる。
コンテンツ例
静的コンテンツ
HTML、CSS、JavaScriptなどのウェブページ構成要素や、画像、ビデオファイル、PDFなどのメディアコンテンツ。
動的コンテンツ
ユーザーのリクエストに応じて生成されるページやデータ(HTML、JSON、XML)、リアルタイムで更新が必要なアプリケーションやサービス。
ストリーミングおよびダウンロードコンテンツ
音楽やビデオのストリーミング、ソフトウェアのインストーラー、アプリケーションのアップデートパッケージなど。
ポリシーの操作
オリジンアクセスアイデンティティ(OAI)
オリジンアクセスアイデンティティは、CloudFrontがS3バケット内のコンテンツに安全にアクセスするために使用されます。これにより、S3バケットへの直接アクセスを制限し、CloudFront経由でのみコンテンツを公開できるようになります。
署名付きURLと署名付きCookie
これらの方法は、限定的なアクセスを提供するために使用されます。特定のユーザーに対して、期間限定または特定のパスのコンテンツへのアクセスを許可するために署名付きURLまたはCookieを生成します。
カスタムヘッダーの使用
CloudFrontにカスタムヘッダーを追加することで、オリジンサーバーに対する追加情報を提供し、セキュリティを強化することができます。オリジンサーバーはこれらのヘッダーを使用してリクエストを検証し、処理を決定します。例えば、特定のCloudFrontディストリビューションからのリクエストのみを許可するなど。
関数
コンテンツの配信プロセスにカスタムロジックを追加するための機能。
リクエストまたはレスポンスの処理をカスタマイズすることができる。
関数はJavaScriptで記述され、CloudFrontの各リクエストやレスポンスに対して特定のトリガー時に実行される。管理コンソール、AWS CLI、またはAWS SDKを通じて関数を設定し、デプロイすることができます。関数は、特定のCloudFrontイベント(例えばビューアーリクエスト、ビューアーレスポンス、オリジンリクエスト、オリジンレスポンス)に関連付けられ、それぞれのイベント時に自動的に実行される。
ディストリビューションの作成
ディストリビューションの設定を開始
AWS管理コンソールにログインし、「Services」から「CloudFront」を選択。
CloudFrontダッシュボードで「Create Distribution(ディストリビューションを作成)」ボタンをクリック。
「Web」セクションの「Get Started」を選択して、ウェブディストリビューションの設定を開始。
オリジンの設定
Origin Domain Name(オリジンドメイン名): コンテンツが格納されているS3バケット名やHTTPサーバーのドメイン名を入力。例えば、mybucket.s3.amazonaws.com。
オプションとして、Origin Path(オリジンパス)、Origin ID(オリジンID) を設定。これにより、特定のパスからコンテンツを提供できる。
Origin Shield などの追加オプションを選択して、オリジンへのリクエストを最適化。
ビヘイビアの設定(キャッシュ動作)
Path Pattern(パスパターン): 特定のパスに適用されるルールを設定。デフォルトは全てのリクエストを指す「*」。
Viewer Protocol Policy(ビューアプロトコルポリシー): HTTPSのみ、リダイレクトHTTP to HTTPS、またはHTTPとHTTPSの両方を選択。
Cache Policy and Origin Request Policy: キャッシュポリシーとオリジンリクエストポリシーを選択または新規作成。
Compress Objects Automatically(オブジェクトの自動圧縮): より効率的な配信のために、オブジェクトの圧縮を有効にするか選択。
ディストリビューションの詳細設定
Alternate Domain Names (CNAMEs): カスタムドメイン名を追加。
SSL Certificate: AWS Certificate Manager (ACM)からSSL証明書を選択、またはカスタムSSL証明書をアップロード。
Default Root Object: ディストリビューションのルートオブジェクトを指定(例:index.html)。
ディストリビューションの作成
すべての設定を確認し、最後に「Create Distribution(ディストリビューションを作成)」ボタンをクリック。
ディストリビューションが作成され、デプロイプロセスが開始される。完了までに数分かかることがある。







ポリシーの作成
キャッシュポリシーの作成
キャッシュポリシーは、CloudFrontがリクエストを受け取った際に、どのように応答をキャッシュするかを定義します。これには、キャッシュの有効期間、ヘッダー、クッキー、クエリストリングの扱いが含まれます。
AWSマネジメントコンソールにログインし、CloudFrontダッシュボードにアクセスします。
左側のナビゲーションパネルから 「Policies」 を選択し、「Create Policy」 ボタンをクリックします。
「Create Cache Policy」 を選択。
フォームに必要な情報を入力します:
Name: ポリシーの名前を指定。
Comment: ポリシーの説明を任意で追加。
TTL Settings: キャッシュの有効期間(最小TTL、最大TTL、デフォルトTTL)を設定。
Cache Key Settings: キャッシュキーの生成に使用するヘッダー、クッキー、クエリストリングを指定。
「Create」 ボタンをクリックしてポリシーを保存。


オリジンリクエストポリシーの作成
オリジンリクエストポリシーは、CloudFrontがオリジンサーバーにリクエストを送る際に、どのヘッダー、クッキー、クエリストリングを含めるかを定義します。
CloudFrontダッシュボードの 「Policies」 タブを開きます。
「Create Policy」 と選択し、「Create Origin Request Policy」 をクリック。
フォームに必要な情報を入力:
Name: ポリシーの名前。
Comment: ポリシーの説明。
Header Settings: オリジンに転送するヘッダーを指定。
Cookie Settings: オリジンに転送するクッキーを選択。
Query String Settings: オリジンに転送するクエリストリングの設定。
「Create」 ボタンをクリックしてポリシーを保存。


レスポンスヘッダーポリシーの作成手順
CloudFrontダッシュボードの左側のメニューから 「Policies」 を選択します。
「Policies」ページで、「Create policy」 ボタンをクリックし、「Create response headers policy」 を選択します。
フォームにポリシーの詳細を入力します:
Name: ポリシーにわかりやすい名前を付けます。
Comment (任意): ポリシーの目的やその他の詳細を説明するコメントを追加できます。
Security Headers のセクションで、必要に応じて以下のヘッダーを設定します:
Content Security Policy (CSP): 特定のソースからのコンテンツのロードを制限します。
Strict-Transport-Security (HSTS): HTTPSを通じてのみサイトにアクセスすることを強制します。
X-Content-Type-Options: ブラウザが提供されたコンテンツタイプをMIMEタイプとして解釈することを強制します。
Referrer Policy: リファラーヘッダーの送信ポリシーを定義します。
X-Frame-Options: クリックジャッキング攻撃から保護するため、ページがどのフレーム内で表示されるべきかをブラウザに指示します。
X-XSS-Protection: クロスサイトスクリプティング (XSS) 保護を有効にします。
「Create policy」 ボタンをクリックして、レスポンスヘッダーポリシーを作成します。



HTTPS通信の条件
AWS Certificate Manager (ACM) の証明書を使用して、エンドユーザと CloudFront との間で HTTPS を必須にする場合は、米国東部 (バージニア北部) リージョン (us-east-1) の証明書をリクエスト (またはインポート) していることが必須となる。
これは、CloudFrontが全世界のエッジロケーションで一貫して証明書を利用できるようにするため。ACMの証明書は発行されたリージョン内でのみ有効だが、CloudFrontの場合、us-east-1で発行された証明書は全エッジロケーションで利用可能となる特別な設計がされている。
そのため、CloudFrontディストリビューションを設定する際には、us-east-1リージョンで発行された証明書を指定し、エンドユーザからの通信をHTTPSに設定することで、全てのビューワーリクエストを安全に暗号化することができる。
いいなと思ったら応援しよう!
