我将以下桶策略应用于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
。
为什么会发生这种情况?
它甚至发生在一个版本化的桶中。它只是擦除所有版本,对象就消失了。
推荐的最佳实践是除了创建您的初始IAM用户之外不要使用root帐户,以便您可以添加限制以防止此类事件。如果有人有一个用例需要这种行为,他们不想在系统中设置限制作为"安全防护"。这取决于用户是否遵循最佳实践并根据他们的情况实现必要的保护措施
amazon授权s3对象上的操作的确切过程:http://docs.aws.amazon.com/AmazonS3/latest/dev/how-s3-evaluates-access-control.html
本文档的第2节A描述了在用户上下文中应用于根帐户的行为:"如果使用AWS帐户的根凭据发出请求,Amazon S3将跳过此步骤。"