具有多个 S3 源的 AWS CloudFront

AWS CloudFront with multiple S3 origins

我想配置 AWS CloudFront CDN 以提供来自两个 AWS S3 存储桶的 HTML 静态内容。一个存储桶应托管根目录中的对象,第二个存储桶应托管特定子路​​径中的对象。

S3 配置

第一个存储桶 myapp.home 应托管主页和直接位于“/”下的所有其他对象。

第二个存储桶 myapp.subpage 应该用于相同的目的,但用于一组以“/subpage/”开头的特定 URL。

两个存储桶都配置了 "static website hosting" 选项并启用了默认文档 "index.html",该文档已上传到两个存储桶。

两个存储桶都已 public 使用以下策略创建(在 myapp.subpage 的情况下,资源已相应调整)

{
    "Version": "2012-10-17",
    "Id": "Policy1529690634746",
    "Statement": [
        {
            "Sid": "Stmt1529690623267",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::myapp.home/*"
        }
    ]
}

CloudFront 配置

CDN 配置为响应名称 "host.domain.tld"。

CDN 配置有 2 个来源:

  1. 存储桶 myapp.home,具有以下属性:
    • 源域名:myapp.home.s3.amazonaws.com
    • 原始路径:空
    • 来源类型:S3 来源
  2. myapp.subpage,具有以下属性:
    • 源域名:myapp.subpage.s3.amazonaws.com
    • 原始路径:空
    • 来源类型:S3 来源

这些来源与 2 个缓存行为相关联:

  1. 第一个行为
    • 来源:水桶myapp.subpage
    • 优先级:0
    • 路径模式:子页面/*
  2. 第二个行为
    • 来源:水桶myapp.home
    • 优先级:1
    • 路径模式:默认 (*)

问题

myapp.home 来源似乎工作正常,但 myapp.subpath 使用以下所有 URI 时总是 returns 出现 AccessDenied 错误:

更新:我还尝试使用 S3 网站域替换来源,例如myapp.subpath.s3-website-eu-west-1.amazonaws.com,而不是普通的 buckets 域:主页仍然有效,但这次的子路径 returns a 404带有消息:"The specified key does not exist" 以上所有 URI。

我做错了什么?

提前致谢

第一个行为中的"subpage/*"是myapp.subpage中的目录。
在桶中创建一个名为subpage的目录,然后将index.html放入这个桶中。

如下所示:

* myapp.subpage <bucket name>
  * subpage <directory>
     * index.html