我使用 Cloudfront 和路由 53 在 aws s3 上设置了一个静态网站。
目前我可以通过https://www.example.com
正确访问网站
我正在尝试重定向 http://example.com
和 https://example.com
至https://www.example.com
(http://www.example.com
已经正确重定向)。
似乎设置它的唯一方法是使用两个云端分布和两个 s3 存储桶(以及路由 53 中的两个别名 A 记录)。
我已经配置了 example.com
桶重定向到www.example.com
使用 https 协议(protocol)。
其中一个云端发行版指向 www.example.com
带有 http 到 https 重定向的存储桶,默认根对象为 index.html
备用域名为 www.example.com
其他云端发行版指向 example.com
没有 http 到 https 重定向的存储桶,并且在默认根对象中没有设置任何内容(我也尝试过 index.html,但没有帮助),备用域名为 example.com
.
两个发行版在 ACM 中使用相同的证书设置,涵盖 *.example.com
和 example.com
(其他设置使用默认值)。
当我尝试通过 https://example.com
访问时,我不清楚为什么会收到拒绝访问错误。 (或 http://example.com
)我的设置有什么问题?
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>....</RequestId>
<HostId>.....</HostId>
</Error>
更新有关存储桶的更多详细信息:正如下面评论中提到的,根域 s3 存储桶在没有云端的情况下正确重定向。重新添加 cloudfront 并且拒绝访问错误再次出现。
两个存储桶都具有公共(public)访问权限,即
Block all public access
设置为关闭。两者的存储桶策略设置为:
{
"Version": "2012-10-17",
"Id": "Policy1595518880784",
"Statement": [
{
"Sid": "Stmt1595518834954",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example.com/*"
}
]
}
对于子域存储桶,它有一个 ..:::www.example.com/*
在资源中。Cloudfront 中使用的存储桶来源是
example.com.s3.amazonaws.com
和 www.example.com.s3.amazonaws.com
最佳答案
问题在于重定向存储桶前面的云端分布。虽然 cloudfront 中 www 存储桶的来源的自动完成工作正常,但它不适用于重定向存储桶。相反,您需要手动添加它,它不是 s3 rest api 格式,而是静态站点版本。因此,请改为输入 example.com.s3-website-us-east-1.amazonaws.com
形式的内容。这似乎有点像 aws 控制台中的错误,它不应该在 s3 重定向存储桶之前自动完成无效的存储桶名称。
关于amazon-web-services - Cloudfront 到 s3 重定向到子域给出访问被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63178996/