【问题标题】:CloudFront is giving 403 for second originCloudFront 为第二个来源提供 403
【发布时间】:2018-07-06 08:42:39
【问题描述】:

我正在尝试建立一个主要区域不需要身份验证的网站。但是子域需要用户登录。我试图通过在两个 S3 存储桶前使用 CloudFront 来实现它。我有一个在线获得的 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==

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

【问题讨论】:

  • 您似乎正在尝试将 S3 静态 Web 托管功能与源访问身份混合并匹配,但该功能不起作用 -- it's outside the design scope of S3's static web site hosting to support authenticated access. 另请注意,CloudFront 不会返回此错误。 Server: Amazon S3x-amz-error-*text/html(不是 XML)错误内容表明 403 源自 S3 网站端点。究竟如何修复它取决于您需要完成的工作。
  • 我希望有两种行为,每种行为都击中不同的 s3 存储桶。解决此问题的最佳方法是什么?非常感谢。由于我有一个来源“www.xxx.com.s3.amazonaws.com”和另一个来源“www.xxx.com.relj.s3-website-us-east-1.amazonaws.com”,我应该更改第二个吗一个到“www.xxx.com.relj.s3.amazonaws.com”?
  • 为您的存储桶启用日志记录,并在生成 404 错误几分钟后查看日志以查看 S3 正在记录什么。
  • 我没有得到 404。2018-01-29 03:01:53 MIA3-C1 602 96.246.34.205 GET dXXjxu8k28es7y.cloudfront.net /relj/index.html 403 - Mozilla/5.0% 2520(在Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_13_3)%2520AppleWebKit / 537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome / 64.0.3282.119%2520Safari / 537.36 - - 错误bDL3zmAaF_CIiPhIhTvqH-32ovFkyDKV7K-X7XKa39fRgoebx1Inaw == dXXjxu8k28es7y .cloudfront.net http 466 0.001 - - - 错误 HTTP/1.1 行为路径模式设置为 relj/*。听起来对吗?谢谢。
  • 抱歉,打错字了,我想说的是 403。这是 CloudFront 日志。您想查看 S3 日志。请注意,浏览器请求的 URL 将被发送到存储桶,无论路径模式如何,它仅用于路由 - 它不会修改请求。对象键是relj/index.html 还是只是index.html

标签: amazon-s3 amazon-cloudfront


【解决方案1】:

为那些关注的人回复这个旧帖子:

在我的情况下,我有两个 s3 起源 其中一个我配置了 qa/* 的默认行为

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

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

【讨论】:

猜你喜欢
  • 2020-11-04
  • 2020-06-30
  • 2016-06-06
  • 2019-02-11
  • 2020-12-25
  • 2021-12-28
  • 2019-09-10
  • 2019-01-17
  • 2021-07-28
相关资源
最近更新 更多