はじめに
AWS上で構築しているサイトへのアクセスを国内のみに制限したいという要望があります。どのような方法があるか調べてみたのでまとめてみました。まだ調べはじめたばかりなので、実績等は今後できたら追加したいとおもいます。
Route53の Geolocation Routingを使う
Route53にはGeolocation Routingという機能があります。これを使うことで国単位(もっと細かい単位も可能)で振り分けができます。具体的な手順はこちらによくまとまっています。
こちらをつかって、日本であれば正しいサイト、日本以外はソーリーページを表示するということが出来ます。
CloudFrontのGeo Restrictionを使う
AWSのドキュメントにそのものずばりの「コンテンツの地理的ディストリビューションの制限」というページがあります。
CloudFront は、サードパーティーの GeoIP データベースを使用して、ユーザーがいる場所を判別します。IP アドレスと国とのマッピングの正確さは、リージョンによって異なります。最近のテストによれば、AWS での全体的な正確性は 99.8% です
とのことです。Route53と同じデータベースを利用しているかは、不明です。
APNIC、JPNICより日本に割り当てられているIPを取得し、.htaccessに設定する。
Webサーバー側で対処する方法ですね。
こちらに方法がまとまっていました。
IPアドレスのリストは以下から取得できます。
http://ftp.apnic.net/stats/apnic/
https://www.nic.ad.jp/ja/ip/list.html
GeoIPデータベースを検索するモジュールを追加する
こちらもWebサーバー側になります。
GeoIPで検索すると一番に出てくるmaxmind社からApacheモジュールが提供されています。
PHPのGEO IPモジュールもあります。
まとめ
国内にアクセス制限をかけるための4つの方法を紹介しました。
最初の二つ(特にCloudFrontのGeo Restriction)は簡単に実現でき、地理IPデータベースの管理もいらず、費用もかからないので、第一選択肢になるかとおもいます。
Webサーバー側で行なう場合は、精度が必要な場合です。CFのGeo Restrictionで99.8%という数字がありましたが、過去に制限をおこなった人の話ですと、国内なのに見えない、海外なのに見えるということはどうしても発生するようです。チューニングをしたい場合は自分のWebサーバー内で実施する方法になります。
他にも方法があるようでしたら教えてください。
ではでは。