Amazon CloudFront
開発者ガイド (API バージョン 2016-09-29)

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

地域制限 (地理的ブロッキング) を使用すると、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 がキャッシュする時間を指定することもできます (デフォルト値は 5 分)。詳細については、「特定の HTTP ステータスコードのカスタムエラーページを作成する」を参照してください。

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

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

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

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

  1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/cloudfront/ にある、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 (禁止) をユーザーに返します。または、カスタムエラーメッセージが返されるように CloudFront を設定することもできます。詳細については、「特定の HTTP ステータスコードのカスタムエラーページを作成する」を参照してください。

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

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

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

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

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