我只是想通过一些聪明的人来运行这个想法,以确保我不会忽略一些明显的东西:
我想使用允许自动修剪备份的许多备份脚本之一将我的Linux服务器备份到S3。 所以我的S3 IAM策略显然必须给那个用户GET,PUT和DELETE权限。 但是由于DELETE权限将会在那里,所以我需要计划一个黑客获得对我的服务器root权限的最坏情况,并使用存储的凭证删除S3上的备份。 为了消除这种可能性,我正在考虑以下configuration:
然后,唯一拥有存储桶删除权限或版本删除权限的用户将成为我的主Amazon账户用户,我将使用MFA进行configuration。
我在这里错过了什么?
我确实发现这声称…
您可以使用[…]上的对象过期function,但不能将其与S3版本控制一起使用
…我认为这是过时的信息? 在我的快速非正式实验中,似乎可以使用Object Expiration进行版本控制。
非常感谢!
是的,您链接的博客文章(从2011年)似乎包含过时的信息。 从文档:
如果存储桶启用了版本控制(或版本控制处于挂起状态),则“
Expiration操作将通过添加删除标记作为新的当前版本,从逻辑上删除当前版本。NoncurrentVersionExpiration操作将永久删除非当前版本。http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectExpiration.html
您的计划唯一的问题是删除已删除的对象(以节省存储空间)的生命周期策略与防止恶意删除的内容的灾难恢复保护有点不一致。 您必须快速发现违规,否则生命周期策略会清除您显然被删除但实际上隐藏的对象。
这并不是说你的策略在理论上不是很好 – 我build议,就像我使用类似的东西 – 但是不再需要的对象的清除可能需要比生命周期策略可以提供的更复杂,并可能需要按计划运行的定制逻辑并具有附加规则。
假设您可以使用生命周期策略以适合您的方式删除和/或归档旧版本,则不需要为您的脚本删除权限。 这种方法适用于AWS CLI工具。
以下是我的存储桶策略的样子:
{ "Version": "2012-10-17", "Id": "IDHERE", "Statement": [ { "Sid": "ToSendBackups", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::IAMUSERHERE" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BUCKETHERE/*" }, { "Sid": "BucketOps", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::IAMUSERHERE" }, "Action": [ "s3:ListBucketVersions", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::BUCKETHERE" } ] }
此外,请注意,如果您要归档到Glacier,您需要保留已归档的文件至less90天,因为“在90天之前删除的项目,每GB的额外费用为0.03美元”( http://aws.amazon.com/glacier/pricing/ ),所以使用冰川不会为您节省任何东西,如果您先前删除它们。