具有多个S3来源的AWS CloudFront

时间:2018-07-27 13:06:03

标签: amazon-web-services amazon-s3 amazon-cloudfront

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

S3配置

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

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

两个存储桶都配置了“静态网站托管”选项,并且默认文件“ index.html”已上传到两个存储桶。

两个存储桶均已通过以下政策公开(对于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
    • 路径模式:subpage / *
  2. 第二行为
    • 来源:存储桶myapp.home
    • 优先级:1
    • 路径模式:默认(*)

问题

myapp.home的来源似乎可以正常工作,但是myapp.subpath总是使用以下所有URI返回AccessDenied错误:

  • host.domain.tld / subpath
  • host.domain.tld / subpath /
  • host.domain.tld / subpath / index.html

更新:我还尝试使用S3网站域(例如 myapp.subpath.s3-website-eu-west-1.amazonaws.com ,而不是普通存储桶域:首页仍然可以正常工作,但是这次子路径返回一个带有消息的404消息:“指定的键并不适用于以上所有URI。

我在做什么错了?

预先感谢

1 个答案:

答案 0 :(得分:0)

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

像下面这样:

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