← ハンズオン一覧に戻る

AWS Hands-on / Content Delivery

特定の国だけに、コンテンツを届ける(届けない)

CloudFrontの地理的制限(ジオ制限)を使い、特定の国・地域からのアクセスを拒否します。自分がいる国を一時的にブロックリストに加え、実際に403エラーで拒否される様子と、解除後にアクセスできる状態に戻る様子を体験します。

● Lv.2 基本的なリソースを作れる人 ⏱ 所要 35〜55 分 コンソールのみで完結
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須S3バケットの作成、CloudFrontディストリビューションの作成経験
  • あると良いS3を使ったシンプルな静的サイト配信の経験

※ このハンズオンは すべてコンソールだけで完結します

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

コンテンツによっては、特定の国・地域からのアクセスだけを許可したい、あるいは特定の国・地域からのアクセスだけを拒否したい、という要件があります(例:配信地域が限定されているコンテンツ、特定地域からの不審なアクセスを遠ざけたい場合など)。CloudFrontには、こうした要件に応える「地理的制限(ジオ制限)」という機能があります。

地理的制限には、許可する国だけを指定する「アローリスト」と、拒否する国だけを指定する「ブロックリスト」の2つの方式があります。今回はブロックリスト方式を使い、自分が今いる国をあえてブロックリストに加えることで、実際に403エラーで拒否される様子を体験します。その後ブロックを解除し、再びアクセスできる状態に戻します。

VPNを使ってアクセス元の国を偽装すれば、ジオ制限は回避できるの?

CloudFrontの地理的制限は、リクエスト元のIPアドレスをもとに国を判定しています。VPNなどでIPアドレスが変わると、判定される国も変わる可能性があります。完全な対策ではなく、IPアドレスの位置情報に基づく大まかな地域単位の制御である、という理解が大切です。

自分の国を本当にブロックして大丈夫なの?

検証目的で、今回作成した学習用のディストリビューションを一時的にブロックするだけなら問題ありません。ただし本番運用中のディストリビューションで誤って設定すると、想定していない利用者がアクセスできなくなるため、本番環境では十分注意して確認してから反映する必要があります。

Goal

CloudFrontディストリビューションの地理的制限(ブロックリスト)に自分のいる国を追加し、アクセスすると403エラーで拒否されることを確認したうえで、設定を解除して再びアクセスできることを確認する。

04 — Architecture

つくる構成

同じCloudFrontディストリビューションのまま、地理的制限の設定だけを変えて、アクセスできるかどうかを比較します。

ケース1 — 制限なし

どの国からでもアクセスできる

🌍 自分のいる国 ⚡ CloudFront(制限なし) 🪣 コンテンツ表示
アクセスに成功する
ケース2 — ブロックリストに自国を追加

自分の国だけアクセスできない

🌍 自分のいる国 ⚡ CloudFront(403で拒否) ✕
403エラーが返る

※ オリジンの設定は変更していません。CloudFrontの地理的制限の設定だけを切り替えています。

05 — Requirements

要件

以下の要件を満たし、「アクセスできる」→「拒否される」→「解除して戻る」という変化を確認してください。

No要件
1S3バケットを1つ作成し(東京リージョン、名前は一意に、例:cf-geo-demo-yourname)、シンプルなページを公開する。このバケットをオリジンにしたCloudFrontディストリビューションを作成する。
2CloudFrontのドメイン名にアクセスし、ページが表示されることを確認する。
3地理的制限の設定で、方式を「ブロックリスト」にし、自分が現在いる国を追加する。
4設定反映後にアクセスし、403エラー(CloudFrontの拒否ページ)が返ることを確認する。
5ブロックリストから自国を削除(または地理的制限を「なし」に戻す)し、再度アクセスに成功することを確認する。
06 — Steps

構築の進め方

「配信を作る」→「制限を設定する」→「拒否されることを確認する」→「解除して戻す」という順番で進めます。

  1. フェーズ1 — シンプルな配信を用意する
  2. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。

  3. S3バケットを作成し、シンプルなページを公開する

    S3コンソールでバケットを1つ作成します(名前は一意に、例:cf-geo-demo-yourname)。「パブリックアクセスをブロック」を解除し、index.htmlをアップロードして、s3:GetObjectPrincipal: *に許可するバケットポリシーを設定します。

  4. CloudFrontディストリビューションを作成する

    CloudFrontコンソールで「ディストリビューションを作成」を選び、オリジンに手順2のバケットを指定します(オリジンアクセスは「パブリック」のままで構いません)。デプロイ完了後、ドメイン名にアクセスしてページが表示されることを確認します。

  5. フェーズ2 — 地理的制限を設定する
  6. 地理的制限を編集する

    ディストリビューションの詳細画面で「制限」タブを開き、「地理的制限」を編集します。制限のタイプを「ブロックリスト」に設定します。

  7. 自分がいる国をブロックリストに追加する

    国の一覧から、現在自分がいる国(例:日本)を選んで追加し、保存します。

    反映には数分かかる

    設定を保存しても、すぐには反映されません。ディストリビューションのステータスが「デプロイ済み」に戻るまで、少し待ちましょう。

  8. フェーズ3 — 拒否されることを確認する
  9. もう一度CloudFrontのドメイン名にアクセスする

    反映が完了したら、同じドメイン名にアクセスします。403エラーのページが表示されることを確認します。

    これが「ケース2」の状態

    さきほどまで表示できていたページが、今度はアクセスできなくなります。これが地理的制限によるブロックの効果です。

  10. フェーズ4 — 解除して戻す
  11. ブロックリストから自国を削除する

    「制限」タブに戻り、地理的制限の設定を編集して、追加した国を削除します(制限のタイプを「なし」に戻しても構いません)。

  12. 再度アクセスできることを確認する

    反映完了後、もう一度ドメイン名にアクセスします。

    これがゴール

    403エラーになっていたページが、今度は再び表示される——この変化を確認できたら、このハンズオンの目的は達成です。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直すか」の手がかりとして使ってください。

Pitfall 01 — 設定したのにすぐにはブロックされない

「ブロックリストに追加したのに、まだ見える」

CloudFrontの設定変更が全世界のエッジロケーションに反映されるまで、数分程度かかることがあります。ディストリビューションのステータスが「デプロイ済み」に戻っているかを確認しましょう。

Pitfall 02 — 想定と違う国として判定される

「自国を追加したのに、まだアクセスできてしまう」

会社のネットワークや一部のモバイル回線などでは、実際の所在地と異なる国として判定される場合があります。判定はリクエスト元のIPアドレスに基づいている、という前提を踏まえて見直しましょう。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。

  • 地理的制限の設定がない状態で、CloudFrontのドメイン名にアクセスして成功した。
  • ブロックリストに自国を追加し、反映後にアクセスすると403エラーが返る。
  • ブロックリストから自国を削除(または「なし」に戻した)後、再度アクセスに成功する。
  • 「制限」タブで、現在の地理的制限の設定内容(タイプと国のリスト)を確認できる。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. アローリスト方式とブロックリスト方式、それぞれどんな場面で使うと管理しやすいでしょうか。
    ヒント
    許可したい国の数と、拒否したい国の数、どちらが少なく済みそうかで考えてみましょう。「世界中に配信したいが一部の国だけ除外したい」場合と、「特定の国だけに配信したい」場合の違いがヒントです。
  2. ジオ制限はIPアドレスの位置情報に基づく大まかな制御です。より確実にアクセスを制御したい場合、他にどのような仕組みと組み合わせるとよさそうでしょうか。
    ヒント
    IPアドレス単位の制御や、署名付きURL・署名付きクッキーによる認証など、地理的制限以外のアクセス制御の仕組みと組み合わせる、という方向性で考えてみましょう。
  3. 本番運用中のディストリビューションで地理的制限を変更する場合、どのように確認してから反映すると安全でしょうか。
    ヒント
    本番に反映する前に、別のテスト用ディストリビューションで同じ設定を試す、影響を受ける利用者の範囲を事前に把握しておく、といった準備が考えられます。
10 — Clean up

後片づけ

作成したリソースを順番に削除します。

  1. CloudFrontディストリビューションを無効化する:ディストリビューションを選び、「無効化」を実行します。
  2. 無効化が完了したらディストリビューションを削除する:状態が「無効」になったら削除します。
  3. S3バケットを空にして削除する:バケットの中のオブジェクトをすべて削除してから、バケット本体を削除します。
Caution — 地理的制限の設定を残したまま放置しない

削除前に、ブロックリストの設定を解除したことを確認する

ディストリビューションを削除する前提であれば大きな問題はありませんが、検証目的で他のディストリビューションに同じような制限を試す場合は、不要になった制限を都度解除し忘れないようにしましょう。

コストに関する注意: 地理的制限の設定そのものに追加料金はかかりません。CloudFrontのデータ転送・リクエストには通常の料金がかかりますが、無料利用枠の対象になる範囲もあります。S3の保存容量・リクエストにも別途料金がかかりますが、少量であれば無料利用枠の範囲内に収まることが多いです。検証が終わったら、上の「後片づけ」に沿って忘れずに削除しましょう。最新の料金は AWS の公式料金ページで確認してください。