AWS WAF を利用して特定の IP アドレス以外からのアクセスをブロックする

記事タイトルとURLをコピーする

こんにちは、テクニカルサポート課の大石(一)です。

AWS WAF を利用して特定の IP アドレス以外からのアクセスをブロックする方法についてご紹介します。

AWS WAF についての詳細な説明は、以下の記事をご一読ください。 blog.serverworks.co.jp

検証の構成

以下のような構成で検証をおこないました。
f:id:swx-kazuki-oishi:20220409155840j:plain ALB のターゲットには、Webサーバーが稼働する EC2 インスタンスを配置し、ブラウザからブロックの挙動を確認出来るようにしました。

今回は、特定の IP アドレスからのみアクセス可能とし、その他のアドレスからのアクセスはブロックすることが期待値です。

当記事では、ALB 以下のリソースについては事前に準備されている前提とします。

検証用 の設定

さっそく、検証用の WAF の設定をおこないます。

IP set の作成

まず、通信を許可する IP アドレスのリストを作成します。
画面左のメニューから IP sets を開き、Create IP set をクリックします。

f:id:swx-kazuki-oishi:20220409215134j:plain IP set name
IP set の名前を入力します。
名前は作成後には変更出来ません。

Region
Region は WAF を利用するリージョンを選択します。
今回は Asia Pacific(Tokyo) を選択します。

IP version
使用する バージョンを選択します。
今回は IPv4 を選択します。

IP addresses
通信を許可する対象の IP アドレスを記載します。
1 行に 1 つの IP アドレスまたは IP アドレスの範囲を CIDR 表記で入力します。


Web ACL の作成

次に、実際にリクエストの処理内容を定義していきます。
画面左のメニューから Web ACLs を開き、[Create web ACL] を選択します。


Web ACL details

f:id:swx-kazuki-oishi:20220409161844j:plain

Name
Web ACL の名前を入力します。

Resource type
Web ACL を紐付けるリソースのタイプを選択します。
今回は ALB に紐付けるので [Regional resources (Application Load Balancer, API Gateway, AWS AppSync)] を選択します。

Region
Web ACL を利用するリージョンを選択します。
今回は ALB がある [Asia Pacific(Tokyo)] を選択します。

Associated AWS resources - optional

[Add AWS resources]をクリックします。 f:id:swx-kazuki-oishi:20220409162158j:plain Resource type
Web ACL を紐付けるリソースの種類を選択します。
今回は [Amazon API Gateway] を選択します。
また、Web ACL を紐付けるリソースを選択し、[Add] をクリックします。

リソースが追加されたことを確認し、[Next]をクリックします。

Rules

[Add rules] → [Add my own rules and rule groups]を選択します。 f:id:swx-kazuki-oishi:20220409162253j:plain Rule type
IP set を選択します。

Rule
ルールの名前を入力します。

f:id:swx-kazuki-oishi:20220409162347j:plain IP set
IP set で先の手順で作成した IPセットを選択します。

IP address to use as the originating address
送信元 IP アドレスの判別方法を選択します。

  • Source IP address → ソースの IP アドレスで判定
  • IP address in header → ヘッダー内の X-Forwarded-For で判定

今回は [Source IP address] を選択します。

Action
ルールにマッチしたリクエストのアクションを定義します。
今回はマッチしたリクエストのみリクエストのみ許可したいので、[Allow] を選択します。

Default web ACL action for requests that don't match any rules

f:id:swx-kazuki-oishi:20220409162455j:plain Default action
ルールにマッチしないリクエストのアクションを定義します。
今回はマッチしないリクエストは拒否したいので、[Block] を選択します。

Set rule priority

ルールの優先順位を定義します。
今回は1つしかルールがないのでそのまま[Next]を選択します。

Configure metrics

メトリクスとサンプリングのオプションを設定します。
今回はそのまま[Next]を選択します。

Review and create web ACL

設定内容を確認し、[Create web ACL] を選択します。

動作確認

まず、許可されている IP アドレスからアクセスしてみます。

f:id:swx-kazuki-oishi:20220409215939j:plain 無事、アクセス出来ました。

次に、許可されていない IP アドレスからアクセスしてみます。

f:id:swx-kazuki-oishi:20220409220032j:plain 想定通り、403 Forbidden となり通信が拒否されました。

マネジメントコンソール上のログからも、通信が WAF 拒否/許可のアクションがなされていることが確認出来ます。 f:id:swx-kazuki-oishi:20220409163255j:plain

おわりに

今回は AWS WAF を利用して特定の IP アドレス以外からのアクセスをブロックしてみました。
同様の構成を検討されている方のお力になれば幸いです。

参考

IP セット一致ルールステートメント - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-rule-statement-type-ipset-match.html

ウェブ ACL の作成 - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/web-acl-creating.html

大石 一騎(記事一覧)

テクニカルサポート課