笔记:备份存储在 Amazon S3 上的数据类似但相当古老,并且没有涉及常见的做法。
我们的服务要求每个用户上传几个文件。目前有数十万用户,并且还在不断增加。
我们使用 AWS 作为基础架构,目前所有文件都直接上传并存储在 S3 中。顶级文件夹大约有 75 GB,并且还在不断增长。
长期以来,我们一直有一个脚本,它通过 S3 API 将每个文件复制到另一个文件夹中,从而进行夜间备份。最近几个月,存储成本变得非常高,因此我们改为每两周存储一次备份。
保留备份的原因是业务依赖于用户上传的数据。想想 Dropbox、Flickr 或 Giphy。
我们并不担心 S3 丢失数据,而是因为人为错误,无论我们采取多少预防措施,这种情况都更有可能发生。在这种情况下,我们应该能够将数据恢复到某个时间点。
但是,S3 备份策略似乎值得怀疑,因为备份似乎没有正确进行。备份的大小有时似乎非常小,这意味着 S3 复制操作不起作用 - 即使使用 S3 Web 控制台复制粘贴包含大量文件的文件夹也无法正常工作,并且在部分完成后挂起,这让我们更加怀疑 S3 上的大型复制操作。
我们知道 S3 对象版本控制,但它似乎不是减轻删除存储桶等人为错误影响的正确备份解决方案。
依赖用户上传文件的企业采取什么样的文件备份策略?
答案1
典型的策略包括:
- 启用存储桶版本控制,以及
- 启用 MFA 删除。
启用存储桶版本控制将在覆盖和删除的情况下保留文件版本。如果发生这种情况,您可以恢复文件的先前版本。
启用 MFA 删除功能需要用户每次删除文件时都使用 MFA 密钥。在这种情况下,意外删除非常困难。
只要存储桶包含数据,就无法删除该存储桶。因此,要删除存储桶,必须先删除所有文件。
您可以通过向存储桶添加存储桶策略来阻止该s3:DeleteObject
命令,从而提高安全性。通过这样做,在存储桶级别禁止删除对象;任何人都无法删除对象,即使他们有权限和 MFA 设备。
您还可以做的另一件事是将文件复制到另一个存储桶中。使用生命周期规则,您的对象可以每天自动复制到另一个区域的另一个存储桶中。
TL;DR,存储桶版本控制和 MFA 删除通常足以防止意外数据丢失。只有恶意用户才能真正破坏数据。但您也可以使用存储桶策略更好地保护您的存储桶。
答案2
我绝不会将所有关键业务信息都托付给一个提供商或位置。S3 将文件保存在具有区域的多个位置,这仅能防止硬件故障。
我有一些想法。
- 跨区域复制. 确保其他区域中的存储桶已启用版本控制,并确保几乎没有人具有写入/删除访问权限。
- S3 同步到服务器。该服务器可以在另一个云(Azure / Google)中运行,并将数据存储在另一个云的对象存储中。或者,它可以是本地或托管服务器,并且该服务器可以运行增量备份。
- 使用可以帮您同步云服务的提供商。我相信谷歌有一个服务可以做到这一点,Azure 也可以做到。
- 可能有一种方法可以进行增量备份,并将其存储在 EBS、Glacier 或另一个 S3 存储桶中。
如果我有时间多思考,我可能会想出更多选择。您的 RTO 和 RPO 将真正推动解决方案。