You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询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生成访问时间清单

  1. 在S3控制台为目标桶开启Inventory,配置时勾选LastAccessedDate字段
  2. 等待Inventory生成后,下载清单文件(通常为CSV格式)
  3. 直接查看文件中的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:01:18