Ensure that object-level logging for write events is enabled for S3 buckets
Description
S3 object-level API operations, such as GetObject, DeleteObject, and PutObject, are referred to as data events. By default, CloudTrail trails do not log data events, so it is recommended to enable object-level logging for S3 buckets.
Rationale
Enabling object-level logging will help you meet data compliance requirements within your organization, perform comprehensive security analyses, monitor specific patterns of user behavior in your AWS account, or take immediate actions on any object-level API activity within your S3 buckets using Amazon CloudWatch Events.
Impact
Enabling logging for these object-level events may significantly increase the number of events logged and may incur additional costs.
Audit Procedure
Using AWS Console
- Login to the AWS Management Console and navigate to the CloudTrail dashboard at
https://console.aws.amazon.com/cloudtrail/. - In the left panel, click
Trails, and then click the name of the trail that you want to examine. - Review
General details. - Confirm that
Multi-region trailis set toYes. - Scroll down to
Data eventsand confirm the configuration:
- If
advanced event selectorsis being used, it should read:
Data Events: S3
Log selector template
Log all events
- If
basic event selectorsis being used, it should read:
Data events: S3
Bucket Name: All current and future S3 buckets
Write: Enabled
- Repeat steps 2-5 to verify that each trail has multi-region enabled and is configured to log data events. If a trail does not have multi-region enabled and data event logging configured, refer to the remediation steps.
Using AWS CLI
- Run the
list-trailscommand to list all trails:
aws cloudtrail list-trails
- The command output will be a list of trails:
"TrailARN": "arn:aws:cloudtrail:<region>:<account#>:trail/<trail-name>",
"Name": "<trail-name>",
"HomeRegion": "<region>"
- Run the
get-trailcommand to determine whether a trail is a multi-region trail:
aws cloudtrail get-trail --name <trail-name> --region <region-name>
The command output should include:
"IsMultiRegionTrail": true.Run the
get-event-selectorscommand, using theNameof the trail and theregionreturned in step 2, to determine if data event logging is configured:
aws cloudtrail get-event-selectors --region <home-region> --trail-name <trail-name> --query EventSelectors[*].DataResources[]
- The command output should be an array that includes the S3 bucket defined for data event logging:
"Type": "AWS::S3::Object",
"Values": [
"arn:aws:s3"
If the
get-event-selectorscommand returns an empty array, data events are not included in the trail's logging configuration; therefore, object-level API operations performed on S3 buckets within your AWS account are not being recorded.Repeat steps 1-7 to verify that each trail has multi-region enabled and is configured to log data events. If a trail does not have multi-region enabled and data event logging configured, refer to the remediation steps.
Expected Result
At least one multi-region trail has S3 object-level write event logging enabled for all buckets.
Remediation
Using AWS Console
- Login to the AWS Management Console and navigate to the S3 dashboard at
https://console.aws.amazon.com/s3/. - In the left navigation panel, click
buckets, and then click the name of the S3 bucket you want to examine. - Click the
Propertiestab to see the bucket configuration in detail. - In the
AWS CloudTrail data eventssection, select the trail name for recording activity. You can choose an existing trail or create a new one by clicking theConfigure in CloudTrailbutton or navigating to the CloudTrail console. - Once the trail is selected, select the
Data Eventscheck box. - Select
S3from theData event typedrop-down. - Select
Log all eventsfrom theLog selector templatedrop-down. - Repeat steps 2-7 to enable object-level logging of write events for other S3 buckets.
Using AWS CLI
- To enable
object-leveldata events logging for S3 buckets within your AWS account, run theput-event-selectorscommand using the name of the trail that you want to reconfigure as identifier:
aws cloudtrail put-event-selectors --region <region-name> --trail-name <trail-name> --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":true, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::<s3-bucket-name>/"] }] }]'
- The command output will be
object-levelevent trail configuration. - If you want to enable it for all buckets at once, change the Values parameter to
["arn:aws:s3"]in the previous command. - Repeat step 1 for each s3 bucket to update
object-levellogging of write events. - Change the AWS region by updating the
--regioncommand parameter, and perform the process for the other regions.
Default Value
By default, CloudTrail does not log object-level (data event) API operations for S3 buckets. Data event logging must be explicitly enabled per trail and bucket.
References
CIS Controls
| Controls Version | Control | IG 1 | IG 2 | IG 3 |
|---|---|---|---|---|
| v8 | 8.5 Collect Detailed Audit Logs - Configure detailed audit logging for enterprise assets containing sensitive data. Include event source, date, username, timestamp, source addresses, destination addresses, and other useful elements that could assist in a forensic investigation. | x | x | |
| v7 | 6.3 Enable Detailed Logging - Enable system logging to include detailed information such as an event source, date, user, timestamp, source addresses, destination addresses, and other useful elements. | x | x |
Profile
Level 2 | Automated