amazon-s3 - CloudFront 为第二个源提供 403

标签 amazon-s3 amazon-cloudfront

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

对于s3,我创建了两个存储桶,一个是www.xxx.com.s3.amazonaws.com,第二个是www.xxx.com.relj.s3-website-us-east-1.amazonaws .com。两个存储桶上均启用静态网站托管。已禁用公共(public)访问,并且主存储桶的存储桶策略为

{
"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/。最后一个指向 www.xxx.com.relj.s3-website-us-east-1.amazonaws.com 并附加了 lambda 函数。

当我访问主站点 dXXjxu7k28es7y.cloudfront.net 时,我可以看到我的网站。但是当我执行 dXXjxu7k28es7y.cloudfront.net/relj/index.html 时,我看到登录提示。输入正确的用户名和密码后,它给了我 403。我什至尝试将 relj 存储桶中的所有内容作为公共(public),我仍然无法通过 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==

我是 AWS 新手,所以所有这些政策对我来说都是新的。据我所知,lambda 执行后到达了 url。我可以提供更多信息。感谢您的阅读。

最佳答案

为以下内容回复此旧帖子:

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

我遇到的问题是默认将完整路径转发到存储桶 例如请求 myurl.com/qa/xxx.html 将对 qa/xxx.html 的请求转发到我的 qa 源,我只希望转发 xxx.html

我将文件移至第二个原始存储桶上的 qa 文件夹中以进行快速修复

关于amazon-s3 - CloudFront 为第二个源提供 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471010/

相关文章:

amazon-web-services - AWS Cloudfront 分布不显示 API 网关分布

amazon-web-services - 如何解决此错误 - 属性 {/DistributionConfig/Aliases} 的值与类型 {Array} 不匹配

amazon-s3 - Amazon S3 和 CloudFront

python - 使用 python 在 AWS S3 存储桶中搜索特定文件

amazon-web-services - 无法选择 S3 文件夹作为 AWS 上 CodePipeline 的源

amazon-web-services - AWS CloudFront : Font from origin has been blocked from loading by Cross-Origin Resource Sharing policy

c++ - 如何确保 boost::filesystem::remove 不会尝试删除另一个进程使用的文件?

caching - Akamai 与 CloudFront

reactjs - 如何将 json 文件从 s3 返回到特定的 url,但仅返回该 url

amazon-web-services - 当 CF 堆栈更新失败时准确确定缺少哪个 IAM 权限