本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「[AWS]Amazon CloudFront による特定の国からのアクセス制御を検証してみた」を再編集したものです。
こんにちは、株式会社FIXERの村上滉樹です。
Webサービスを提供するときにアクセス元を、日本限定に絞りたい時があります。例えば、ECサイトなどで商品の配送先を日本国内に限定したり、配信コンテンツの利用規約が日本国内に限定されていたりとサイトへのアクセス制御が必要なときがあります。
本ブログでは、Amazon CloudFront(以下、CloudFront)を利用して、特定の国からのアクセスをフィルタリングし、想定以外のトラフィック要求を拒否できるのか検証してみます。
いきなり結論
CloudFrontのGeographic Restrictions機能を利用します。
・CloudFront ディストリビューションの地理的制限を導入する
・[公式] Using CloudFront geographic restrictions
地理的制御には、「許可リスト」と「ブロックリスト」の制御方法があります。
前提条件
・CloudFront + Webアプリ(S3やFargateなど)の構成を用意します。
本ブログでは CloudFront + S3(静的コンテンツ)の構成で検証します。
設定方法
▼パターン1. 地理的制御(許可リスト)を導入してみる
CloudFront コンソールにアクセスし、対象の[ディストリビューション]を選択します。
[セキュリティ] のCloudFront geographic restrictionsから「許可リスト」を押下し、トラフィック要求を許可したい国を選択します。
「変更を保存」をポチッと押した後、下記の設定になっていることを確認します。設定は以上です。
▼パターン2. 地理的制御(ブロックリスト)を導入してみる
設定手順は、パターン1と変わりません。制御タイプを[ブロックリスト]にし、日本以外のトラフィック要求を拒否してみます。
検証結果
本ブログでは、海外からのアクセス元として Azure 仮想マシンを米国西部(カリフォルニア)で構築して検証しています。
▼パターン1(許可リスト)
・日本からのアクセス
自宅からアクセスできました(日本在籍)。許可リストに含まれている国なので、想定どおりの振る舞いをしましたね。
・海外からのアクセス
アクセス拒否されました。エラーメッセージにも「Amazon CloudFront ディストリビューションは、あなたの国からのアクセスをブロックするように設定されています。現時点では、このアプリまたは Web サイトのサーバーに接続できません。」と表記があるため、想定どおりの振る舞いをしましたね。
【原文】
The Amazon CloudFront distribution is configured to block access from your country. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
▼パターン2 (ブロックリスト)
・日本からのアクセス
アクセスできました。(以下略)
・海外からのアクセス
アクセス拒否されました。(以下略)
公式ドキュメントを確認してみた
CloudFrontのドキュメント(2024年1月時点)には、アクセス元を100% 制御できるわけではなく、99.8%の精度と語っています。これは、CloudFrontに採用されている地理的制御のソフトウェアに依存しているように見えます。ソフトウェア内のDBには、各国ごとに割り当てられているグローバルIPアドレスをすべてマッピングできてないため、その漏れたIPアドレスからのアクセスは制御されないためです。
CloudFront determines the location of your users by using a third-party database. The accuracy of the mapping between IP addresses and countries varies by Region. Based on recent tests, the overall accuracy is 99.8%.
また、CloudFrontはアクセス元の地域が不明な場合、コンテンツへのアクセスを許可する振る舞いを覚えときましょう!
If CloudFront can’t determine a user’s location, CloudFront serves the content that the user has requested.
上記の詳細は、クラスメソッド様のDevelopersIOで紹介されていました。
・「コンテンツ配信の地域制限」回避方法をググる前に読む記事
さいごに
最後までご愛読ありがとうございます!
今回はCloudFrontの地域制御について検証しました。検証を通じて分かったことは、地理的制御を設定したとしても、必ずしも海外在住のユーザーのアクセスを制御するわけではないということです。私のように中継サーバを海外に建てることでアクセスが可能になる場合もあります。
また、CloudFrontにはアクセス元が不明な場合、コンテンツのアクセスを許可してしまう制約も存在します。日本以外からのアクセス状況をCloudFrontのリソースログから取得・保存することが必要なシナリオにおいて、考慮すべき点かもしれません。
ログ設計を担当するエンジニアの方々は、この点についても詳細に精査することをお勧めします!!
村上 滉樹/FIXER
株式会社FIXER|名古屋事業所 所属
2020年4月 新卒入社
職業:Cloud Solutions Engineer(インフラ関連)
この連載の記事
-
TECH
ヘルプデスク担当者が「Amazon Q in Connect」のすごさを分析する -
TECH
初心者向け:RDSスナップショットを別のAWSアカウントで復元する手順 -
TECH
AWS CDKとGitHubを使ったIaC=インフラ構成管理の基本 -
TECH
同世代エンジニアに刺激を受けた!JAWS-UG「若手エンジニア応援LT会」参加レポート -
TECH
AWS CDKでGuardDutyのRDS保護を有効化しよう(として詰みかけた話) -
TECH
ノーコードで生成AI連携! SlackからAmazon Bedrockのエージェントに質問 -
TECH
Terraform:変数の値が未代入でもインタラクティブな入力を回避する方法 -
TECH
Amazon SESでEメールの送信機能/受信機能を作る手順 -
TECH
Amazon BedrockからWeb上のコンテンツを参照する新機能「Web Crawler」 -
TECH
IAMユーザーのアクセスキーを使わず「IAMロール」を使うべき理由 -
TECH
CX視点で興味深かった「AWS Summit Japan 2024」のセッション - この連載の一覧へ