アクセス元の地域によってアクセスを制限したり、表示するサイトあるいはサーバを変えたい時があります。クライアントがサーバに来るまでのどの段階でルーティングするかによって方法が複数あります。ここでは最も上流のDNS名前解決時に割り振る方法を紹介します。
Route53なら日本だけ名前解決させるというようなルーティングが可能
AWSのDNSサービス・Route53ではアクセス元の地理情報を元にトラフィックをルーティングする位置情報ルーティングをサポートしています。
日本からDNS問い合わせがあった場合のみクエリを返したり、国別でアクセス先のサーバを変えたりできます。
route53 地理的近接性ルーティング: https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/routing-policy-geoproximity.html
クライアントがサーバに至るまでの間で国内のみに制限する方法はいくつかありますが、route53は最上流の部分で高度に分散化しており、オリジンサーバ側でアクセス制限をかけるよりもサービスに与える負荷が少ないと考えられます。
route53では細かく設定をカスタマイズすることはできませんが簡単に設定ができるので特に細かいサービス影響を考える必要がない場合には有用だと思います。
route53で国内のみに制限する
route53で該当のホストゾーンを選択していつも通りにレコードを登録するところまで行きます。
ルーティングポリシーの部分でシンプルから位置情報に変更し、出てきた「場所」で日本を選択します・レコードIDは識別しやすい一意の文字列を入力します。
これで保存すると設定完了です。
実際にアメリカからアクセスした場合と日本からアクセスした場合を比べてみるとUSでは名前解決できていませんが、日本だとできており、アクセス可能でした。
・US
$ curl -iL http://www.example.com
curl: (6) Could not resolve host: www.example.com; 不明なエラー
・JP
curl -iL http://www.example.com
HTTP/1.1 200 OK
こんなに簡単に国内に制限できるとなるとうまく利用していきたいですね。
長期的に運用していくサービスであれば拒否リスト方式で問題のあるIP帯を随時継ぎ足して熟成して行くのも手ですがバッサリと日本国内に制限するのであればroute53が圧倒的に楽な印象です。
CNAMEはDNSの制約上複数のレコードが追加できませんが、Aレコードであれば地域によって向き先のサーバを変えるというようなこともできます。
・北米
www.example.com. cname 192.168.0.2
・日本
www.example.com. cname 192.168.0.23