AWS WAF の WebACL を使って日本以外からのアクセスをブロックする方法
はじめに
久しぶりに AWS WAF のコンソールを見てみたところ、UI がかなり変わっており、WebACL の作成に手間取りました...。
ということで今回は、次の 2 点についてまとめてみました。
・ 新しい UI での、日本以外からのアクセスをブロックする WebACL の作成方法
・ CloudShell を使用した国別からのアクセスの動作確認方法
事前準備
今回は、WebACL の保護対象として、Application Load Balancer (以降、ALB)を使用します。
ALB の後ろにはターゲットグループがあり、Apache をインストールした EC2 が稼働しています。
WebACL の作成
以下の手順で、WebACL を作成します。
AWS 公式ドキュメントはこちらです。
AWS WAF で保護パック (ウェブ ACL) を作成する - AWS WAF、AWS Firewall Manager、AWS Shield Advanced、および AWS Shield ネットワークセキュリティディレクター
-
保護するリソースとして、テスト用に作成した ALB を選択します。

-
初期の保護として、今回は「AWS WAF が提供するすべての保護から独自のパックを構築」 を選択します。
※ 現在では、WebACL 作成時に、セキュリティのベストプラクティスに基づいた保護パッケージが選択できるようです!

-
右にパネルが表示されるので、「カスタムルール」 を選択し 「次へ」、「地域ベースのルール」 を選択し 「次へ」 を押下します。

-
日本以外からのアクセスをブロックするルールを設定し、「ルールを追加」 を押下します。アクションが 「Block」 の場合、「ステートメントを否定します(NOT)」 にチェックを入れましょう。チェックがないと、日本からのアクセスだけブロックされます。

-
今回は、日本からアクセス以外がブロックされているかをログでも確認したいので、ログ記録送信先のタイプとして 「CloudWatch Logs」 を選択し、検証用に作成したロググループを選択します。最後に 「保護パック(ウェブACL)を作成」を押下します。
ロググループ名は「aws-waf-logs-」で始まるものでしか選べなかったので、作成時に注意してください。

CloudShell での動作確認
作成した WebACL の動作を検証する方法として、今回は CloudShell を使用します。
-
コンソール上部の検索バーに 「Shell」 と入力し、「CloudShell」 を選択します。

-
まずは、日本からのアクセスができるかを確認します。コンソール上部で東京リージョンを選択します。ALB の DNS 名に対して curl コマンドを実行し、テストページが表示されることを確認します。

-
続いて、バージニア北部リージョンを選択し、再度 curl コマンドを実行します。
今回は、403 Forbidden が表示されました。

-
バージニア北部以外のリージョンも確認してみます。シドニーリージョンを選択し、curl コマンドを実行すると、同じように 403 Forbidden が返されました。

-
WebACL が正常に動作しているか、ログでも確認してみます。CloudWatch Logs Insights で、ログ記録送信先として設定したロググループを選択し、Action が ALLOW であるログを確認します。JP からのアクセスが 1 件表示されました。

-
続いて、Action が BLOCK であるログを確認します。日本以外からのアクセスをブロックしているログが 2 件表示されました。

今回ログのクエリに使用したSQLについては、こちらのブログをご確認ください。
AWS WAFのログをCloudWatch Logs Insightsで分析する | DevelopersIO
まとめ
今回は、新しい UI の AWS WAF コンソールで WebACL を作成し、CloudShell で簡単に検証してみました。作成時に、ベストプラクティスに基づく保護パッケージを選択できるのがいいですね。また、ルールやログ配信先などは、WebACL を作成した後でも追加・設定可能でした。
最後に、今回検証した日本以外からのアクセスをブロックする方法は、100%ではないことをご注意ください。
よくある質問 - AWS WAF | AWS
===== 抜粋(ここから)=====
24.GeoIP データベースはどの程度正確ですか?
IP アドレスと国ルックアップデータベースの対応精度はリージョンによって異なります。最近のテストによると、IP アドレスと国の対応の全体的精度は 99.8% です。
===== 抜粋(ここまで)=====








