implの藤谷です。
cloudflontを利用したawsネットワークにアクセスできるコンピュータやVPNのIPを制限したり、特定の国からのアクセスを制限する方法を解説します。
ユースケース
この機能を必要とするケースは、下記のようなものが考えられます。
- テスト用ドメインにcname登録されたcloudflontに、関係する開発者しかアクセスできないようにする。
- サービスの仕様上、特定地域のみからのアクセスを許可する
もしくは、特定地域からのアクセスを拒否する
CloudFlont distributionの確認
テスト用のディストリビューションを作成します。
cloudflontのoriginにalbを設定し、ec2内のnext.jsにアクセスできるようになっています。

cloudflontのドメインにアクセス

WAFを利用したIP制限
IP sets
下記、IP setsリソース作成手順
- WAFの「IP sets」に移動
- Create IP setをクリックし、制限したいIPを設定してリソースを作成(今回は検証の為、自身のIPを設定)
- リソースを確認


Web ACLs
下記、Web ACLsリソース作成手順
- Web ACLsに移動
- Create web ACLをクリックしてリソース作成
下記、重要な設定
・name
・RulesからRule typeにIP setを選択し、IP setsで作成したリソースを設定
・Default web ACL action for requests that don’t match any rules
↓
ホワイトリストの場合はAllow、ブラックリストの場合はBlock
IP制限確認
cloudflontに戻って先程nextにアクセスしたドメインに際アクセスします。
IP制限が機能して403のアクセス不可画面が表示されており、成功です。

地理的制限
次に、地理的制限によるアクセスコントロールを行います。
cloudflontのメニューから「地理的制限」を選んで編集をクリックすると、許可とブロックに分けて国を選択することができます。
今回は自身が見えなくなる検証を行うのでブロックリストで「日本」を選択します。

設定後のcloudflontドメインアクセスでは、下記の403が表示されます。
「block access from your country」の記述があり、国で制限がかかっていることがわかります。

最後に、地理的制限を外してcloudflontからec2のnextにアクセスできることを確認します。

終わりに
今回は以上になります。
ここまで読んで頂き、ありがとうございました。