我面临一个非常奇怪的问题,那就是我缺乏知识或aws s3中的错误:
所以我创建了一个s3bucket,公共场所的任何人都无法访问它,然后我在其中放入了一个图像。因此,当我尝试那个对所有人来说绝对不可见的图像时(所以我的桶和图像都没有公共访问权限) 然后我向它添加了以下存储桶策略:
{
"Version": "2012-10-17",
"Id": "Policy1506624486110",
"Statement": [
{
"Sid": "Stmt1506624421375",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucketname/*"
}
]
}
此时根据我的理解,此图像可以访问所有aws资源,但不能访问公众中的任何其他人。奇怪的是,我看到公众中的人,任何陌生人都可以访问这个图像。任何人都可以解释一下这个存储桶政策神奇地做了什么让它公开发布吗?
答案 0 :(得分:1)
你明确地公开了你的桶。
要向所有人授予权限(也称为匿名访问权限),请将通配符“*”设置为“主体”值。例如,如果将存储桶配置为网站,则希望存储桶中的所有对象都可公开访问。以下是等效的:
"Principal":"*"
"Principal":{"AWS":"*"}
http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html
使用“开头”的"AWS"
(作为JSON对象中的对象键)或裸标量字符串"*"
的选项大概是出于历史原因,一个是较旧的或比另一种更新的形式,但似乎没有记录。对象键是指权限类型,其他documented values包括"CanonicalUser"
,"Federated"
和"Service"
。
在策略中使用"*"
的有效用例非常少,除非使用策略中的其他条件测试来缩小策略的范围。
另请注意,此处*
不是真正的通配符。它只是“每个人”的占位符。您不能在委托人中使用它来匹配ARN的一部分。例如,"AWS": [ "arn:aws:iam:account-id:user/*" ]
并不表示指定帐户中的所有IAM用户。
最佳做法建议是,在使用用户或角色策略完成所需操作时,不要使用存储桶策略。
答案 1 :(得分:0)
你应该具体到校长。您可以提供多个ARN而不是' *'。您将策略生成器用于生成策略并在主体中指定所需的ARN。值得一读的链接,
http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html