我正在尝试通过 CloudFront 公开托管在 S3 中的静态站点。
S3 存储桶( testyop1
) 设置为托管静态网站(非公开模式),其存储桶策略为
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E...."
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::testyop1/*"
}
]
}
网站托管配置表明这index.html
是索引文档。
在 CloudFront 端,源域名设置为 ,testyop1.s3-website-eu-west-1.amazonaws.com
不带任何源路径。该名称取自 S3 网络托管配置(不带http://
)。
我可以访问https://xxxxx.cloudfront.net
,以及https://xxxxx.cloudfront.net/index.html
(其中 xxxxx 是 CloudFront 生成的名称)
所有其他调用均https://xxxxx.cloudfront.net
失败
403 Forbidden
Code: AccessDenied
Message: Access Denied
RequestId: F...D
HostId: i...V4X7l4=
尽管.html
文件存在(在根目录和子目录中)。
该错误消息是来自 S3 吗?(或 CloudFront?)
除了上述的Bucket Policy之外,还需要设置哪些具体的授权?
答案1
您不能将 Origin Access Identity 与网站托管功能相结合。OAI 仅适用于 REST。您的对象必须是可公开访问的,才能使用 CloudFront 后面的网站终端节点,因为网站端点不支持身份验证。