個人開発やポートフォリオの作成であっても、最低限で設定しておいたほうがよいAWS WAFについて、設定方法を紹介します。
手順
- AWSマネジメントコンソールのサービス検索窓でWAFと入力して「WAF & Shiled」を開きます

- WAF & Shield画面で「Create web ACL」をクリックします。

- Web ACLの設定画面ではNameやDescriptionを埋めていきます。CloudWatch metric nameはNameから自動入力されるので、特にこだわりがなければそのままで良いと思います。
- ここでResource typeを選択する必要がありますが、CloudFrontにアタッチする場合はCloudFront distributionsを選択し、それ以外の場合(ELB/API Gatewayなど)はRegional resourcesを選択します。
- Regionalの場合はRegionも合わせて選択しておきます。

- この画面から予め紐付けるAWSリソースを追加することができます。私は試しにAPI Gatewayに紐付けることにしました。もちろん後から設定することも可能です。

- 今回はAWSが用意しているルールを追加したいので、Add rules and rule groupsからAdd rulesをクリックし、「Add managed rule groups」をクリックします。

- 下図の画面が表示されるので、AWS managed rule groupsをクリックして展開します。

- 無料のルールはFree rule groupsにあるルールです。それぞれ説明します。有効にする場合はAction欄のAdd to web ACLを有効にしておきます。またCapacityという数字がそれぞれに設定されていますが、Web ACLは一つのACLにつき、このCapacityが1500以下となるように設定する必要があります。(上限緩和申請を行うことで引き上げることもできます。)


AWS managed rule groups
無料で使えるルールがどのようなものか、簡単に解説します。
Freeのもの
- Admin Protection
- 管理ページへの不正アクセスを防止して管理者権限を守るもの。
- Amazon IP reputation list
- Amazon脅威インテリジェンスにい基づいて、IP制限をかける。
- Anonymous IP list
- サイト訪問者側の識別を困難にするようなアクセス元の場合にブロックをかけます。VPNやプロキシ、Torノードなどからの要求を除外します。
- Core rule set
- Webアプリケーションへの攻撃を防ぐための一般的なルールです。様々な脆弱性の悪用に対する保護が提供されます。
- Known bad inputs
- 無効であることがわかっていて、脆弱性をついたりそれを見つけたりするパターンをブロックします。
- Linux operating system
- Linux固有の脆弱性に関するパターンをブロックします。
- PHP application
- PHP固有の脆弱性に関するパターンをブロックします。
- POSIX operating system
- POSIXやPOSIX準拠のOS固有の脆弱性に関するパターンをブロックします。
- SQL database
- SQLインジェクションなど、SQLデータベースの悪用に関連する要求パターンをブロックします。
- Windows operating system
- Windows固有の脆弱性に関するパターンをブロックします。
- WordPress application
- WordPressアプリケーション固有の脆弱性に関するパターンをブロックします。
上記から私は以下のように有効になるように設定してみました。
- Amazon IP reputation list
- Anonymous IP list
- Core rule set
- SQL database
- Known Bad inputs
合計でCapacityは1175となっています。

- Default actionを指定します。これはどのルールにも当てはまらないリクエストをどのように処理するかです。Admin Protectionのように、基本拒否して許可するものだけを通すホワイトリスト方式がBlock、今回のように基本許可して不正なアクセスのみを拒否するブラックリスト方式がAllowになります。

- Set rule priorityではルールの優先順位を決めることができます。ルールのラジオボタンにチェックをいれて Move upやMove downをクリックすることで上下させることができます。

- Configure metricsではCloudWatch metric nameを決めることができます。特に変更する必要がなければそのままで良いです。

- Review and create web ACLで設定を確認し、問題がなければ「Create Web ACL」をクリックしてWebACLを作成します。

- 下図のように、Successと表示されていれば完了です。

コメント