Subchapter 96.10
references/setting-up-logging-and-request-sampling.mdMarkdown9 KBView on GitHub
Domain expertise for getting AWS WAF logging and request sampling working before any rule is
enabled, so Count-mode tuning has data to read. Covers the destination choice (Amazon CloudWatch
Logs, Amazon S3, or Amazon Data Firehose) and its traps (the aws-waf-logs- naming prefix, the
CloudFront-logs-in-us-east-1 rule), redacting sensitive fields, and confirming logs flow before
rules go on.
Does not cover the rules themselves; those are separate references. This reference is the prerequisite the tuning workflows assume.
Execute commands using the AWS MCP server when connected (sandboxed execution, audit logging, observability). Fall back to the AWS CLI otherwise.
To set up logging and sampling end to end, follow the procedure exactly. See the Procedure section below.
The procedure covers:
| Destination | Best for | Latency |
|---|---|---|
| CloudWatch Logs | Real-time analysis with Logs Insights and dashboards | Seconds |
| Amazon S3 | Long-term retention and Athena queries | Minutes |
| Amazon Data Firehose | Streaming to a SIEM or OpenSearch | Seconds |
Constraints:
The destination has naming and Region traps that cause logs to silently never arrive.
Constraints:
aws-waf-logs- prefix; without it, logs
fail silentlyus-east-1aws:SourceArn and aws:SourceAccount condition keys in the log destination’s
resource policy to restrict delivery to the specific web ACL and account and prevent
confused-deputy attacksaws:SecureTransport, and Firehose MUST use
HTTPSLogging full requests can capture credentials and session cookies in plain text.
Constraints:
authorization header and cookie before enabling
logging, so secrets are not written to the destinationCustomers assume logging works, enable rules, and find the destination was misconfigured and captured nothing during the tuning window.
Constraints:
The destination name is missing the aws-waf-logs- prefix, or its resource policy does not allow
AWS WAF delivery. Fix the name or policy (Naming and Region constraints).
The destination is not in us-east-1. Create a destination there (Naming and Region constraints).
No redaction is configured. Add redacted fields for authorization and cookie (Redact sensitive
fields).
This procedure chooses a logging destination, applies redaction, enables logging on the web ACL, and confirms logs flow, then surfaces the console link.
CLOUDFRONT or REGIONAL.aws-waf-logs- prefix.authorization, cookie).Constraints for parameter acquisition:
us-east-1Constraints:
You MUST confirm credentials with aws sts get-caller-identity
You MUST confirm the destination name carries the aws-waf-logs- prefix
You MUST verify or enable encryption at rest on the log destination before enabling logging, since WAF logs can capture credentials and session data. Use the mechanism for the destination type:
# CloudWatch Logs: attach a KMS key to the log group
aws logs associate-kms-key --log-group-name {log_group_name} --kms-key-id {kms_key_arn} --region {region}
# Amazon S3: confirm default SSE (SSE-S3 or SSE-KMS) is set on the bucket
aws s3api get-bucket-encryption --bucket {bucket_name}
# Amazon Data Firehose: confirm server-side encryption is enabled on the stream
aws firehose describe-delivery-stream --delivery-stream-name {stream_name} --region {region}Constraints:
You MUST put the logging configuration with the redacted fields, passing the whole
--logging-configuration as one JSON string (mixing CLI shorthand with inline JSON fails to
parse, and LogDestinationConfigs is a list):
aws wafv2 put-logging-configuration \
--logging-configuration '{"ResourceArn":"{web_acl_arn}","LogDestinationConfigs":["{destination_arn}"],"RedactedFields":[{"SingleHeader":{"Name":"authorization"}},{"SingleHeader":{"Name":"cookie"}}]}' \
--region {region}Constraints:
SampledRequestsEnabled is true on the web ACL visibility configConstraints:
You MUST present the web ACL console link and tell the customer to open the Logging and metrics tab to confirm logging is enabled:
https://us-east-1.console.aws.amazon.com/wafv2/homev2/web-acls?region={region}{
"web_acl_arn": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/example-webacl/abc",
"scope": "REGIONAL",
"destination_arn": "arn:aws:logs:us-east-1:111122223333:log-group:aws-waf-logs-example",
"redacted_fields": ["authorization", "cookie"]
}Enabled logging for web ACL example-webacl to aws-waf-logs-example, redacting authorization and cookie.
Confirmed log records are arriving and request sampling is on.
Logging is ready — Count-mode tuning now has data to read.
Open the web ACL Logging and metrics tab to confirm:
https://us-east-1.console.aws.amazon.com/wafv2/homev2/web-acls?region=us-east-1The destination name lacks the aws-waf-logs- prefix or its policy blocks delivery (Step 1).
The destination is not in us-east-1 (Step 1).
This procedure modifies a security control, so misconfiguration directly weakens the application’s defenses.
wafv2: actions a task needs (for example wafv2:GetWebACL and wafv2:UpdateWebACL) rather than wafv2:* or the AWSWAFFullAccess managed policy.aws sts assume-role) rather than long-lived IAM user access keys when running these WAF CLI commands.wafv2 management events and set CloudWatch alarms on critical web ACL configuration changes (such as DeleteWebACL and UpdateWebACL rule removals) and on the web ACL’s BlockedRequests and CountedRequests metrics, so rule changes and sudden spikes in blocked or counted traffic are detected.authorization header and cookie) and MUST enable encryption at rest on the log destination (CloudWatch Logs, Amazon S3, or Amazon Data Firehose).