この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
コンサルティング部の川原です。
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を使う!
でした
この記事が少しでもどなたかのお役に立てば幸いです。