Résumé
ONYEDIKACHI BERNARDCLOUD · DEVSECOPS · AI
RésuméGet in touch
CASE 14STORAGE & DATA

S3 Activity Monitoring Audit

A private S3 bucket had no record of who read, wrote or deleted its objects. I turned on CloudTrail S3 data events and server access logging, and showed a GetObject could now be traced to the IAM identity behind it.

Status: ENABLED · VERIFIED

DOMAIN
Storage & data
PLATFORM
Amazon S3, AWS CloudTrail
SEVERITY
Medium
OUTCOME
Object-level audit trail

TOOLS

AWS CLIAmazon S3AWS CloudTrailAmazon CloudWatch LogsCloudWatch Logs InsightsS3 Server Access LoggingCloudTrail S3 data events
RESULT
BEFORE0 object events recorded
AFTERGetObject traced to an identity
01

Objective

I set out to find monitoring blind spots on an S3 data store, check whether object-level access was being recorded, and turn on the logging needed to see it.

02

Scenario

A customer keeps sensitive data mostly in S3. The bucket was not public and ACLs were disabled, but object activity such as GetObject, PutObject and DeleteObject might be happening with no record. I wanted to know whether that activity could be detected and traced to whoever did it.

03

What I found

event-selectorsNO DATA EVENTS
IncludeManagementEvents: true
DataResources:           []
FINDING 01MEDIUM

CloudTrail was not capturing S3 data events

The trail recorded management events only. Its event selectors had no data resources.

A CloudTrail lookup showed bucket-level calls such as ListBuckets and GetBucketAcl, but nothing about individual objects. A CloudWatch Logs query for GetObject, PutObject and DeleteObject returned recordsMatched: 0.

FINDING 02MEDIUM

Server access logging was off

The bucket had no server access logging configuration, so HTTP requests to its objects were not recorded there either.

04

What I did

  1. Reviewed the bucket

    I identified it and listed its contents.

  2. Checked server access logging

    It returned no configuration.

  3. Read the trail's event selectors

    Management events only, no data resources.

  4. Queried for object activity

    CloudTrail and CloudWatch Logs showed no object-level records.

  5. Turned on S3 data events

    I added the bucket's objects to the trail's event selectors, keeping management events on.

  6. Turned on server access logging

    I pointed it at a separate logging bucket with a prefix per source bucket.

EVIDENCE

BASH
aws cloudtrail put-event-selectors --trail-name "$TRAIL_NAME" --event-selectors "[{
  \"ReadWriteType\": \"All\", \"IncludeManagementEvents\": true,
  \"DataResources\": [{ \"Type\": \"AWS::S3::Object\", \"Values\": [\"arn:aws:s3:::${BUCKET_NAME}/\"] }]
}]"

aws s3api put-bucket-logging --bucket "$BUCKET_NAME" --bucket-logging-status "{
  \"LoggingEnabled\": { \"TargetBucket\": \"$LOGGING_BUCKET\", \"TargetPrefix\": \"${BUCKET_NAME}/\" }
}"
05

Validation

The trail now selects the bucket's objects, server access logging is on, and a test read showed up as a data event tied to an identity (account details masked):

TEXT
Event selector:   Type AWS::S3::Object, Values arn:aws:s3:::blind-bucket/
Data event:       eventName GetObject, key flag.txt, userIdentity.arn arn:aws:iam::<ACCOUNT_ID>:user/<USER>
Access logging:   TargetBucket blind-bucket-logs, TargetPrefix blind-bucket/
06

Before and after

CONTROLBEFOREAFTER
Server access loggingNot configuredEnabled
CloudTrail management eventsEnabledEnabled
CloudTrail S3 data eventsNot configuredEnabled
GetObject visibilityNot capturedCaptured
Identity behind object activityNot availableRecorded
Logs query for object events0 matchesActivity found
07

What I recommend

  1. 01Turn on CloudTrail S3 data events for sensitive or business-critical buckets.
  2. 02Add server access logging where you need HTTP-level detail.
  3. 03Send logs to a dedicated, locked-down logging destination with set retention.
  4. 04Watch GetObject, PutObject and DeleteObject on sensitive data, with saved queries or alerts.
  5. 05Review logging coverage so new buckets do not reopen the gap.

“A private bucket can still be a blind spot if object-level activity is not logged and tied to an identity.”

WHAT I LEARNED

SKILLS IT PROVES

  • Cloud Security
  • Amazon S3 Security
  • AWS CloudTrail
  • Audit Logging
  • Security Monitoring
  • Log Analysis
  • Incident Response
  • AWS CLI
View my labs on GitHub