Check ID: cloudtrail_logs_s3_bucket_is_not_publicly_accessible
Provider: AWS
Service: cloudtrail
Severity: CRITICAL
Categories: internet-exposed
Resource type: AwsS3Bucket

What this check verifies

CloudTrail log destination S3 buckets are inspected for ACL grants that expose data to the public AllUsers group. Buckets hosted in other accounts are flagged for out-of-scope review.

Risk

Exposed CloudTrail logs erode confidentiality and integrity. Adversaries can harvest API activity to map accounts, roles, and keys, enabling reconnaissance and evasion. If write is allowed, logs can be poisoned or deleted, thwarting investigations and compromising incident timelines.

Recommendation

Apply least privilege to the log bucket:
  • Enable S3 Block Public Access (account and bucket)
  • Remove AllUsers/AuthenticatedUsers ACLs; avoid wildcard principals
  • Permit only CloudTrail and constrain with aws:SourceArn
Use a dedicated private bucket and monitor for permission changes.

Remediation

aws s3api put-bucket-acl —bucket <example_resource_name> —acl private

References

Where this check fires

This check runs on every scheduled scan against your AWS account. Findings appear at Cloud Security → Findings filterable by Check ID = cloudtrail_logs_s3_bucket_is_not_publicly_accessible. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to AWS checks