我们试图通过Cloudfront分发S3存储桶,但由于某些原因,唯一的答案是AccessDenied XML文档,如下所示:
<Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>89F25EB47DDA64D5</RequestId> <HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId> </Error>
以下是我们正在使用的设置:
这是斗的政策
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity *********" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::x***-logos/*" } ] }
如果您正在访问CloudFront分配的根目录,则需要设置默认的根对象: http : //docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html
要使用CloudFront控制台指定默认根对象,请执行以下操作:
loginAWSpipe理控制台并通过以下url打开Amazon CloudFront控制台: https: //console.aws.amazon.com/cloudfront/。
在顶部窗格中的分发列表中,select要更新的分发。
在“ 分发详细信息”窗格的“ 常规”选项卡上,单击“ 编辑” 。
在“ 编辑分布”对话框的“ 默认根对象”字段中,input默认根对象的文件名。
只input对象名称,例如index.html
。 不要在对象名称前加上/。
要保存更改,请单击是,编辑 。
我刚刚有同样的问题,虽然Kousha的答案确实解决了在根pathindex.html的问题,我的问题也是与子目录,因为我用这些index.html结合“漂亮的url”(例如.com / something /而不是“丑陋”example.com/something.html)
部分也是亚马逊的错,因为当你设置CloudFront发行版时,它会为你提供S3桶可供select,但是如果你select其中一个,它将使用桶URL而不是静态网站托pipeURL作为后端。
所以要解决这个问题:
我和@Cezz有同样的问题,虽然解决scheme不适用于我的情况。
只要为存储区启用了静态网站托pipe,就意味着用户可以通过Cloudfront URL或S3 URL来访问该内容,这并不总是可取的。 例如,就我而言,Cloudfront分发是启用SSL的,用户不能通过非SSL连接访问它。
我find的解决scheme是:
请注意,虽然在我的情况下,我服务的是一个页面的JavaScript应用程序,其中所有path都由index.html解决。 如果您的path已经parsing到S3存储桶中的不同对象,则无法工作。
在我的情况下,我使用“path模式”行为的多个来源以及我的S3存储区中的“来源path”:
CloudFront行为: /images/*
– > My-S3-origin
我的S3来源:原始path: /images
S3文件:/images/my-image.jpg
GET请求:/images/my-image.jpg – > 403
发生了什么事是整个CloudFront GET请求被发送到origin: /image/my-image.jpg
前缀由Origin Path: /images
,所以到S3的请求看起来像/images/images/my-image.jpg
它doesn不存在。
删除原始path。
这使我可以访问具有源访问标识和存储区权限以及个人文件许可限制的存储区。