AWS WAF のメトリックが Mackerel で監視できるようになりました! #mackerel
みなさん、Mackerel で監視してますか!(挨拶
先日のバージョンアップにより、Mackerel の AWS インテグレーションが AWS WAF のメトリックを取得できるようになりました。もちろんそのメトリックに対して監視ルールを設定、閾値を超えたときに通知させることも可能です。
WAF v1、v2 という表現がされていますが、要は AWS WAF (現行仕様) と AWS WAF Classic ですね。 v1、v2 の詳しいところは下記ブログの「AWS WAF v2 の変更点」のところをお読みいただくとして、つまりは特に考えることなく AWS WAF のメトリックが取得できるということです。
Mackerel のグラフ
こんな感じです。ここでは eval-waf
という名前の Web ACL を監視対象にしています。
この Web ACL にはAWS-AWSManagedRulesAmazonIpReputationList
とAWS-AWSManagedRulesCommonRuleSet
というふたつのマネージドルールが設定されていますが、今回テストで発生させたトラフィックは前者のみにマッチしたようですね。後者のメトリックが発生していないため、グラフには現れていません。
取得可能なメトリック
上述した Mackerel のドキュメントにもありますが、Web ACL を 1 マイクロホストとしてメトリックを取得します。 各 Web ACL 全体と、Web ACL に適用されている WAF ルールそれぞれについて、以下の 4 つのメトリックが取得されることになります。
- AllowedRequests : 許可されたリクエストの数
- BlockedRequests : ブロックされたリクエストの数
- CountedRequests : 特定のルールすべての条件に一致した(カウントされた)リクエスト数
- PassedRequests : ルールグループに含まれるどのルールにも一致しないリクエストの数
各メトリックの詳細は、↓の AWS のドキュメントをご参照ください。
つまり、このマイクロホストによって取得される最大のメトリック数は以下の数式で表されることになります。
4 x (ルール数 + 1)
+1 するのは「ALL」、つまり Web ACL 全体の分です。例えばひとつの Web ACL に 5 つのルールが設定されていた場合は 4 x (5+1) = 24
となります。
この計算で行くと、7 つのルールが設定されている Web ACL は 2 マイクロホストとして計算される可能性があることになるので注意しましょう。
ちなみに「最大の」とか「可能性がある」とわざわざ書いているのは、AWS のドキュメントの「レポート条件」にもあるように、値が発生しないとそもそもメトリックとして記録されず、結果 Mackerel にも取り込まれないからです。これはほかのメトリックと同じですね。
設定追加方法
既に AWS インテグレーションで監視をしている状態を想定して説明します。 まずは既存の Mackerel 用 IAM ロールに、下記のマネージドポリシーを追加してください。
AWSWAFReadOnlyAccess
これにより、Mackerel の AWS インテグレーションで WAF のメトリックが取得できるようになりました。 次に Mackerel のオーガニゼーション設定から、AWS インテグレーションの修正を行います。下記のような設定項目が増えていると思いますので、チェックをいれましょう。サービス・ロールはそれぞれの環境に合わせて設定してください。
あとは、しばらくするとメトリックが収集されるようになります!
AWS インテグレーションのメトリックは、おおよそ 5 分間隔で収集されていきますので、そのくらいの余裕をみてみてください。また前述の通り、そもそもメトリックが発生していなければ = トラフィックがない ALB などにアタッチされている Web ACL であれば、Mackerel の画面にも出てこないと思います。適当に curl
したりブラウザで叩いてみたりして、トラフィックを発生させてみましょう。
メトリックが取得できれば、それに監視ルールを設定することも可能です。
まとめ
Mackerel で AWS WAF のメトリックが監視できるようになった、という話をお伝えしました!
AWS WAF のメトリックをモニタすることで、使っているルールの評価や調整に役立つものと思われます。またもちろん、他のメトリックと付き合わせることで、「いま」何が起きているかを総合的に判断するときに役立つでしょう。Mackerel で既に監視をされている環境で、AWS WAF を使われている場合は、是非設定追加をしてみてください!