Back to Checks
AWS WAF Classic Global Web ACL has logging enabled
waf_global_webacl_logging_enabled
Service: wafSeverity: medium
OfficialBuilt-inVerified
Categories:logging
Resource Type:AwsWafWebAcl
AWS WAF Classic global Web ACLs have logging enabled to capture evaluated web requests and rule actions for each ACL
Risk
Without WAF logging, you lose visibility into attacks (SQLi/XSS probes, bots, brute-force) and into allow/block decisions, limiting detection and forensics. This degrades confidentiality, integrity, and availability, and slows incident response and tuning.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks waf_global_webacl_logging_enabledRecommendation
Enable logging on all global Web ACLs and send records to a centralized logging platform. Apply least privilege to log destinations and redact sensitive fields. Monitor and alert on anomalies, and integrate logs with incident response for defense in depth and faster containment.
Remediation
CLI
aws waf put-logging-configuration --logging-configuration ResourceArn=<web_acl_arn>,LogDestinationConfigs=<kinesis_firehose_delivery_stream_arn>Other
1In the AWS console, create an Amazon Kinesis Data Firehose delivery stream named starting with "aws-waf-logs-" (for CloudFront/global, create it in us-east-1)
2Open the AWS WAF console and switch to AWS WAF Classic
3Select Filter: Global (CloudFront) and go to Web ACLs
4Open the target Web ACL and go to the Logging tab
5Click Enable logging and select the Firehose delivery stream created in step 1
6Click Enable/Save
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.waf.waf_client import waf_client
class waf_global_webacl_logging_enabled(Check):
def execute(self):
findings = []
for acl in waf_client.web_acls.values():
report = Check_Report_AWS(metadata=self.metadata(), resource=acl)
report.status = "FAIL"
report.status_extended = (
f"AWS WAF Global Web ACL {acl.name} does not have logging enabled."
)
if acl.logging_enabled:
report.status = "PASS"
report.status_extended = (
f"AWS WAF Global Web ACL {acl.name} does have logging enabled."
)
findings.append(report)
return findings