はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- 必須S3バケットの作成、CloudFrontディストリビューションの作成経験
- あると良いS3を使ったシンプルな静的サイト配信の経験
※ このハンズオンは すべてコンソールだけで完結します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
コンテンツによっては、特定の国・地域からのアクセスだけを許可したい、あるいは特定の国・地域からのアクセスだけを拒否したい、という要件があります(例:配信地域が限定されているコンテンツ、特定地域からの不審なアクセスを遠ざけたい場合など)。CloudFrontには、こうした要件に応える「地理的制限(ジオ制限)」という機能があります。
地理的制限には、許可する国だけを指定する「アローリスト」と、拒否する国だけを指定する「ブロックリスト」の2つの方式があります。今回はブロックリスト方式を使い、自分が今いる国をあえてブロックリストに加えることで、実際に403エラーで拒否される様子を体験します。その後ブロックを解除し、再びアクセスできる状態に戻します。
VPNを使ってアクセス元の国を偽装すれば、ジオ制限は回避できるの?
CloudFrontの地理的制限は、リクエスト元のIPアドレスをもとに国を判定しています。VPNなどでIPアドレスが変わると、判定される国も変わる可能性があります。完全な対策ではなく、IPアドレスの位置情報に基づく大まかな地域単位の制御である、という理解が大切です。
自分の国を本当にブロックして大丈夫なの?
検証目的で、今回作成した学習用のディストリビューションを一時的にブロックするだけなら問題ありません。ただし本番運用中のディストリビューションで誤って設定すると、想定していない利用者がアクセスできなくなるため、本番環境では十分注意して確認してから反映する必要があります。
CloudFrontディストリビューションの地理的制限(ブロックリスト)に自分のいる国を追加し、アクセスすると403エラーで拒否されることを確認したうえで、設定を解除して再びアクセスできることを確認する。
つくる構成
同じCloudFrontディストリビューションのまま、地理的制限の設定だけを変えて、アクセスできるかどうかを比較します。
どの国からでもアクセスできる
自分の国だけアクセスできない
※ オリジンの設定は変更していません。CloudFrontの地理的制限の設定だけを切り替えています。
要件
以下の要件を満たし、「アクセスできる」→「拒否される」→「解除して戻る」という変化を確認してください。
| No | 要件 |
|---|---|
| 1 | S3バケットを1つ作成し(東京リージョン、名前は一意に、例:cf-geo-demo-yourname)、シンプルなページを公開する。このバケットをオリジンにしたCloudFrontディストリビューションを作成する。 |
| 2 | CloudFrontのドメイン名にアクセスし、ページが表示されることを確認する。 |
| 3 | 地理的制限の設定で、方式を「ブロックリスト」にし、自分が現在いる国を追加する。 |
| 4 | 設定反映後にアクセスし、403エラー(CloudFrontの拒否ページ)が返ることを確認する。 |
| 5 | ブロックリストから自国を削除(または地理的制限を「なし」に戻す)し、再度アクセスに成功することを確認する。 |
構築の進め方
「配信を作る」→「制限を設定する」→「拒否されることを確認する」→「解除して戻す」という順番で進めます。
- フェーズ1 — シンプルな配信を用意する
-
マネジメントコンソールにサインインし、リージョンを合わせる
ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。
-
S3バケットを作成し、シンプルなページを公開する
S3コンソールでバケットを1つ作成します(名前は一意に、例:
cf-geo-demo-yourname)。「パブリックアクセスをブロック」を解除し、index.htmlをアップロードして、s3:GetObjectをPrincipal: *に許可するバケットポリシーを設定します。 -
CloudFrontディストリビューションを作成する
CloudFrontコンソールで「ディストリビューションを作成」を選び、オリジンに手順2のバケットを指定します(オリジンアクセスは「パブリック」のままで構いません)。デプロイ完了後、ドメイン名にアクセスしてページが表示されることを確認します。
- フェーズ2 — 地理的制限を設定する
-
地理的制限を編集する
ディストリビューションの詳細画面で「制限」タブを開き、「地理的制限」を編集します。制限のタイプを「ブロックリスト」に設定します。
-
自分がいる国をブロックリストに追加する
国の一覧から、現在自分がいる国(例:日本)を選んで追加し、保存します。
反映には数分かかる設定を保存しても、すぐには反映されません。ディストリビューションのステータスが「デプロイ済み」に戻るまで、少し待ちましょう。
- フェーズ3 — 拒否されることを確認する
-
もう一度CloudFrontのドメイン名にアクセスする
反映が完了したら、同じドメイン名にアクセスします。403エラーのページが表示されることを確認します。
これが「ケース2」の状態さきほどまで表示できていたページが、今度はアクセスできなくなります。これが地理的制限によるブロックの効果です。
- フェーズ4 — 解除して戻す
-
ブロックリストから自国を削除する
「制限」タブに戻り、地理的制限の設定を編集して、追加した国を削除します(制限のタイプを「なし」に戻しても構いません)。
-
再度アクセスできることを確認する
反映完了後、もう一度ドメイン名にアクセスします。
これがゴール403エラーになっていたページが、今度は再び表示される——この変化を確認できたら、このハンズオンの目的は達成です。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直すか」の手がかりとして使ってください。
「ブロックリストに追加したのに、まだ見える」
CloudFrontの設定変更が全世界のエッジロケーションに反映されるまで、数分程度かかることがあります。ディストリビューションのステータスが「デプロイ済み」に戻っているかを確認しましょう。
「自国を追加したのに、まだアクセスできてしまう」
会社のネットワークや一部のモバイル回線などでは、実際の所在地と異なる国として判定される場合があります。判定はリクエスト元のIPアドレスに基づいている、という前提を踏まえて見直しましょう。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。
- 地理的制限の設定がない状態で、CloudFrontのドメイン名にアクセスして成功した。
- ブロックリストに自国を追加し、反映後にアクセスすると403エラーが返る。
- ブロックリストから自国を削除(または「なし」に戻した)後、再度アクセスに成功する。
- 「制限」タブで、現在の地理的制限の設定内容(タイプと国のリスト)を確認できる。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- アローリスト方式とブロックリスト方式、それぞれどんな場面で使うと管理しやすいでしょうか。
ヒント
許可したい国の数と、拒否したい国の数、どちらが少なく済みそうかで考えてみましょう。「世界中に配信したいが一部の国だけ除外したい」場合と、「特定の国だけに配信したい」場合の違いがヒントです。 - ジオ制限はIPアドレスの位置情報に基づく大まかな制御です。より確実にアクセスを制御したい場合、他にどのような仕組みと組み合わせるとよさそうでしょうか。
ヒント
IPアドレス単位の制御や、署名付きURL・署名付きクッキーによる認証など、地理的制限以外のアクセス制御の仕組みと組み合わせる、という方向性で考えてみましょう。 - 本番運用中のディストリビューションで地理的制限を変更する場合、どのように確認してから反映すると安全でしょうか。
ヒント
本番に反映する前に、別のテスト用ディストリビューションで同じ設定を試す、影響を受ける利用者の範囲を事前に把握しておく、といった準備が考えられます。
後片づけ
作成したリソースを順番に削除します。
- CloudFrontディストリビューションを無効化する:ディストリビューションを選び、「無効化」を実行します。
- 無効化が完了したらディストリビューションを削除する:状態が「無効」になったら削除します。
- S3バケットを空にして削除する:バケットの中のオブジェクトをすべて削除してから、バケット本体を削除します。
削除前に、ブロックリストの設定を解除したことを確認する
ディストリビューションを削除する前提であれば大きな問題はありませんが、検証目的で他のディストリビューションに同じような制限を試す場合は、不要になった制限を都度解除し忘れないようにしましょう。
コストに関する注意: 地理的制限の設定そのものに追加料金はかかりません。CloudFrontのデータ転送・リクエストには通常の料金がかかりますが、無料利用枠の対象になる範囲もあります。S3の保存容量・リクエストにも別途料金がかかりますが、少量であれば無料利用枠の範囲内に収まることが多いです。検証が終わったら、上の「後片づけ」に沿って忘れずに削除しましょう。最新の料金は AWS の公式料金ページで確認してください。