Skip to main content
compliance · aws

S3 buckets serving requests with no access log trail

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

Server access logging writes a record of every request an S3 bucket serves into a log bucket you designate, at no charge beyond the log storage itself. ZopNight reads each bucket's logging configuration at discovery and flags confirmed-off buckets only. A 403 or throttled read produces no finding.

Signal and threshold

How ZopNight evaluates S3 buckets serving requests with no access log trail.
Field Value
Rule IDsRC-173
Categorycompliance
Severitymedium
Metricnone — pure configuration read
Sources3_access_logging.go

The question access logs answer

When a bucket is involved in an incident, the first question is who read what, and when. Server access logs are the native answer: one log line per request, including requester, object key, response code and bytes sent, delivered to a second bucket you choose. CloudTrail management events will not answer it: they record bucket-level API calls, not object reads, unless you additionally pay for S3 data events. Access logging covers object-level traffic with no enablement fee; you pay only for the storage the logs consume, at ordinary S3 rates.

The evidence standard

Discovery reads each bucket’s logging configuration and records a plain boolean: enabled or not. The rule fires only when that boolean is present and false. When the configuration read failed (throttling, or a 403 from a restrictive bucket policy), the boolean is never recorded and the rule abstains, so a permissions gap in discovery cannot masquerade as a logging gap in your estate.

Check one bucket

Terminal window
aws s3api get-bucket-logging --bucket my-bucket

An empty response is this finding: logging is off. When enabled, the response names the target bucket and prefix the logs flow to.

Turning it on without a cost trap

  1. Pick or create a target bucket in the same region and grant the S3 logging service permission to write to it.
  2. Enable logging on the source bucket, pointing at that target with a distinct prefix per source.
  3. Put a lifecycle rule on the log bucket. This is the step people skip: access logs on a busy bucket accrue forever, and the audit trail quietly becomes its own storage bill.
  4. Never point a bucket’s logs at itself, since every delivered log line would generate another log line.

Limits worth knowing

Log delivery is best-effort and can lag by hours, so access logs are an audit trail, not a real-time alarm. The finding carries no dollar figure; logging is a security posture, not a saving. And the rule checks only that logging is configured on the source; it does not verify the target bucket is actually receiving log objects.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·