我已将以下存储桶策略应用于my-bucket.myapp.com
S3存储桶:
{
"Version": "2008-10-17",
"Id": "PreventAccidentalDeletePolicy",
"Statement": [
{
"Sid": "PreventAccidentalDelete",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:DeleteBucket",
"s3:DeleteObject”
],
"Resource": [
“arn:aws:s3:::my-bucket.myapp.com”,
"arn:aws:s3:::my-bucket.myapp.com/*"
]
}
]
}
然后在控制台中,当我尝试删除存储桶时(右键单击,删除),我收到了我期望的错误:Access Denied
。
但是,这就是问题,问题是它仍然删除桶中的所有对象
为什么会这样?
甚至可以使用版本化的存储桶。它只是擦除所有版本,对象是GONE。
答案 0 :(得分:1)
建议的最佳做法是除了创建初始IAM用户之外不使用root帐户,以便添加限制以防止此类事件发生。如果某人有一个以编程方式需要此行为的用例,他们不希望将系统限制作为“安全防护”。用户应遵循最佳实践并实施适用于其情况的必要保护措施
亚马逊如何授权对s3对象采取行动的确切过程:http://docs.aws.amazon.com/AmazonS3/latest/dev/how-s3-evaluates-access-control.html
本文档的第2节| A描述了在用户上下文中应用于root帐户的行为:“如果请求是使用AWS账户的根凭据进行的,则Amazon S3会跳过此步骤。”