CloudFront为第二个来源提供403

时间:2018-01-26 23:29:18

标签: amazon-s3 amazon-cloudfront

我正在尝试建立一个主要区域不需要身份验证的网站。但子域需要用户登录。我试图通过使用CloudFront站在两个S3桶前面来实现它。我有一个在线获得的lambda函数,它将被插入到一个行为中。

至于s3,我创建了两个桶,一个是www.xxx.com.s3.amazonaws.com,第二个是www.xxx.com.relj.s3- website-us-east-1.amazonaws .COM。两个存储桶都启用了静态网站托管。已禁用公共访问,以及主存储桶的存储桶策略

{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
    {
        "Sid": "1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EXXXCD2PW2IQU"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::www.xxx.com/*"
    }
]

}

另一个存储桶的存储桶策略是

{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
    {
        "Sid": "1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EXXXCD2PW2IQU"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::www.xxx.com.relj/*"
    }
]

}

对于我的云端设置,我有两个来源,www.xxx.com.s3.amazonaws.com和www.xxx.com.relj.s3-website-us-east-1.amazonaws.com。我设置了三个行为,一个是默认行为,另一个是/ ,最后一个是relj / 。最后一个指向附带lambda函数的www.xxx.com.relj.s3-website-us-east-1.amazonaws.com。

当我访问主站点dXXjxu7k28es7y.cloudfront.net时,我可以看到我的网站。但是当我执行dXXjxu7k28es7y.cloudfront.net/relj/index.html时,我看到了登录提示。在我输入正确的用户名和密码之后,它给了我403.我甚至尝试将所有内容都放在relj桶中,我仍然无法通过dXXjxu7k28es7y.cloudfront.net/relj/index.html访问它。我可以从https://s3.amazonaws.com/www.xxx.com.relj/index.html访问它。

回复是

403, Forbidden
date: Sat, 27 Jan 2018 01:15:07 GMT
x-amz-error-code: AccessDenied
last-modified: Fri, 26 Jan 2018 22:23:50 GMT
server: AmazonS3
etag: "b5aa4b118fdf2980dd7e4d7d81db9a08"
x-amz-error-message: Access Denied
content-type: text/html
via: 1.1 bdfe34c94134f86b07ebb7714d12d095.cloudfront.net (CloudFront)
x-cache: Error from cloudfront
connection: keep-alive
content-length: 51
x-amz-cf-id: hRebSOcNA38KGcXkA2LrzXftvqxaSB7ffVqbqcrWj0_2rQua9aQAkA==

我是新手,因此所有这些政策对我来说都是新手。从我所看到的,lambda执行所以它到达网址。我可以提供更多信息。谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

回复这个旧帖子给后面的人:

就我而言,我有两个 s3 起源 其中之一我配置了 qa/*

的默认行为

我遇到的问题是默认全路径转发到bucket 例如请求 myurl.com/qa/xxx.html 是将 qa/xxx.html 请求转发到我的 qa 来源,我只希望 xxx.html 被转发

为了快速修复,我将我的文件移动到第二个原始存储桶上的 qa 文件夹中