如何查询Amazon S3存储桶最后访问时间及1年未使用存储桶列表
查询Amazon S3存储桶及对象的最后访问/读取时间
一、存储桶级最后访问时间查询
Amazon S3本身没有直接提供存储桶级别的「最后访问时间」字段,需通过CloudTrail记录的API事件(如GetObject、ListBucket这类读操作)获取。
CLI命令示例
# 查询所有S3存储桶的最近访问事件,按时间倒序排列 aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::S3::Bucket \ --start-time $(date -d "2 years ago" +%Y-%m-%dT%H:%M:%SZ) \ --max-items 1000 \ | jq -r '.Events[] | "\(.Resources[0].ResourceName) \(.EventTime)"' \ | sort -k2,2r
- 用
start-time扩大时间范围,确保覆盖可能的访问记录 jq用于提取桶名和事件时间,需提前安装- 结果顶部即为对应桶的最近访问时间
若未开启CloudTrail,需先创建跟踪并勾选记录S3的读操作事件。
二、筛选超过1年未使用的存储桶
通过对比「所有存储桶列表」和「1年内有访问记录的桶列表」,定位未被访问的桶:
# 计算1年前的时间戳(Linux) ONE_YEAR_AGO=$(date -d "1 year ago" +%Y-%m-%dT%H:%M:%SZ) # macOS使用:ONE_YEAR_AGO=$(date -v -1y +%Y-%m-%dT%H:%M:%SZ) # 获取1年内有访问事件的存储桶 aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::S3::Bucket \ --start-time $ONE_YEAR_AGO \ --max-items 1000 \ | jq -r '.Events[] | .Resources[0].ResourceName' \ | sort -u > active_buckets.txt # 获取所有存储桶列表 aws s3api list-buckets --query 'Buckets[].Name' --output text | tr '\t' '\n' > all_buckets.txt # 找出超过1年未使用/从未使用的桶 grep -Fxvf active_buckets.txt all_buckets.txt
sort -u去重,避免同一个桶多次出现在事件中- 结果包含两类桶:1年内无任何访问事件的、从未被访问过的
三、查看桶内对象的最后读取时间
S3对象默认不存储「最后读取时间」,可通过以下两种方式获取:
方式1:通过CloudTrail查询对象读事件
针对特定桶内的对象,查询GetObject事件的最新时间:
# 替换为目标桶名 BUCKET_NAME="your-bucket-name" # 获取桶内所有对象键 aws s3api list-objects-v2 --bucket $BUCKET_NAME --query 'Contents[].Key' --output text | tr '\t' '\n' > object_keys.txt # 遍历对象,查询最近的GetObject事件 while read -r KEY; do LATEST_ACCESS=$(aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=ResourceName,AttributeValue="$BUCKET_NAME/$KEY" \ --lookup-attributes AttributeKey=EventName,AttributeValue=GetObject \ --max-items 10 \ | jq -r '.Events[0].EventTime // "Never accessed"') echo "$KEY: $LATEST_ACCESS" done < object_keys.txt
方式2:通过S3 Inventory生成访问时间清单
- 在S3控制台为目标桶开启Inventory,配置时勾选
LastAccessedDate字段 - 等待Inventory生成后,下载清单文件(通常为CSV格式)
- 直接查看文件中的
last_accessed_date列
四、CLI操作失败的常见原因
- 权限不足:确保IAM实体拥有
cloudtrail:LookupEvents、s3:ListAllMyBuckets、s3:ListBucket权限 - CloudTrail未配置:未开启跟踪,或跟踪未包含S3读事件(需在CloudTrail设置中勾选「数据事件」并选择S3桶)
- 时间范围错误:
start-time设置过晚,导致无匹配事件 - 工具缺失:未安装
jq,可通过apt install jq(Linux)或brew install jq(macOS)安装
内容的提问来源于stack exchange,提问作者Usama Khalid
相关产品推荐
相关产品推荐

