如何在不控制源存储桶版本的情况下备份 AWS S3 存储桶

50 backup amazon-s3

有没有办法从意外删除 Amazon S3 存储桶中恢复?

我们的存储桶中有关键信息,我需要降低意外或恶意删除存储桶本身的风险。

我知道我可以在本地同步整个存储桶,但是如果我的存储桶大小为 100GB,这不太实用。

关于备份策略的任何想法?

小智 25

另一种方法是在您的存储桶上启用 S3 版本控制。然后您可以恢复已删除的文件等。有关如何启用此功能,请参阅 S3 文档

使用像BucketExplorer这样的第三方工具使得版本控制变得非常简单(与直接调用 API 相比)。

您还可以为您的 S3 存储桶启用多因素身份验证删除 - 这使得“意外删除”变得更加困难;)

更多关于多重身份验证删除
更多关于删除对象

  • 问题是在没有版本控制的情况下实现这一点。 (3认同)

小智 15

你可以使用 s3cmd http://s3tools.org/s3cmd

所以要备份一个叫做 mybucket 的bucket

s3cmd mb s3://mybucket_backup
s3cmd --recursive cp s3://mybucket s3://mybucket_backup
Run Code Online (Sandbox Code Playgroud)

  • 有没有更快的方法来做到这一点?如果存储桶中有 n 个键,则至少有 n 个复制请求加上一些列表(可能检查结果)。对于大存储桶,这可能需要很长时间。 (3认同)

JAG*_*JAG 8

一种可能的解决方案可能是创建一个“备份桶”并在那里复制您的敏感信息。理论上,您的数据在 S3 中比在硬盘中更安全。

另外,我不确定意外删除是否是一个真正的问题,因为您需要在删除存储桶之前意外删除所有存储桶键。

  • 如果您使用的是 s3cmd 之类的工具,那么使用 `rm -rf` 删除整个目录树并不难 (11认同)

小智 7

另一种可能的解决方案是将您的存储桶复制到 S3 中的欧洲区域。这可能会在您意外删除后保留存储桶足够长的时间以进行恢复。


Bre*_*zar 7

这不是一个便宜的解决方案,但如果您的存储桶真的很重要,您可以这样做:启动Amazon EC2 实例并定期同步那里的内容。

Amazon EC2 是他们的虚拟化托管服务提供商。您可以启动 Linux、Windows 等的实例并运行您想要的任何东西。您按小时付费,并且您在本地为该服务器获得了相当大的存储空间。例如,我使用“大”大小的实例,它带有 850GB 的本地磁盘空间。

很酷的部分是它与 S3 位于同一网络上,并且您可以在 S3 和 EC2 之间进行无限制的传输。我在 Windows EC2 实例上使用 20 美元的Jungle Disk软件,它让我可以像访问本地磁盘文件夹一样访问我的 S3 存储桶。然后我可以执行预定的批处理文件将内容从 S3 复制到我的本地 EC2 磁盘空间。如果你愿意,你可以自动化它以保持每小时备份,或者如果你想赌博,设置 JungleDisk(或它的 Linux 等价物)每小时同步一次。如果有人删除了一个文件,您至少有几分钟的时间从 EC2 取回它。不过,我建议使用常规脚本备份 - 如果您将备份压缩到 850GB 的卷上,则很容易保留几天的备份。

这对于 SQL Server 日志传送非常有用,但我也可以看到它是如何实现您的目标的。


小智 6

稍微修改一下布伦特的(优秀的)答案;您不需要保持实例运行。创建一个 EC2 AMI,将您的数据拉下来,将其同步到 EBS 卷,为该卷创建快照并自行关闭。

您也可以保持卷本身运行,但快照它应该足以进行备份。如果您的自定义 AMI 在没有交互的情况下执行所有这些操作(包括在完成后自行关闭),那么您的“备份”脚本只需要“ec2run -n 1 -t m1.small ami-”和即发即忘。