如何保护从日常运行脚本中获取的数据库转储

如何保护从日常运行脚本中获取的数据库转储

在我的其中一台 mysql 从属服务器中,我编写了一个每日运行脚本,该脚本 1) 停止从属服务器,2) 进行数据库转储,3) 再次启动从属服务器,4) 对其进行加密,5) 将其复制到我的 s3-bucket。

我正在使用 aws-cli 将转储复制到 s3-bucket。这里的问题是如果有人访问服务器,他也可以从存储桶中删除转储,因为 aws-cli 授予存储桶的更新/删除访问权限。

我如何将转储复制到某个地方(最好是 s3),如果有人可以访问数据库服务器则无法删除转储。

当我思考这个问题时,我能想到的是,我需要另一台服务器上的服务,该服务接受转储作为输入,然后将其保存到 s3。此服务不接受任何其他类型的请求。这样,我就为数据库备份添加了额外的安全层。问题是我不知道有这样的系统。

更普遍的问题是,人们通常如何保护他们的数据。如果有人访问了我的主数据库,即使是通过 SQL 注入,他也可以导致所有复制被截断或删除。在任何此类情况下,都需要有某种常规备份可供回溯。在注入的情况下,备份是安全的,但在访问服务器的情况下则不安全。

答案1

最小特权原则建议您首先要做的就是从进行备份的 IAM 用户中删除所有不必要的权限。

但是,权限的粒度s3:PutObject使得仅拥有该权限的帐户仍然可以覆盖现有对象,这使得恶意用户有可能通过将备份替换为空文件来“删除”您的备份。

启用对象版本控制是难题的剩余部分,因为版本控制可防止有权限s3:PutObject但没有权限的用户s3:DeleteObject通过覆盖来永久删除对象。有权限的用户s3:DeleteObjectVersion仍然可以删除版本控制的对象。

最后一步可能是MFA 删除在存储桶上。此配置还要求存储桶启用版本控制,需要多重身份验证才能删除存储桶中任何对象的任何版本。

相关内容