先日AWS WAFで特定のグローバルアドレスからのアクセスを拒否する設定をする機会がありました。調べたところAWS公式以外ですと割と古めの記事が出てきたので、ちょっと戸惑うところがあったので同じような思いをしている方のお役に立てばとこちらの記事を作成しました。

構成

今回は以下のような構成でAWS WAFを設定しました。
ALBにAWS WAFをアタッチをして特定のグローバルアドレスからのアクセスを拒否します。
ALBやEC2の環境は作成済みでWAFの設定と紐付け部分を解説していきます。


この記事の中で出てくる各リソースは
ELB(ALB)が「k-sawdada-elb」
WAFが「k-sawada-waf」
作成するWAFのルールが「k-sawada-blacklist-rule」
IPアドレスリストが「k-sawada-blacklist」
としています。

AWS WAF 設定

ブロックする対象のリスト作成してその後にWAFの設定をします。

ブロックする対象のリスト作成

まずブロックする対象リストを作成します。
WAF & Shieldの画面に遷移します。
「IP sets」を選択します。


次に対象のリージョンを選んで「Create IP set」を選択します。


「IP set name」にリストの名称を入力します。任意の名称でOKです。
「Description」にリストの説明を入力します。任意の内容でOKです。
「IP adresses」にブロックする対象のグローバルアドレスを入力します。

※「8.8.8.8」はあくまでも例ですので、ブロックするべきグルーバルアドレスを入力してください。


入力したところで画面右下の「Create IP set」をクリックします。


リストが作成されたことを確認します。


※私の環境が悪いのか一度に1件ずつしか入力できませんでした。カンマ、セミコロンで繋げてみたけど複数のグローバルアドレスを入力できませんでした。複数入れる方法をご存知の方ぜひ教えて欲しいです。
[2024/03/14追記]
こちらコメントいただきありがとうございました。私の勘違いでした。
以下のように1件目を入れた後に改行入れて2件目を入れようとするとエラーが出たので「あれっ?」と思ったのですが、こちらは想定どうりの動きだったようです。

エラーは無視してそのまま2件目を入力すればまったく問題ないというオチでした。

教訓として余計な改行が入っているとエラーになるということでした。
[2024/03/14追記ここまで]

WAF作成

メインとなるWAFを作成してロードバランサーにアタッチ(紐付け)を行います。
WAF & Shieldの画面に戻って「WEB ACLs」をクリックします。


次に「Create web ACL」をクリックします。


「Region」に対象のリージョンを選択します。
「Name」にWAFの名称を記入します。
「Description」に説明を入力します。


画面下にある「add AWS resource」をクリックします。


WAFを設定するAWSリソースを選択します。
今回はALBに設定するために「Application Load Balancer」を選択します。
既に作成済みのALBである「k-sawada-elb」というロードバランサーを選択します。
選択したら画面右下の「Add」をクリックします。


WAFとALBのリソースが紐づけられたことを確認して「Next」をクリックします。


次にWAFに対してルールを設定します。
「Add rules」をクリックして「Add my own rules and rule groups」を選択します。


rule typeを「IP set」をクリックしてRuleは名称を記入します。任意の名称でOKです。


IP setに先ほど作成した「k-sawada-blacklist」を選択し「Source IP adress」を選択します。
Actionは特定のグローバルアドレスをブロックしたいので「Block」を選択して画面右下の「Add rule」をクリックします。


Default Actionは「Allow」を選択します。
条件に一致しない場合は通信を許可するのでAllowになります。
画面右下の「Next」をクリックします。


以下の画面はそのまま画面右下の「Next」をクリックします。


CloudWatchに関する設定はそのままでOKです。
Request sampling optionsはブロックした対象を表示するかしないかになりますので、ブロックされていることを確認したい場合は「Enable sampled requests」を選択します。
ここでは「Enable sampled requests」を選択して画面右下の「Next」をクリックします。

最後に確認画面が表示されます。以下の画像は一部省略しておりますが、内容に問題がなければ「Create web ACL」をクリックします。


以上でWAFの作成とALBの紐付けは完了です。

確認

設定したWAFで特定のグローバルアドレスからブロックできているか確認します。
WEB ACLsを選択して作成したWAFを選択します。


画面を下にスクロールして「Blocked」があることを確認します。
また右側のグラフで作成したルールに一致したブロックが発生していることを確認します。今回の例ですと「k-sawada-blacklist-rule」のルールに一致してブロックされています。
※もちろんブロックした対象からのアクセスが無い場合は上記の確認ができませんのでご注意ください。


画面上部でブロック数も確認できますので、合わせて確認します。