「AWS WAF」を導入してみた。- IP addresses編

AWSWAFCloudFront

Written by Kohei Yamada Posted on 2015/12/28



WS WAFはアプリケーション用のファイアウォールで、
IP address、SQL injection、String matchingに関するアクセスの制御ができます。

ただ、このサービスを利用するにはCloudFront経由でのアクセスにしか対応していないため、ELBやEC2にWAFを導入する場合はCloudFrontを配置する必要があります。

今回はIP addressesの設定を行います。
その他の設定については以下を参照ください。
「AWS WAF」を導入してみた。- SQL injection編
「AWS WAF」を導入してみた。- String matching編

1.新規設定


今回は新規で特定IPアドレスからのアクセスをブロックする設定をします。
まずはじめに画面中央にある「Get started」をクリックします。
aws-waf_2015120101.png

Concepts overview画面が表示されますが右下の「Next」をクリックします。
aws-waf_2015120102.png


Step 1: Name web ACL

作成するWeb ACLの名前を入力します。これはWAFで設定する複数のルールをまとめるためのグループ名となるので、導入するサービス名などをつけるのが良いと思います。
今回は「waf-test-acl」にします。
aws-waf_2015120103-step1.png


Step 2: Create conditions

今回はIPアドレスのアクセスコントロール設定をするので「IP match conditions」の「Create IP match condition」をクリックします。
aws-waf_2015120103-step2-1.png

するとIPアドレスを設定する画面がポップアップされるためIPアドレス名とIPアドレス(レンジ指定可)を入力して「Create」をクリックします。
aws-waf_2015120103-step2-2-1.png

作成が完了したら「Next」をクリックします。


Step 3: Create rules

「Create rule」をクリックするとルールを設定する画面がポップアップされます。
aws-waf_2015120103-step3-1.png

今回の場合は「リクストが該当IP(waf-test-ip)からのアクセスからの場合」というルールを設定しています。
aws-waf_2015120103-step3-2-1.png

設定が完了したら「Create」をクリックします。
作成したらそのルールにマッチした際のアクション(Allow, Block, Count)と、マッチしない場合のデフォルトアクション(Allow, Block)を設定し「Next」をクリックします。
aws-waf_2015120103-step3-3.png

今回はデフォルトアクションをAllowとし、該当IP(ip-deny-rule)からのリクエストはBlockを設定します。


Step 4: Choose AWS resource

Resourceの項目を適用したいCloudFrontに設定して「Review and create」をクリックします。
aws-waf_2015120103-step4-1-1.png


Step 5: Review and create

最後に今までのStepで設定した内容が表示されるのでOKであることを確認して「Confirm and distribution」をクリックします。
aws-waf_2015120103-step5-1-1.png

作成が完了した後「Requests」タブをクリックするとリクエストログが確認できます。
aws-waf_2015120104-1.png


2.動作確認


まずはリクエストが無いことを確認します。
aws-waf_2015120105.png

CloudFront経由でサーバへブラウザアクセスすると以下の画面が表示されます。
aws-waf_2015120106-1.png

再度リクエストログのMatches ruleを確認すると「ip-deny-rule(Block)」というログが出ているのが確認でます。

今回ブロック対象としたIPからのみブロックできているのが確認できました。
aws-waf_2015120107-1.png

以上で設定完了です。