はじめに
Webシステムなどでは、国内のみのアクセスに制限したい、特定の国からのアクセスは制限したいといった要件があったりするかと思います。
国単位のアクセス制限は色んな方法で行うことができますが、AWS WAFを使えばとても簡単に実装することができるので、試してみました。
設定方法
AWSマネージメントコンソールのAWS WAFから、制限の設定を行いたいWeb ACLsから「Rules」タブを開き、「Add rules」の「Add my own rules and rule groups」を選択する。
「Rule Type」:Rule builder
「Name」 :任意
「Type」 :Regular rule
「If a request」 :matches the statement
「Inspect」 :Originates from a country in
「Country codes」 :任意(制限したい国コードを選択※複数選択可)
「Action」 : Block
※上記例は日本からのアクセスを遮断する場合の設定
※特定の国からのアクセスのみ許可したい場合は、Default web ACL actionをBlockにして、上記ActionをAllowに設定する
上記項目を入力して保存すると、タイミングにもよりますが、1分程度で設定が反映されます。(即時ではないので慌てないこと)
動作確認
該当AWS WAFを適用しているCloudFrontやALB配下にあるコンテンツに、制限した国のIPからアクセスしてみます。
■制限設定前
■制限設定後
適切に設定されている場合は、403が返されるようになります。
まとめ
CloudFrontを利用している場合は、地理的制限設定で同様のアクセス制限を設定することができます。CloudFrontで国単位のアクセス制限をかけてみた
ALB+EC2構成などの場合に、簡単に国単位のアクセス制限をしたい場合には、今回のようなAWS WAFを使った実装がお勧めです。
サーバ側(EC2など)でGeoIPやhtaccess、iptablesなどを組み合わせて実装することもできますが、
運用も大変になるため、コスト的な余裕があるのであれば導入を検討してみるのも良いと思います。