[小ネタ] AWS WAF マネージドルールの例外登録は ruleGroupList内の ruleIdを使う!
はじめに
コンサルティング部の川原です。
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されている場合、そのログの ruleId を Rules > Rule group exceptions
に登録することで、例外登録が完了します。
さて、COUNTモード運用のログでは
ruleGroupList内の terminatingRule.ruleId
nonTerminatingMatchingRules内の ruleId
の 2つの ruleId
が出てきますが、例外登録では rouleGroupList内の terminatingRule.ruleId を使います。
一方の nonTerminatingMatchingRules内の ruleId
は ルールグループのIDです。
おわりに
以上 AWS WAF マネージドルールで例外登録は ruleGroupList内の ruleIdを使う!
でした
この記事が少しでもどなたかのお役に立てば幸いです。