AWS WAF (Managed Rules)運用に当たって考慮すべき点

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

2019年にリリースされた後、数年を掛けてUpdateを繰り返しとても利用しやすくなったAWS WAF v2に関して運用面をメインとした話となります。
(このため、細かい設定内容等には触れずに話を進めます)

AWS WAF v2 リリース、アップデートの経緯

個人的にインパクトのあるUpdate/リリースをピックアップしました。

目次

マネージドルールの選定

AWS WAF利用にあたり、どの場所へWAFを適用するかを決めた後に、どのようなルールを適用するか検討が必要となります。
私がこれまでに携わったプロジェクトで多かったのは、CoreRule、IP Reputation、SQL Injection対策及び、アプリケーション実行環境に応じて追加で幾つかのルールを適用するものでした。
また、APIの場合には追加費用が必要となるがBotControlを有効にしておく等です。
IPアドレスのホワイトリストでDev/Stg環境へのアクセスを絞ることは言わずもがなですね。

AWS マネージドルールのルールグループのリスト
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/aws-managed-rule-groups-list.html

ウェブ ACL のデフォルトアクションの決定
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/web-acl-default-action.html

WAFの試運用

WAFの設計・方針が決まると、いよいよ実装ですがまずは実際に防御が行われるBlockモードではなく、ロギングされるが防御はされないCountモードで試運用しましょう。
システム・アプリケーションテスト段階からCountモード、Blockモードでテスト出来ることがベストですが、そうではないケースも多々あると考えています。

特にリモートワーク環境ですとIP Reputationルールに引っ掛かってしまい、通信がBlockされる事も多いです。
anonymous-ip-list:HostingProviderIPList等

カスタムレスポンスについて

Countモードでは問題になりませんが、Blockモードにすると403ステータスコードが返却され始めます。
すべての開発者・インフラ担当者が標準設定のステータスコード403がWAF応答の可能性もある事に気づく事は難しいため、切り分けを迅速に行うためにもステータスコード・ヘッダをカスタムしておく事を強くお勧めします。

ログ分析の実施

ログの調査方法は下記のようなケースを想定し、事前に確立しておく必要があります。

  • 実際にBlockモードへ移行するとどのアクセスがBlockされる(予定)かを確認
  • ユーザからリクエストが上手くいかない報告があった場合のアクション

下記は、簡易的にCloudWatch Logs Insightsで実施する例となります。
より大量のログの場合はS3に保管しAthenaを活用する等が考えられます。

  • httpRequest.uri: URI
  • action: BLOCK or ALLOW
  • terminatingRuleId: どのルールでterminateされたか

上記クエリは最小限となりますので、あとは実際に表示されるエントリ内のどの項目をdisplayするか、絞り込むため filter するか等でクエリを調整していきます。

より実践的なクエリ、Metric化に関しては下記が参考になると思います。
Amazon CloudWatch Logs による AWS WAF ログの分析
https://aws.amazon.com/jp/blogs/news/analyzing-aws-waf-logs-in-amazon-cloudwatch-logs/

ログ保管上のコスト最適化について

運用が始まると、大量のログがCloudWatch Logs等に生成され始めます。
このため、ログのフィルタリング機能を活用し、必要なログのみを出力する事を設計段階から考慮する必要があります。

Count/Blockされたログのみをロギングする設定として下記のような設定が可能です。

※以前はマネジメントコンソールでは “EXCLUDED_AS_COUNT” のログをフィルタリングすることができない為、CLI などで設定する必要がありましたが、マネジメントコンソールでも “EXCLUDED_AS_COUNT” を設定できるようになりました。

まとめ

CloudWatch Log、S3バケットへの直接ロギング機能を始め、痒いところに手が届くようになったAWS WAF v2
WAFが必須要件のため、導入したいというご用件も沢山ご相談頂いております。

弊社ではAWS WAFを更に便利に、統計情報を見やすく運用するためのCyberNEOという製品のご用意がありますので、ぜひお気軽にご相談ください。
https://www.skyarch.net/profile/info/2019/191216.html

参考URL

Amazon CloudWatch Logs による AWS WAF ログの分析
https://aws.amazon.com/jp/blogs/news/analyzing-aws-waf-logs-in-amazon-cloudwatch-logs/

AWS WAF のログ分析に関する考慮事項
https://aws.amazon.com/jp/blogs/news/aws-waf-log-analysis-considerations/

投稿者プロフィール

takashi
Japan AWS Ambassadors 2023, 2024
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。

ABOUTこの記事をかいた人

Japan AWS Ambassadors 2023, 2024 開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。