S3 bucket has event notifications enabled
Amazon S3 buckets define a notification configuration that publishes bucket events (for example s3:ObjectCreated:*, s3:ObjectRemoved:*) to a destination. The evaluation identifies buckets that lack any notification setup.
Risk
Missing notifications leaves object and bucket changes unseen, weakening integrity and availability oversight. Undetected deletions, policy drift, or replication issues can stall data pipelines (S3 to Lambda/SQS), slow incident response, and allow tampering or exfiltration to persist longer.
Run this check with Prowler
Run in Prowler Cloudprowler aws --checks s3_bucket_event_notifications_enabledRecommendation
Enable S3 event notifications for relevant events (e.g., s3:ObjectCreated:*, s3:ObjectRemoved:*) and route to controlled destinations (SNS, SQS, Lambda, EventBridge).
Use prefix/suffix filters, avoid recursive triggers, and enforce least privilege on targets. Pair with object-level logging for defense in depth.
Remediation
CLI
aws s3api put-bucket-notification-configuration --bucket <BUCKET_NAME> --notification-configuration '{"EventBridgeConfiguration": {}}'Terraform
# Enable S3 event notifications via EventBridge
resource "aws_s3_bucket_notification" "<example_resource_name>" {
bucket = "<example_resource_name>"
eventbridge {} # Critical: enables EventBridge delivery, satisfying notifications enabled
}NativeIaC
# CloudFormation: Enable S3 event notifications via EventBridge
Resources:
<example_resource_name>:
Type: AWS::S3::Bucket
Properties:
NotificationConfiguration:
EventBridgeConfiguration: {} # Critical: turns on EventBridge notifications, making notifications enabledOther
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.s3.s3_client import s3_client
class s3_bucket_event_notifications_enabled(Check):
"""Ensure S3 Buckets have event notifications enabled
This check will return a FAIL if the S3 Bucket does not have event notifications enabled.
"""
def execute(self) -> list[Check_Report_AWS]:
"""Execute the s3_bucket_event_notifications_enabled check
Iterates over all S3 Buckets and checks if they have event notifications enabled.
Returns:
list[Check_Report_AWS]: List of Check_Report_AWS objects
"""
findings = []
for bucket in s3_client.buckets.values():
report = Check_Report_AWS(metadata=self.metadata(), resource=bucket)
report.status = "FAIL"
report.status_extended = (
f"S3 Bucket {bucket.name} does not have event notifications enabled."
)
if bucket.notification_config:
report.status = "PASS"
report.status_extended = (
f"S3 Bucket {bucket.name} does have event notifications enabled."
)
findings.append(report)
return findings