[小ネタ] AWS WAF マネージドルールの例外登録は ruleGroupList内の ruleIdを使う!

はじめに

コンサルティング部の川原です。

AWS WAF マネージドルールでは誤検知対策のために、例外ルールの登録が可能です。

[新機能]AWS WAFマネージドルールで誤検知対応できる例外ルールの設定が可能になりました

例外ルールの登録の手順で ruleId という情報を使いますが、 勘違いしていた (しやすい)部分があったので備忘録として残します。

Web ACLログについて

AWS WAFの Web ACLのトラフィック情報のログは以下のような形式となっています。

{
  "timestamp": 1545597243349,
  "formatVersion": 1,
  "webaclId": "d7e7af02-****-****-****-************",
  "terminatingRuleId": "Default_Action",
  "terminatingRuleType": "REGULAR",
  "action": "ALLOW",
  "httpSourceName": "ALB",
  "httpSourceId": "app/test-alb/0000000000000000",
  "ruleGroupList": [
    {
      "ruleGroupId": "be06c7bc-****-****-****-************",
      "terminatingRule": {
        "ruleId": "68661648-****-****-****-************",
        "action": "BLOCK"
      },
      "nonTerminatingMatchingRules": [],
      "excludedRules": null
    }
  ],
  "rateBasedRuleList": [],
  "nonTerminatingMatchingRules": [
    {
      "ruleId": "be06c7bc-****-****-****-************",
      "action": "COUNT"
    }
  ],
  "httpRequest": {
    "clientIp": "xx.xx.xx.xx",
    "country": "JP",
    "headers": [
      {
        "name": "Host",
        "value": "test-alb-000000000.ap-northeast-1.elb.amazonaws.com"
      },
      {
        "name": "Content-Length",
        "value": "28"
      },
      {
        "name": "User-Agent",
        "value": "curl/7.54.0"
      },
      {
        "name": "Accept",
        "value": "*/*"
      },
      {
        "name": "Content-Type",
        "value": "application/x-www-form-urlencoded"
      }
    ],
    "uri": "/wordpress/",
    "args": "id=1",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "POST",
    "requestId": null
  }
}

ログ分析で使いそうな項目を挙げてみます。 (詳細は ウェブ ACLトラフィック情報のログ記録: AWS を参照ください)

項目 説明
action アクション (ALLOW もしくは BLOCK)
httpSourceName リクエスト送信元 (CF もしくは APIGW もしくは ALB)
httpSourceId リクエスト送信元のID
ruleGroupList このリクエストで動作したルールグループのリスト
nonTerminatingMatchingRules COUNTとなったリクエストで動作したルールのリスト
httpRequest リクエストの情報 (クライアントIPアドレス、URIなど)

AWS WAFの初期構築後などで COUNTモードで運用している際は、COUNTとなったリクエストのログを洗い出し、 誤検知が無いか調査することが多いかと思います。

その際に httpRequest 内のクライアントIPアドレスや、URI、クエリ文字列などを確認して 正常なリクエストか、ブロックすべきリクエストか判断するでしょう。

マネージドルールで例外を登録するとき

正常なリクエストが COUNTされている場合、そのログの ruleIdRules > Rule group exceptions に登録することで、例外登録が完了します。

さて、COUNTモード運用のログでは

  • ruleGroupList内の terminatingRule.ruleId
  • nonTerminatingMatchingRules内の ruleId

の 2つの ruleId が出てきますが、例外登録では rouleGroupList内の terminatingRule.ruleId を使います。

一方の nonTerminatingMatchingRules内の ruleId は ルールグループのIDです。

おわりに

以上 AWS WAF マネージドルールで例外登録は ruleGroupList内の ruleIdを使う! でした

この記事が少しでもどなたかのお役に立てば幸いです。