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

S3生命周期规则为何无法删除指定Delete Marker?

问题原因及解决方法

核心原因

版本ID为null的Delete Marker是在存储桶版本化处于**暂停(Suspended)状态时生成的,这类特殊的Delete Marker不受生命周期规则中Delete expired object delete markers选项的管控——该选项仅对版本化启用(Enabled)**状态下生成的Delete Marker生效。

解决步骤

1. 临时恢复版本化启用状态

先把存储桶的版本化从「暂停」改回「启用」,这是能操作这类Delete Marker的前提(只有版本化启用时,S3允许对带null版本ID的Delete Marker执行删除操作)。

2. 批量删除目标Delete Marker

用AWS CLI或SDK来定位并删除这些版本ID为null的Delete Marker,以下是CLI的操作示例:

  • 先列出所有符合条件的Delete Marker(验证目标对象):
    aws s3api list-object-versions --bucket 你的桶名 --query 'DeleteMarkers[?VersionId==`null`]'
    
  • 批量删除(bash环境下):
    aws s3api list-object-versions --bucket 你的桶名 --query 'DeleteMarkers[?VersionId==`null`].[Key,VersionId]' --output text | while read key versionid; do
      aws s3api delete-object --bucket 你的桶名 --key "$key" --version-id "$versionid"
    done
    
    注意:如果桶内对象数量较多,需要处理分页(添加--continuation-token参数循环调用),避免漏删。

3. 后续配置调整

删除完成后,可根据业务需求重新将版本化设为暂停状态。如果需要自动清理未来生成的Delete Marker,确保生命周期规则同时满足:

  • 版本化处于启用状态时,配置Delete expired object delete markers选项;
  • 若需在版本化暂停状态下避免生成这类特殊Delete Marker,可考虑在删除对象时明确指定--version-id(针对具体版本删除),而非直接执行无版本指定的删除操作。

权限要求

执行上述操作的IAM身份需要具备以下权限:

  • s3:ListBucketVersions(用于列出对象版本及Delete Marker)
  • s3:DeleteObjectVersion(用于删除指定版本的Delete Marker)

内容的提问来源于stack exchange,提问作者mingzhao.pro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:42:17