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

删除S3中不存在的文件时连带删除空文件夹,如何避免该问题?

S3 指定目录防删除解决方案

问题根因

S3 是扁平化结构的对象存储服务,不存在原生文件系统的目录实体,控制台和 AWS CLI 中展示的“目录”,是系统根据对象键的 / 分隔符生成的逻辑虚拟目录。
你使用的 aws-cli/2.2.46 属于 2021 年的旧版本,存在已知逻辑缺陷:当你对某个前缀下不存在的对象执行 aws s3 rm 操作时,CLI 会判断该前缀下是否有匹配到的对象,若未匹配到就会自动移除该前缀对应的虚拟目录展示,哪怕你创建了 .donotdelete 标记文件,也会因为删除命令的匹配规则未覆盖该隐藏文件触发目录移除。


可用解决方案

方案 1:配置桶策略强制禁止删除指定前缀

这是最彻底的防误删方案,直接在 mainbucket 的桶策略中添加规则,拒绝所有身份删除 DataFeeds/ 前缀下的所有对象:

{
    "Effect": "Deny",
    "Principal": "*",
    "Action": [
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mainbucket/DataFeeds/*"
}

如果有特定身份需要删除权限,可以在策略中添加 NotPrincipal 字段配置例外

方案 2:升级 AWS CLI 修复异常行为

旧版本 CLI 的误删虚拟目录问题已经在后续版本修复,你可以直接升级到最新版 AWS CLI,即可避免删除不存在对象时连带移除虚拟目录的问题。

方案 3:开启版本控制+删除保护

给 mainbucket 开启版本控制,同时可选开启 MFA 删除保护。开启后所有删除操作只会给对象添加删除标记,不会真正删除对象的历史版本,即使出现误删操作也可以随时回滚到删除前的状态。

方案 4:为指定目录配置只读/只写访问点

给 DataFeeds/ 前缀单独创建 S3 访问点,访问点的策略直接禁止所有 Delete 操作,日常读写该目录的操作都通过访问点执行,从操作入口规避误删风险。


内容的提问来源于stack exchange,提问作者iyerland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:09:01