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

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

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

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

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

CloudFront の地理制限の使用

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

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

  • 禁止された国のブラックリストに含まれているいずれかの国にユーザーがいる場合、コンテンツへのアクセスを禁止する。

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

注記

CloudFront は、サードパーティーの GeoIP データベースを使用して、ユーザーがいる場所を判別します。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 マネジメントコンソールにサインインし、CloudFront コンソール (https://console.aws.amazon.com/cloudfront/) を開きます。

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

  3. [Distribution Settings (ディストリビューション設定)] ペインで、[Restrictions (制限)] タブを選択します。

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

  5. 適切な値を入力します。詳細については、「制限」 を参照してください。

  6. [Yes, Edit (はい、編集します)] を選択します。

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

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

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

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

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

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

  2. Amazon Simple Storage Service (S3) バケットにコンテンツをアップロードします。詳細については、Amazon S3 のドキュメント参照してください。

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

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

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

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

    3. コンテンツをユーザーの場所に配布する場合、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 ヘッダーではなくウェブサーバー変数を使用することをお勧めします。