Monitor knowledge occasions in Amazon S3 Categorical One Zone with AWS CloudTrail

Voiced by Polly

In a Information Weblog publish for re:Invent 2023, we launched you to Amazon S3 Categorical One Zone, a high-performance, single-Availability Zone (AZ) storage class purpose-built to ship constant single-digit millisecond knowledge entry on your most regularly accessed knowledge and latency-sensitive functions. It’s well-suited for demanding functions and is designed to ship as much as 10x higher efficiency than S3 Customary. S3 Categorical One Zone makes use of S3 listing buckets to retailer objects in a single AZ.

Beginning at the moment, S3 Categorical One Zone helps AWS CloudTrail knowledge occasion logging, permitting you to observe all object-level operations like PutObject, GetObject, and DeleteObject, along with bucket-level actions like CreateBucket and DeleteBucket that had been already supported. This permits auditing for governance and compliance, and may help you benefit from S3 Categorical One Zone’s 50% decrease requests prices in comparison with the S3 Customary storage class.

Utilizing this new functionality, you’ll be able to rapidly decide which S3 Categorical One Zone objects had been created, learn, up to date, or deleted, and determine the supply of the API calls. In the event you detect unauthorized S3 Categorical One Zone object entry, you’ll be able to take speedy motion to limit entry. Moreover, you should utilize the CloudTrail integration with Amazon EventBridge to create rule-based workflows which can be triggered by knowledge occasions.

Utilizing CloudTrail knowledge occasion logging for Amazon S3 Categorical One Zone
I begin within the Amazon S3 console. Following the steps to create a listing bucket, I create an S3 bucket and select Listing because the bucket sort and apne1-az4 because the Availability Zone. In Base Title, I enter s3express-one-zone-cloudtrail and a suffix that features Availability Zone ID of the Availability Zone is routinely added to create the ultimate identify. Lastly, I choose the checkbox to acknowledge that Knowledge is saved in a single Availability Zone and select Create bucket.

To allow knowledge occasion logging for S3 Categorical One Zone, I’m going to the CloudTrail console. I enter the identify and create the CloudTrail path liable for monitoring the occasions of my S3 listing bucket.

In Step 2: Select log occasions, I choose Knowledge occasions with Superior occasion selectors are enabled chosen.

For Knowledge occasion sort, I select S3 Categorical. I can select Log all occasions because the Log selector template to handle knowledge occasions for all S3 listing buckets.

Nonetheless, I need the occasion knowledge retailer to log occasions just for my S3 listing bucket s3express-one-zone-cloudtrail--apne1-az4--x-s3. On this case, I select Customized because the Log selector template and point out the ARN of my listing bucket. Study extra within the documentation on filtering knowledge occasions through the use of superior occasion selectors.

End up with Step 3: overview and create. Now, you could have logging with CloudTrail enabled.

CloudTrail knowledge occasion logging for S3 Categorical One Zone in motion:
Utilizing the S3 console, I add and obtain a file to my S3 listing bucket.

Utilizing AWS CLI, I ship Put_Object and Get_Object.

$ aws s3api put-object --bucket s3express-one-zone-cloudtrail--apne1-az4--x-s3 
  --key cloudtrail_test   
--body cloudtrail_test.txt

$ aws s3api get-object --bucket s3express-one-zone-cloudtrail--apne1-az4--x-s3  
--key cloudtrail_test response.txt

CloudTrail publishes log recordsdata to S3 bucket in a gzip archive and organizes them hierarchically based mostly on the bucket identify, account ID, Area, and date. Utilizing the AWS CLI, I record the bucket related to my Path and retrieve the log recordsdata for the date after I did the take a look at.

$ aws s3 ls s3://aws-cloudtrail-logs-MY-ACCOUNT-ID-3b49f368/AWSLogs/MY-ACCOUNT-ID/CloudTrail/ap-northeast-1/2024/07/01/

I get the next 4 recordsdata identify, two from the console exams and two from the CLI exams:

2024-07-05 20:44:16 317 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2044Z_lzCPfDRSf9OdkdC1.json.gz
2024-07-05 20:47:36 387 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2047Z_95RwiqAHCIrM9rcl.json.gz
2024-07-05 21:37:48 373 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2137Z_Xk17zhf0cTY0N5bH.json.gz
2024-07-05 21:42:44 314 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T21415Z_dhyTsSb3ZeAhU6hR.json.gz

Let’s seek for the PutObject occasion amongst these recordsdata. After I open the primary file, I can see the PutObject occasion sort. In the event you recall, I simply made two uploads, as soon as through the S3 console in a browser and as soon as utilizing the CLI. The userAgent attribute, the kind of supply that made the API name, refers to a browser, so this occasion refers to my add utilizing the S3 console. Study extra about CloudTrail occasions within the documentation on understanding CloudTrail occasions.

{...},
"eventTime": "2024-07-05T20:44:16Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"sources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

Now, after I overview the third file for the occasion equivalent to the PutObject command despatched utilizing AWS CLI, I see that there’s a small distinction within the userAgent attribute. On this case, it refers back to the AWS CLI.

{...},
"eventTime": "2024-07-05T21:37:19Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "aws-cli/2.17.9 md/awscrt#0.20.11 ua/2.0 os/linux#5.10.218-208.862.amzn2.x86_64 md/arch#x86_64 lang/python#3.11.8 md/pyimpl#CPython cfg/retry-mode#commonplace md/installer#exe md/distrib#amzn.2 md/immediate#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"sources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

Now, let’s take a look at the GetObject occasion within the second file. I can see that the occasion sort is GetObject and that the userAgent refers to a browser, so this occasion refers to my obtain utilizing the S3 console.

{...},
"eventTime": "2024-07-05T20:47:41Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "GetObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"sources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

And at last, let me present the occasion within the fourth file, with particulars of the GetObject command that I despatched from the AWS CLI. I can see that the eventName and userAgent are as anticipated.

{...},
"eventTime": "2024-07-05T21:42:04Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "GetObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "aws-cli/2.17.9 md/awscrt#0.20.11 ua/2.0 os/linux#5.10.218-208.862.amzn2.x86_64 md/arch#x86_64 lang/python#3.11.8 md/pyimpl#CPython cfg/retry-mode#commonplace md/installer#exe md/distrib#amzn.2 md/immediate#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"sources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

Issues to know

Getting began – You’ll be able to allow CloudTrail knowledge occasion logging for S3 Categorical One Zone utilizing the CloudTrail console, CLI, or SDKs.

Areas – CloudTrail knowledge occasion logging is obtainable in all AWS Areas the place S3 Categorical One Zone is presently out there.

Exercise logging – With CloudTrail knowledge occasion logging for S3 Categorical One Zone, you’ll be able to object-level exercise, reminiscent of PutObjectGetObject , and DeleteObject, in addition to bucket-level exercise, reminiscent of CreateBucket and DeleteBucket.

Pricing – As with S3 storage lessons, you pay for logging S3 Categorical One Zone knowledge occasions in CloudTrail based mostly on the variety of occasions logged and the interval throughout which you keep the logs. For extra data, see the AWS CloudTrail Pricing web page.

You’ll be able to allow CloudTrail knowledge occasion logging for S3 Categorical One Zone to simplify governance and compliance on your high-performance storage. To study extra about this new functionality, go to the S3 Consumer Information.

Eli.

Leave a Reply

Your email address will not be published. Required fields are marked *