AWS WAF Content Pack

The following content pack is available for use with a Graylog Illuminate license and Graylog Enterprise or Graylog Security. Contact sales to learn more about obtaining Illuminate.

AWS WAF is Amazon's web application firewall. It inspects HTTP and HTTPS requests reaching application load balancers, Amazon CloudFront, Amazon API Gateway, and AWS AppSync, applying allow, block, count, CAPTCHA, or challenge actions based on managed or custom rule sets.

This technology pack identifies AWS WAF event log messages delivered through Kinesis, parses the WAF JSON payload, normalizes HTTP request and enforcement fields, and applies GIM categorization, severity, and alert fields so that blcok, CAPTCHA, and challenge outcomes surface as network detections.

Supported Versions

  • AWS WAF v2 (current generation web access control lists—web ACLs)

Requirements

  • Graylog 7.1.0+ with a valid Enterprise license

  • AWS WAF v2 with logging enabled for the web ACL with delivery through Amazon Kinesis Data Firehose

Stream Configuration

This technology pack includes 1 stream:

  • "Illuminate:AWS WAF Messages"

Hint: If this stream does not exist prior to the activation of this pack then it is created and configured to route messages to this stream and the associated index set. There should not be any stream rules configured for this stream.

Index Set Configuration

This technology pack includes 1 index set definition:

  • "AWS WAF Event Log Messages"

Hint: If this index set is already defined, then nothing is changed. If this index set does not exist, then it is created with retention settings of a daily rotation and 90 days of retention. These settings can be adjusted as required after installation.

Log Collection

This pack parses AWS WAF event log messages collected from an Amazon Kinesis Data Firehose stream that AWS WAF is configured to write to.

  • Enable logging on the target Web ACL and select an Amazon Kinesis Data Firehose stream as the destination.

  • Configure the Firehose stream to deliver records to Graylog using the AWS Kinesis/CloudWatch input.

  • Identification keys on the aws_kinesis_stream and aws_kinesis_message_type fields set by the Graylog AWS Kinesis input, so no specific stream name is required.

Log Format Example

BLOCK - AWSManagedRulesCommonRuleSet

{ "timestamp": 1778140491525, "formatVersion": 1, "webaclId": "arn:aws:wafv2:us-east-1:517803882956:regional/webacl/prod-waf/3b8a9ef3-9057-4538-acdd-bda6c27c2131", "terminatingRuleId": "AWS-AWSManagedRulesCommonRuleSet", "terminatingRuleType": "MANAGED_RULE_GROUP", "action": "BLOCK", "terminatingRuleMatchDetails": [], "httpSourceName": "ALB", "httpSourceId": "517803882956-app/waf-test-alb/8d72c561de3f870e", "ruleGroupList": [ { "ruleGroupId": "AWS#AWSManagedRulesCommonRuleSet", "terminatingRule": { "ruleId": "NoUserAgent_HEADER", "action": "BLOCK", "ruleMatchDetails": null }, "nonTerminatingMatchingRules": [], "excludedRules": null, "customerConfig": null } ], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [], "requestHeadersInserted": null, "responseCodeSent": null, "httpRequest": { "clientIp": "185.142.236.41", "country": "SC", "headers": [ { "name": "Host", "value": "34.238.104.93" } ], "uri": "/.well-known/security.txt", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "1-69fc454b-529730c46a57df1c1f2d453d", "fragment": "", "scheme": "http", "host": "34.238.104.93" }, "labels": [ { "name": "awswaf:managed:aws:core-rule-set:NoUserAgent_Header" } ] }

ALLOW - Default_Action

{ "timestamp": 1778154180000, "formatVersion": 1, "webaclId": "arn:aws:wafv2:us-east-1:517803882956:regional/webacl/prod-waf/3b8a9ef3-9057-4538-acdd-bda6c27c2131", "terminatingRuleId": "Default_Action", "terminatingRuleType": "REGULAR", "action": "ALLOW", "terminatingRuleMatchDetails": [], "httpSourceName": "ALB", "httpSourceId": "517803882956-app/waf-test-alb/8d72c561de3f870e", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [], "requestHeadersInserted": null, "responseCodeSent": null, "httpRequest": { "clientIp": "192.0.2.10", "country": "US", "headers": [ { "name": "Host", "value": "app.example.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15" } ], "uri": "/", "args": "", "httpVersion": "HTTP/2.0", "httpMethod": "GET", "requestId": "1-69fc0004-dddddddddddddddddddddddd", "fragment": "", "scheme": "https", "host": "app.example.com" }, "labels": [] }

What is Provided

  • Parsing of the WAF JSON payload into normalized HTTP request, source, and vendor fields.

  • GIM event type code assignment for all supported message types.

  • A spotlight dashboard summarizing AWS WAF activity.

GIM Categorization

GIM categorization is provided for the following messages:

Log Type Vendor Event Description GIM Category GIM Subcategory GIM Event Type Code
aws_waf WAF BLOCK - terminating rule matched and request was blocked detection detection.network detection 300001
aws_waf WAF CAPTCHA - CAPTCHA challenge served to verify a human client detection detection.network detection 300001
aws_waf WAF CHALLENGE - silent JavaScript browser challenge served detection detection.network detection 300001
aws_waf WAF ALLOW - request inspected and allowed through network network.default 129999
aws_waf WAF COUNT - telemetry-only match, request not blocked network network.default 129999

Message Fields Included in This Pack

Normalized GIM Fields

Vendor-Specific Fields

AWS WAF Spotlight Content Pack

This spotlight offers a dashboard with 1 tab:

Overview