在 re:Invent 2023 的新闻博客文章中,我们向您介绍了 Amazon S3 Express One Zone 存储类,这是一种高性能、单可用区(AZ)的存储类,旨在为您最常访问的数据和延迟敏感型应用程序提供稳定的个位数毫秒级数据访问。该存储类非常适合要求严苛的应用程序,可实现比 S3 Standard 高出多达 10 倍的性能提升。S3 Express One Zone 存储类使用 S3 目录存储桶在单个可用区中存储对象。
即日起,S3 Express One Zone 存储类支持 AWS CloudTrail 数据事件日志记录功能,除了之前已支持的 CreateBucket 和 DeleteBucket 等存储桶级别的操作外,您还可以监控所有对象级别的操作,如 PutObject、GetObject 和 DeleteObject。这样可以对监管和合规性进行审计,并且可以帮助您利用 S3 Express One Zone 存储类的优势,即相比 S3 Standard 存储类,请求成本降低了 50%。
利用这项新功能,您可以快速确定创建、读取、更新或删除了哪些 S3 Express One Zone 存储类对象,并确定 API 调用的来源。如果您检测到未经授权的 S3 Express One Zone 存储类对象访问,则可以立即采取措施来限制访问。此外,您还可以使用 CloudTrail 与 Amazon EventBridge 的集成来创建由数据事件触发的基于规则的工作流程。
使用适用于 Amazon S3 Express One Zone 存储类的 CloudTrail 数据事件日志记录功能
从 Amazon S3 控制台开始。按照创建目录存储桶的步骤,我创建了一个 S3 存储桶并选择目录作为存储桶类型,选择 apne1-az4
作为可用区。 在基本名称中,我输入 s3express-one-zone-cloudtrail
,系统会自动添加包含可用区 ID 的后缀以创建最终名称。最后,我选中复选框以确认数据存储在单个可用区中,然后选择创建存储桶。
为了启用 S3 Express One Zone 存储类的数据事件日志记录功能,我转至 CloudTrail 控制台。我输入名称并创建负责跟踪我的 S3 目录存储桶事件的 CloudTrail 跟踪。
在第 2 步:选择日志事件中,我选择了已选中已启用高级事件选择器的数据事件。
对于数据事件类型,我选择 S3 Express。我可以选择记录所有事件作为日志选择器模板,以管理所有 S3 目录存储桶的数据事件。
但是,我希望事件数据存储仅记录我的 S3 目录存储桶(即 s3express-one-zone-cloudtrail--apne1-az4--x-s3
)的事件。在本例中,我选择自定义作为日志选择器模板,并指明我的目录存储桶的 ARN。有关更多信息,请参阅有关使用高级事件选择器筛选数据事件的文档。
完成第 3 步:查看并创建。现在,您已经登录,并且已启用 CloudTrail。
适用于 Amazon S3 Express One Zone 存储类的 CloudTrail 数据事件日志记录功能的实际应用:
我使用 S3 控制台,将文件上传并下载到我的 S3 目录存储桶。
我使用 AWS CLI 发送 Put_Object
和 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 将日志文件发布到 gzip 存档中的 S3 存储桶,并根据存储桶名称、账户 ID、区域和日期按层次结构组织它们。通过使用 AWS CLI,我列出了与我的 Trail 关联的存储桶,并检索了我进行测试的日期的日志文件。
$ aws s3 ls s3://aws-cloudtrail-logs-MY-ACCOUNT-ID-3b49f368/AWSLogs/MY-ACCOUNT-ID/CloudTrail/ap-northeast-1/2024/07/01/
我得到以下四个文件名,两个来自控制台测试,两个来自 CLI 测试:
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
让我们在这些文件中搜索 PutObject 事件。打开第一个文件时,我可以看到 PutObject
事件类型。回忆一下,我刚刚进行了两次上传,一次是通过浏览器中的 S3 控制台进行的,另一次是使用 CLI 进行的。userAgent
属性(进行 API 调用的源类型)指的是浏览器,所以此事件指的是我使用 S3 控制台进行的上传。有关 CloudTrail 事件的更多信息,请访问有关理解 CloudTrail 事件的文档。
{...},
"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": {...},
...
"resources": [
{
"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"
}
],
{...}
现在,当我查看与使用 AWS CLI 发送的 PutObject
命令对应的事件的第三个文件时,我发现 userAgent
属性略有不同。在本例中,它指的是 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#standard md/installer#exe md/distrib#amzn.2 md/prompt#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"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"
}
],
{...}
现在,让我们来看看第二个文件中的 GetObject 事件。我可以看到事件类型是 GetObject
,并且 userAgent
指的是浏览器,所以此事件指的是我使用 S3 控制台进行的下载。
{...},
"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": {...},
...
"resources": [
{
"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"
}
],
{...}
最后,让我展示第四个文件中的事件,其中包含我从 AWS CLI 发送的 GetObject
命令的详细信息。我可以看到 eventName
和 userAgent
都符合预期。
{...},
"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#standard md/installer#exe md/distrib#amzn.2 md/prompt#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"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"
}
],
{...}
注意事项
入门 — 您可以使用 CloudTrail 控制台、CLI 或 SDK 启用适用于 S3 Express One Zone 存储类的 CloudTrail 数据事件日志记录功能。
区域 — CloudTrail 数据事件日志记录功能在目前推出 S3 Express One Zone 存储类的所有 AWS 区域均可用。
活动日志记录 — 通过适用于 S3 Express One Zone 存储类的 CloudTrail 数据事件日志记录功能,您可以记录对象级别的活动,例如 PutObject
、GetObject
和 DeleteObject
,也可以记录存储桶级别的活动,例如 CreateBucket 和 DeleteBucket。
定价 — 与 S3 存储类一样,您需要根据记录的事件数量和保留日志的时间来支付在 CloudTrail 中记录 S3 Express One Zone 存储类数据事件的费用。有关更多信息,请参阅 AWS CloudTrail 定价页。
您可以启用适用于 S3 Express One Zone 存储类的 CloudTrail 数据事件日志记录功能,以简化高性能存储的监管和合规性。要了解有关这项新功能的更多信息,请访问《S3 用户指南》。
— Eli。