【AWS】WAFでIP制限

1. 使用するサービス

(AWS)

  • CloudFront

2. 概要

前提として、API GatewayとCloudFrontを使用したwebサイト等を実装しているとします。また、ドメインでアクセスが可能であるとします。
接続先IPからCloudFrontへのアクセス許可を判断するWAFの簡単な使い方を説明します。

3. WAF

AWSコンソールの検索からWAFと入力すると、画像のようなメニュー画面になります。

WAF_menu
WAFメニュー画面

3-1. IP Sets
先にIP Setsを作成しておきます。ここで許可するIPアドレスのグループを作成し、後々のACLに紐付けます。
サイドバーからIP Setsを選択し、「Create IP Set」を押します。

WAF_IPSets
IP Sets

Nameは任意の物を入れてもらい、リージョンはGlobalで、IP versionはIPv4、下の方のIPアドレスに許可したいIPアドレスをCIDR方式で入れてもらいます。
その後、「Create IP Set」で完成です。

WAF_IPSets_detail
IP Sets作成


3-2. ACL
サイドバーからAWS ACLsを選択し、「Create Web ACL」を選択し、ACLの作成を行います。
各種Nameを任意の物を入れてもらい、後はデフォルトで大丈夫です。「Next」ボタンで次の設定へいきます。

WAF_ACL_detail
WAF 詳細設定


ACLのルールの設定を行います。「Add Rules」ボタンでルールを追加していきます。
ボタンを押すとドロップダウンで「add my own rules and rule groups」が出るのでそれを選択します。

WAF_ACL_rule_add
ACL ルール追加

Rule Typeに「IP Set」を選択し、Nameに任意の物を入れてもらいます。

WAF_ACL_rule_ipset1
IPSet 選択

IP setで先程作成したIP Setを選択してもらい、「IP address to use as the originating address」をSource IPにし、ActionはAllowにすることで
該当のIP Setを許可することになります。
「Add Rule」で作成完了です。

WAF_ACL_rule_ipset2
IP Set 選択

ACLのRule設定を完了します。
「Default web ACL action for requests that don't match any rules」をBlockにし、Rule外のアクセスをブロックします。
つまり、IP Set以外の通信を弾くようにします。逆に先程の「IP address to use as the originating address」をBlockにし、
こちらをAllowにすることで特定のIPを弾く設定も出来ます。
「Next」ボタンで次へいきます。

WAF_ACL_rule_done
ACLルール設定

最後にルールの確認です。「Next」で次へいきます。

WAF_ACL_rule_confirm
ACL ルール確認

CloudWatchのメトリックスの設定です。Log等の吐き出し先です。最初の方で設定した名前のままでいいでしょう。

WAF_ACL_CloudWatch_Metrics
ACL CloudWatach メトリックス

最後にACLの設定確認です。確認して問題なければ下の「Create web ACL」で作成完了です。

WAF_ACL_done
ACL作成完了


4. CloudFrontの紐付け
ACLが作成されたので、後はCloudFrontへ紐付けを行うことでCloudFrontへのアクセスを制限します。
Web ACLsから先程作成したACLを選択し、メニュー画面へ遷移します。メニューのタブにある「Associated AWS resources」を選択し
右上の「Add AWS resources」ボタンを押します。

WAF_CloudFront_add
CloudFront紐付け

モーダルウィンドウが開くので作成済のCloudFrontを選択し、「Add」で追加します。
すると、メニュー画面で追加されたことがわかります。

5. おわりに
以上で、WAFを用いたIPアドレスによるCloudFrontへのアクセス制限が出来ました。
ACLの「Overview」からアクセスの履歴が見れます。ここで実際にアクセスしてみてどのIPをACLが許可しているか、
どのパスに対するアクセスかなどモニタリング出来ます。作成した後は、こちらを見ながら、様々なIPからアクセスして
ACLが作動しているか確認してください。