亚马逊提供授予匿名用户权限的示例,如下所示(请参阅Example Cases for Amazon S3 Bucket Policies):
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*"
}
]
}
在我的政策范围内,我已经改变了#34;桶" in"" arn:aws:s3 ::: bucket /" to" my-bucket"。
但是,一旦我尝试访问该存储桶的文件夹中的图像,我就会收到以下访问被拒绝错误:
此XML文件似乎没有任何关联的样式信息 用它。文档树如下所示。
(如果我明确地将该图像的属性更改为public,然后重新加载其url,则图像加载完美)
我做错了什么?
更新#1 :显然它与我可以访问的第三方网站有关。虽然它具有作为主用户(me)的所有权限,并且其对象位于同一文件夹中,具有完全相同的权限,但仍然不允许我将它们公开显示。不知道为什么。
更新#2 :广告投放管理政策不适用于对象"拥有"其他人,即使他们在你的桶中,请参阅my answer了解详情。
答案 0 :(得分:20)
根据GoodGets的评论,真正的问题是桶策略不适用于其他人“拥有”的对象,即使它们在你的桶中,请参阅{{3} }详情(+1)。
这是一个新的存储桶/对象设置还是您尝试将存储桶策略添加到预先存在的设置中?
在后一种情况下,由于可用的三种不同的S3访问控制机制之间的相互作用,您可能偶然发现了相关的陷阱,这可能相当混乱。例如,这可以解决在GoodGets' own answer中:
当您将ACL和存储桶策略分配给存储桶时,Amazon S3 评估现有的Amazon S3 ACL以及存储桶策略 确定帐户对Amazon S3的访问权限时 资源。如果帐户可以访问ACL或策略的资源 指定,他们能够访问所请求的资源。
虽然这听起来很容易,但是无意中的干扰可能是因为ACL之间存在微妙的不同默认值和策略:
使用现有的Amazon S3 ACL,授权始终提供对a的访问权限 桶或物体。使用策略时,拒绝始终覆盖a 授予即可。 [强调我的]
这解释了为什么添加ACL授权始终保证访问权限,但是,这不适用于添加策略授予,因为仍然会强制执行您的设置中其他位置提供的显式策略拒绝,如在例如图1中进一步说明的那样。 Using ACLs and Bucket Policies Together和IAM and Bucket Policies Together。
因此,我建议首先使用新的存储桶/对象设置来测试所需的配置,然后再将其应用到生产场景中(当然,这可能会产生干扰,但识别/调试差异会更容易)。
祝你好运!答案 1 :(得分:8)
存储分区策略不会将文件应用于其他所有者。因此,虽然我已经给第三方写入权限,但所有权仍然存在,而我的存储桶策略将不适用于这些对象。
答案 2 :(得分:3)
我浪费了几个小时,根本原因是愚蠢的,这里提到的解决方案没有帮助(我尝试了所有这些),AWS s3权限文档没有强调这一点。
如果您将Requester Pays
设置为ON,则无法启用匿名访问(通过存储桶策略或ACL“Everyone”)。您可以确保编写策略和ACL并应用它们甚至使用控制台将文件显式设置为公共,但是非签名URL仍会在该文件上100%被拒绝403访问,直到您取消选中{{ 1}}在控制台中为整个存储桶设置(选择存储桶时的属性选项卡)。或者,我假设,通过一些API REST调用。
未选中requester pays
,现在匿名访问正在运行,有引荐来源限制等。公平地说,AWS控制台告诉我们:
启用请求者付款时,将禁用对此存储桶的匿名访问。
答案 3 :(得分:0)
问题在于操作,它应该是 数组 格式
试试这个:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
在'资源'中传递广告管道名称
答案 4 :(得分:0)
如果您在Zencoder上传时出现此问题,请查看此页面:https://app.zencoder.com/docs/api/encoding/s3-settings/public
答案 5 :(得分:0)
以下政策将使整个存储桶公开:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
如果要使用存储桶策略将该存储桶下的特定文件夹公开,则必须将该文件夹/前缀明确设置为公共,然后按以下方式应用存储桶策略:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/images/*"]
}
]
}
以上政策将允许公众读取图片下的所有对象,但您将无法访问存储桶中的其他对象。
答案 6 :(得分:0)
我知道这是一个老问题,但是我想补充一些今天仍然有用的信息。
我认为该存储桶应该是静态站点。因此,必须使用特定的URL才能接受规则。为此,您必须在您的URL中添加一个“网站”。否则,它将像对待对象存储库一样对待它。
示例:
指出问题所在: https://name-your-bucket.sa-east-1.amazonaws.com/home
没有指出的问题: http://name-your-bucket.s3-website-sa-east-1.amazonaws.com/home
希望这会有所帮助:)
答案 7 :(得分:0)
这有效。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}