継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS WAF で特定条件でブロックされたリクエストの発生でアラートを飛ばす

タダです.

AWS WAF のログを Datadog に送って運用している中で,特定条件でブロックされたリクエストがあったらアラートを飛ばしたいとなり,Terraform でコード化したのでこの記事でまとめます.

特定条件について

今回の条件として,WAF は特定の IP アドレスのみアクセス許可している状態です.仮にクライアント側の IP アドレスが変わったりしたりしたら検知する必要があり,WAF のルールで指定している IP アドレスがブロックされた時を検知するようなモニターを作ります.

Datadog のモニター設定

上記の条件で設定を定義したのが下記の Terraform のコードです.@webaclIdAWS WAF の ARN を指定し,@network.client.ipvar.source_ipsAWS WAF で許可している IP アドレス群を指定しています.これらがブロックされた場合にアラートを発報するようにしています.

variable "source_ips" {
  type = list(string)
  default = ["111.111.111.111", "222.222.222.222", "333.333.333.333"]
}

resource "datadog_monitor" "hoge" {
  name  = "hoge WAF Blocked"
  type  = "log alert"
  query = "logs(\"@webaclId:\\\"${data.aws_wafv2_web_acl.hoge.arn}\\\" @network.client.ip:${join("OR", var.source_ips)} @system.action:BLOCK\").index(\"*\").rollup(\"count\").last(\"${var.interval}m\") > 0"
  monitor_thresholds {
    critical = 0
  }
}

まとめ

AWS WAF のログの中から特定 IP アドレスがブロックされたときにアラートを設定する機会があったのでまとめました.