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

如何防止S3存储桶独有文件在AWS S3 sync后被覆盖或删除?

解决方案

一、修改S3 Sync命令实现需求

AWS S3 sync命令默认会删除目标端(S3存储桶)中源端(本地)不存在的文件,同时会覆盖目标端已存在的同名文件。要满足你的需求,只需添加两个参数:

  • 使用--no-delete:阻止删除S3中本地没有的文件,保留桶内原有内容
  • 使用--no-clobber:阻止覆盖S3中已存在的同名文件,只上传本地新增或修改且S3中无对应文件的内容

最终命令示例:

aws s3 sync ./your-local-folder s3://your-target-bucket/ --no-delete --no-clobber

该命令会达成以下效果:

  • 本地新增的文件(如示例中的foo)会同步到S3
  • S3中原有的文件(如示例中的bar)会被保留,不会被删除
  • 若本地修改了某个文件,但S3中已有同名文件,不会覆盖S3里的版本

二、配置S3存储桶实现仅写入+防覆盖

除了通过命令控制,还可以通过桶配置从权限层面限制文件操作,彻底防止覆盖和删除:

1. 启用版本控制

在S3控制台找到目标桶,进入「属性」标签页,开启「版本控制」功能。启用后:

  • 即使上传同名文件,也不会覆盖原有文件,而是生成一个新的版本,旧版本仍可查看和恢复
  • 删除操作只会添加删除标记,不会真正删除文件(除非手动删除版本)

2. 设置桶策略限制操作权限

创建桶策略,仅允许用户执行文件上传(PutObject)操作,拒绝删除、修改权限等操作。示例策略如下(替换占位符为你的实际信息):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "arn:aws:iam::123456789012:user/your-iam-user",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::your-bucket/*"
    },
    {
      "Effect": "Deny",
      "Principal": "arn:aws:iam::123456789012:user/your-iam-user",
      "Action": [
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:PutObjectAcl",
        "s3:PutBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket",
        "arn:aws:s3:::your-bucket/*"
      ]
    }
  ]
}

3. 可选:启用对象锁(Object Lock)

如果需要更严格的防篡改规则(比如合规要求),可以在启用版本控制后开启对象锁:

  • 合规模式:在指定保留期内,任何人(包括桶所有者)都不能删除或覆盖对象
  • 治理模式:限制普通用户修改,但桶所有者可以绕过限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:20:23