为什么 CloudFront 提供的 S3 存储桶中只有 index.html 可用,而没有其他内容?

WoJ*_*WoJ 6 amazon-s3 amazon-cloudfront amazon-web-services

我正在尝试通过 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/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

网站托管配置声明这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=
Run Code Online (Sandbox Code Playgroud)

尽管.html存在文件(在根目录和子目录中)。

该错误消息是否来自 S3?(或 CloudFront?)

除了上述 Bucket Policy 之外,还应该设置哪些具体授权?

Mic*_*bot 5

您不能将 Origin Access Identity 与网站托管功能结合使用。OAI 仅用于 REST。您的对象必须可公开访问才能使用 CloudFront 后面的网站终端节点,因为网站终端节点不支持身份验证

  • 虽然您的回答非常正确,但我现在意识到 CloudFront 无法处理裸 URL - 即 `http://example.com/hello/` 应该打开 `http://example.com/hello/index.html` (也相关:https://forums.aws.amazon.com/message.jspa?messageID=314454) (2认同)