在我的一个mysql从服务器上,我写了一个每日运行的脚本,它停止了slave,2)取得一个db转储,3)再次启动slave,4)encryption它,5)将它复制到我的s3桶。
我正在使用aws-cli将转储复制到s3-bucket。 这里的问题是,如果有人访问服务器,他可以从存储桶中删除转储,因为aws-cli授予对存储桶的更新/删除访问权限。
如何将转储复制到某处(最好是s3),如果有人访问数据库服务器,则不能删除转储。
当我想到我能想到的是,我需要一个不同的服务器上的一个服务器接受转储作为input,然后将其保存到s3。 此服务不接受任何其他types的请求。 这样我为db备份添加了一个额外的安全层。 问题是我不知道任何这样的系统。
更一般的问题,人们通常如何保护他们的数据。 如果有人访问我的主数据库,即使通过SQL注入,他可以导致所有复制截断或删除。 在这种情况下,需要进行某种常规备份。 在注入的情况下,备份是安全的,但在访问服务器的情况下不是。
最小特权原则表明,您应该做的第一件事是从正在进行备份的IAM用户中删除任何不必要的特权。
然而, s3:PutObject权限的粒度是这样的,即只有一个权限的帐户覆盖现有的对象仍然是可能的,这留下了恶意用户通过用空的replace来“删除”你的备份的可能性文件。
启用对象版本控制是其中一个难题,因为版本控制会阻止具有s3:PutObject的用户,但不具有s3:DeleteObject权限通过覆盖该对象来永久删除对象。 具有s3:DeleteObjectVersion权限的用户仍然可以删除版本化的对象。
可能需要的最后一步是在存储桶上启用MFA删除 。 此configuration也要求存储桶启用版本控制,因此需要多因素身份validation才能删除存储桶中任何对象的任何版本。