AWS S3 Content Pack

The following content pack is available for use with a Graylog Illuminate license and Graylog Enterprise or Graylog Security. Contact sales to learn more about obtaining Illuminate.

Amazon S3 is an object storage service. This content pack processes two S3 log families: AWS CloudTrail S3 data events (event_source=s3.amazonaws.com) and S3 server access logs.

Messages are normalized into the Graylog Information Model, or GIM (file.create, file.delete, file.access, audit.policy, audit.default) with Security Core coverage. A lightweight single-event detection flags CloudTrail cross-bucket CopyObject operations as potential data exfiltration (301001 host_dlp_detection).

Supported Version(s)

  • AWS CloudTrail S3 data events (CloudTrail record version 1.08 and 1.09)

  • AWS S3 server access log format (current version as of April 2026)

Requirements

  • Graylog 7.1+ with a valid Enterprise license

Stream Configuration

This technology pack includes 1 stream:

  • Illuminate:AWS S3 Messages

Hint: If this stream does not exist prior to the activation of this pack then it is created and configured to route messages to this stream and the associated index set. There should not be any stream rules configured for this stream.

Index Set Configuration

This technology pack includes 1 index set definition:

  • AWS S3 Logs

Hint: If this index set is already defined, then nothing is changed. If this index set does not exist, then it is created with retention settings of a daily rotation and 90 days of retention. These settings can be adjusted as required after installation.

Log Collection and Delivery

This pack parses logs from the following sources:

  • AWS CloudTrail S3 data events forwarded via the AWS CloudTrail input, the AWS Kinesis/CloudWatch input, or an S3-to-Graylog forwarder.

  • AWS S3 server access logs parsed by a forwarder (Lambda or similar) that reads the log bucket and forwards GELF/JSON messages.

CloudTrail Delivery

  1. Enable data events for the S3 buckets of interest in a CloudTrail trail. See the AWS documentation on logging data events for details.

  2. Send the trail to an Amazon SNS topic with an SQS subscription.

  3. In Graylog, create an AWS CloudTrail input that reads from that SQS queue.

If you decode the trail with your own forwarder instead, note the following:

  • You must send one CloudTrail record per message.

  • Map the raw JSON object to the message field.

S3 Server Access Log Delivery

  1. Enable server access logging on each bucket you want to monitor, routing the logs to a dedicated logging bucket.

  2. Create an AWS Lambda function that triggers on S3 ObjectCreated events on the logging bucket.

  3. Configure the function to parse each log file using the space-delimited S3 access log format.

  4. Forward each parsed record as a separate message to a Graylog GELF input.

Log Format Examples

These are example logs for the two supported AWS S3 log families.

CloudTrail S3 Data Event

# AWS CloudTrail S3 Data Event (decoded record, one per message) { "eventVersion": "1.09", "userIdentity": { "type": "IAMUser", "principalId": "AIDAEXAMPLEID1234", "arn": "arn:aws:iam::111122223333:user/alice", "accountId": "111122223333", "userName": "alice" }, "eventTime": "2026-04-15T10:15:22Z", "eventSource": "s3.amazonaws.com", "eventName": "PutObject", "awsRegion": "us-east-1", "sourceIPAddress": "203.0.113.45", "userAgent": "aws-cli/2.13.0 Python/3.11", "requestParameters": { "bucketName": "example-app-uploads", "key": "inbox/2026/04/15/report.csv" }, "responseElements": null, "eventID": "3fcd7213-a8dd-c88a-d151-58665299f60b", "readOnly": false, "resources": [ { "type": "AWS::S3::Object", "ARN": "arn:aws:s3:::example-app-uploads/inbox/2026/04/15/report.csv" }, { "accountId": "111122223333", "type": "AWS::S3::Bucket", "ARN": "arn:aws:s3:::example-app-uploads" } ], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "111122223333", "eventCategory": "Data" }

S3 Server Access Log (raw AWS format)

# AWS S3 Server Access Log (space-delimited, one line per request) # Field order: bucket_owner bucket [time] remote_ip requester request_id operation key "request_uri" http_status error_code bytes_sent object_size total_time turn_around_time "referer" "user_agent" version_id host_id signature_version cipher_suite authentication_type host_header tls_version access_point_arn acl_required a1b2c3d4e5f67890canonicaluserid1a2b3c4d5e6f7890a1b2c3d4e5f67890 example-app-uploads [15/Apr/2026:10:15:22 +0000] 203.0.113.10 arn:aws:iam::111122223333:user/alice A1B2C3D4E5F60718 REST.PUT.OBJECT inbox/2026/04/15/upload.png "PUT /inbox/2026/04/15/upload.png HTTP/1.1" 200 - 0 524288 145 12 "-" "aws-cli/2.13.0" - abcdef0123456789 SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader example-app-uploads.s3.us-east-1.amazonaws.com TLSv1.3 - - a1b2c3d4e5f67890canonicaluserid1a2b3c4d5e6f7890a1b2c3d4e5f67890 example-static-assets [15/Apr/2026:10:16:02 +0000] 198.51.100.12 - B2C3D4E5F6071819 REST.GET.OBJECT images/logo.png "GET /images/logo.png HTTP/1.1" 200 - 18211 18211 8 2 "-" "Mozilla/5.0" - hostid0123456789 - - - example-static-assets.s3.us-east-1.amazonaws.com TLSv1.3 - - a1b2c3d4e5f67890canonicaluserid1a2b3c4d5e6f7890a1b2c3d4e5f67890 example-data-lake [15/Apr/2026:10:20:45 +0000] 203.0.113.66 arn:aws:iam::444455556666:user/external-user C3D4E5F607181920 REST.GET.OBJECT sensitive/finance.xlsx "GET /sensitive/finance.xlsx HTTP/1.1" 403 AccessDenied 243 2048000 9 - "-" "curl/8.0.1" - hostid9876543210 SigV4 - - example-data-lake.s3.us-east-1.amazonaws.com TLSv1.3 - -

S3 Server Access Log (forwarded shape the pack expects)

# S3 Server Access Log -- forwarded shape (what the pack expects as input) # # The forwarder reads the raw space-delimited record and emits one # JSON/GELF message per line with the fields below. Keep the AWS # field names on the way in; the pack's 10-aws_s3_access_log_processing # rule performs the rename to Graylog schema fields. # # Minimal identification triple: bucket_owner + bucket + operation. # No `source` label required; source=s3-access-log-forwarder is also accepted. { "short_message": "203.0.113.10 REST.PUT.OBJECT example-app-uploads/inbox/2026/04/15/upload.png", "bucket_owner": "a1b2c3d4e5f67890canonicaluserid1a2b3c4d5e6f7890a1b2c3d4e5f67890", "bucket": "example-app-uploads", "timestamp": "2026-04-15T10:15:22Z", "remote_ip": "203.0.113.10", "requester": "arn:aws:iam::111122223333:user/alice", "request_id": "A1B2C3D4E5F60718", "operation": "REST.PUT.OBJECT", "key": "inbox/2026/04/15/upload.png", "request_uri": "PUT /inbox/2026/04/15/upload.png HTTP/1.1", "http_status": 200, "error_code": "-", "bytes_sent": 0, "object_size": 524288, "total_time": 145, "turn_around_time": 12, "referer": "-", "user_agent": "aws-cli/2.13.0", "version_id": "-", "host_id": "abcdef0123456789", "signature_version": "SigV4", "cipher_suite": "ECDHE-RSA-AES128-GCM-SHA256", "authentication_type": "AuthHeader", "host_header": "example-app-uploads.s3.us-east-1.amazonaws.com", "tls_version": "TLSv1.3", "access_point_arn": "-", "acl_required": "-" }

What is Provided

  • Rules to parse, normalize, and enrich AWS S3 CloudTrail data events and S3 server access logs.

  • GIM categorization for S3 object create, access, delete, audit policy change, audit default, and cross-bucket data exfiltration detection.

  • Security Core coverage for file and audit categories.

Events Processed by This Technology Pack

The content pack supports the following log types.

  • AWS CloudTrail S3 data events (PutObject, GetObject, HeadObject, CopyObject, DeleteObject, DeleteObjects, ListObjects, REST.PUT.BUCKETPOLICY, and similar)

  • S3 server access log operations (REST.PUT.OBJECT, REST.GET.OBJECT, REST.DELETE.OBJECT, REST.POST.MULTI_OBJECT_DELETE, REST.GET.BUCKET, REST.PUT.BUCKETPOLICY, and similar)

GIM Categorization

GIM categorization is provided for the following messages:

Event gim_event_type_code GIM Category GIM Subcategory GIM Event Type
PutObject / REST.PUT.OBJECT 200000 file file.create file created
CopyObject 200000 file file.create file created
GetObject / REST.GET.OBJECT 201500 file file.access file accessed
HeadObject / REST.HEAD.OBJECT 201500 file file.access file accessed
DeleteObject / REST.DELETE.OBJECT 200100 file file.delete file deleted
DeleteObjects / REST.POST.MULTI_OBJECT_DELETE / BATCH.DELETE.OBJECT 200100 file file.delete file deleted
ListObjects / ListBuckets / HeadBucket / GetBucketPolicy / GetBucketAcl / GetBucketLocation / REST.GET.BUCKET / REST.HEAD.BUCKET / REST.GET.* 229999 audit audit.default audit event
REST.PUT.BUCKETPOLICY 220500 audit audit.policy audit policy changed
CopyObject (detection: cross-bucket exfil) 301001 detection detection.host_detection host_dlp_detection

Message Fields Included in This Pack

General Parsing for AWS S3