コンテンツの地理的ディストリビューションの制限 - Amazon CloudFront

コンテンツの地理的ディストリビューションの制限

地域制限 (地理的ブロックとも呼ばれます) を使用すると、CloudFront ディストリビューションを通じて配信しているコンテンツについて、特定地域のユーザーによるアクセスを回避できます。地域制限を使用するには、次の 2 つの方法があります。

  • CloudFront の地域制限機能を使用する。ディストリビューションに関連するすべてのファイルへのアクセスを制限し、国レベルでアクセスを制限する場合は、この方法を使用します。

  • サードパーティーの位置情報サービスを使用する。ディストリビューションに関連するファイルのサブセットへのアクセスを制限する場合や、国レベルより詳細なレベルでアクセスを制限する場合は、この方法を使用します。

CloudFront の地域制限の使用

ユーザーがコンテンツをリクエストすると、通常 CloudFront はユーザーがいる場所に関係なくリクエストされたコンテンツを提供します。特定の国のユーザーによるコンテンツへのアクセスを回避する必要がある場合は、CloudFront の地域制限を使用して、次のいずれかを行うことができます。

  • 承認された国のリストに含まれているいずれかの国にユーザーがいる場合のみ、コンテンツへのアクセスを許可する。

  • ユーザーがブロックリストにある禁止国にいる場合、コンテンツへのアクセスを禁止する。

例えば、コンテンツの配信が許可されていない国がリクエスト元である場合は、CloudFront の地域制限を使用してリクエストをブロックできます。

注記

CloudFront は、サードパーティーのデータベースを使用して、ユーザーがいる場所を判別します。IP アドレスと国とのマッピングの正確さは、リージョンによって異なります。最近のテストによれば、全体的な正確性は 99.8% です。CloudFront がユーザーの場所を特定できない場合、ユーザーがリクエストしたコンテンツは CloudFront から供給されます。

地域制限は次のような仕組みになっています。

  1. 仮に、コンテンツをリヒテンシュタインでのみ配信する権限を持っているとしましょう。CloudFront ディストリビューションを更新して、リヒテンシュタインのみを含む許可リストを追加します。(または、リヒテンシュタイン以外のすべての国を含むブロックリストを追加することもできます)。

  2. モナコに住むユーザーからコンテンツがリクエストされた場合、DNS はそのリクエストをミラノ (イタリア) にある CloudFront エッジロケーションにルーティングします。

  3. ミラノのエッジロケーションはお客さまのディストリビューションを検索し、モナコ王国のユーザーはコンテンツをダウンロードすることは許可されていないと判断します。

  4. CloudFront は HTTP ステータスコード 403 (Forbidden) をユーザーに返します。

オプションで、ユーザーにカスタムエラーメッセージを返すよう CloudFront を設定することも、リクエストされたファイルに関するエラーレスポンスを CloudFront でキャッシュしておく時間の長さを指定することもできます。デフォルト値は 10 秒です。詳細については、「特定の HTTP ステータスコードに対応するカスタムエラーページの作成」を参照してください。

地域制限はディストリビューション全体に適用されます。コンテンツのある部分に特定の制限を適用し、コンテンツの別の部分に別の制限を適用する (または制限を適用しない) 必要がある場合は、別々の CloudFront ディストリビューションを作成するか、サードパーティーの位置情報サービスを使用する必要があります。

CloudFront の標準ログ (アクセスログ) を有効にすると、sc-status (HTTP ステータスコード) の値が 403 であるログエントリを検索することによって、CloudFront で拒否されたリクエストを特定できます。ただし、標準ログだけでは、ユーザーのいる場所に基づいて CloudFront が拒否したリクエストと、別の理由でファイルへのアクセス許可がユーザーになかったために CloudFront が拒否したリクエストとを区別することができません。Digital Element や MaxMind などサードパーティーの位置情報サービスを利用している場合は、アクセスログの c-ip (クライアント IP) 列にある IP アドレスに基づいてリクエストの場所を識別できます。CloudFront の標準ログの詳細については、標準ログ (アクセスログ) の設定および使用 を参照してください。

次の手順では、CloudFront コンソールを使用して、地域制限を既存のディストリビューションに追加する方法を説明します。コンソールを使用してディストリビューションを作成する方法の詳細については、「ディストリビューションの作成」を参照してください。

CloudFront ウェブディストリビューション (コンソール) に地域制限を追加するには

  1. AWS Management Console にサインインし、https://console.aws.amazon.com/cloudfront/v3/home で CloudFront コンソールを開きます。

  2. 更新するディストリビューションを選択します。

  3. [Geographic restrictions] (地域制限) を選択します。

  4. [Edit] を選択します。

  5. 許可した国のリストを作成する場合は、許可リスト、またはブロックした国のリストを作成する場合は、ブロックリストを作成します。

  6. 目的の国をリストに追加し、[Save changes] (変更の保存) を選択します。

サードパーティーの位置情報サービスの使用

CloudFront の地域制限機能を使用すると、特定のウェブディストリビューションで配信するすべてのファイルについて、コンテンツのディストリビューションを国レベルで制御できます。地域制限が国境と一致していない場合や、特定のディストリビューションより配信するファイルの一部のみにアクセスを制限する必要がある場合は、CloudFront とサードパーティーの位置情報サービスを組み合わせることができます。これにより、国だけではなく、都市、郵便番号、または緯度/経度に基づいてコンテンツへのアクセスを制御できます。

サードパーティーの位置情報サービスを使用する場合は、有効期限の日時を指定できる CloudFront 署名付き URL を使用することをお勧めします。有効期限を経過すると、この URL は無効になります。さらに、オリジンとして Amazon S3 バケットを使用することをお勧めします。CloudFront オリジンアクセスアイデンティティを使用することで、オリジンのコンテンツへのユーザーによる直接アクセスを回避できるためです。署名付き URL とオリジンアクセスアイデンティティの詳細については、「署名付き URL と署名付き Cookie を使用したプライベートコンテンツの提供」を参照してください。

以下のステップは、サードパーティーの位置情報サービスを使用してファイルへのアクセスを制御する方法を説明しています。

サードパーティーの位置情報サービスを使用して CloudFront ディストリビューション内のファイルへのアクセスを制限するには

  1. 位置情報サービスのアカウントを取得します。

  2. コンテンツを Amazon S3 バケットにアップロードします。

  3. プライベートコンテンツを供給できるように Amazon CloudFront と Amazon S3 を設定します。詳細については、「署名付き URL と署名付き Cookie を使用したプライベートコンテンツの提供」を参照してください。

  4. 以下の処理を行うようにウェブアプリケーションを記述します。

    • 各ユーザーリクエストの IP アドレスを位置情報サービスに送信します。

    • 位置情報サービスからの戻り値を評価し、ユーザーの場所が CloudFront によるコンテンツの配信先に該当するかどうかを判別します。

    • コンテンツをユーザーの場所に配信する場合、CloudFront コンテンツの署名付き URL を生成します。コンテンツをその場所に配信しない場合、HTTP ステータスコード 403 (Forbidden) をユーザーに返します。または、カスタムエラーメッセージが返されるように CloudFront を設定することもできます。詳細については、「特定の HTTP ステータスコードに対応するカスタムエラーページの作成」を参照してください。

    詳細については、使用する位置情報サービスのドキュメントを参照してください。

ウェブサーバー変数を使用すると、ウェブサイトを訪れたユーザーの IP アドレスを取得できます。次の点に注意してください。

  • ウェブサーバーがインターネットにロードバランサー経由で接続されていない場合、ウェブサーバー変数を使用してリモート IP アドレスを取得できます。ただし、この IP アドレスが必ずしもユーザーの IP アドレスであるとは限りません。ユーザーのインターネットへの接続方法によっては、プロキシサーバーの IP アドレスである可能性もあります。

  • ウェブサーバーがインターネットにロードバランサー経由で接続されている場合、ウェブサーバー変数には、ユーザーの IP アドレスではなく、ロードバランサーの IP アドレスが含まれる可能性があります。この構成では、X-Forwarded-For HTTP ヘッダーに含まれる最後の IP アドレスを使用することをお勧めします。通常、このヘッダーには複数の IP アドレスが含まれており、そのほとんどはプロキシまたはロードバランサーの IP アドレスです。ユーザーの地理的な場所に関連付けられている可能性が最も高い IP アドレスは、リストの最後にある IP アドレスです。

ウェブサーバーがロードバランサーに接続されていない場合は、IP アドレスのスプーフィングを回避するために、X-Forwarded-For ヘッダーではなくウェブサーバー変数を使用することをお勧めします。