我已经成功配置了S3存储桶以服务于静态网站,并且如果在存储桶中未找到文件,还可以重定向到Lambda函数。
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals/>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>mylambda.execute-api.us-east-1.amazonaws.com</HostName>
<ReplaceKeyPrefixWith>/?key=</ReplaceKeyPrefixWith>
<HttpRedirectCode>307</HttpRedirectCode>
</Redirect>
</RoutingRule>
</RoutingRules>
如果我使用静态网站的http网址,效果很好
http://mybucket.s3-website-us-east-1.amazonaws.com/some-file.gif
但是如果我使用https桶url则无法使用。它返回 AccessDenied
https://s3.amazonaws.com/mybucket/some-file.gif
我也尝试添加cloudfront,问题是相同的。 https://mycloudfront.cloudfront.net/some-file.gif给了我相同的 AccessDenied
好像不适合使用https吗?
答案 0 :(得分:1)
第一个网址:
mybucket。 s3-网站 -us-east-1.amazonaws.com/some-file.gif
是website endpoint。它仅支持HTTP,不 HTTPS。 Docs写道:
网站终端节点不支持HTTPS或Amazon S3访问点。
第二个网址:
s3.amazonaws.com /mybucket/some-file.gif
Legacy Global Endpoint仍在弗吉尼亚北部地区使用。这些{即服务端点)用于to:
以编程方式连接到AWS服务
它们support都是HTTP和HTTPS。
因此,回答您的问题 https: // mybucket.s3-website-us-east-1.amazonaws.com/some-file.gif失败,因为不支持HTTPS网站端点。
https://s3.amazonaws.com/mybucket/some-file.gif失败,因为它用于编程访问,而不是通过浏览器或curl使用。但是,如果将对象设置为 public ,则仍然应该可以访问它们。
对于CloudFront,您需要提供更多信息或提出新问题。这取决于您如何设置CF Disto和存储桶。