从自定义域访问静态站点时出现 403(禁止)错误

Getting 403 (Forbidden) error when accessing static site from custom domain

我正在 S3 和 Cloudfront 上设置一个静态站点。我在 Cloudfront 上设置了 SSL 等,我可以使用 *.cloudfront.net URL 访问该站点。但是,从自定义域访问时,出现 403 错误。有谁知道为什么?桶策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXX"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::www.mydomain.com/*"
        }
    ]
}

这应该允许从自定义域 mydomain.com 访问,对吗?

为了测试,我尝试设置"Principal": "*",但它仍然给出 403。

感谢任何帮助。

这个问题看起来是由 "Object is not publicly available for read" 引起的。

默认情况下,S3 Buckets 设置为 "block all public access." 因此您需要检查它是否被禁用。

然后您可以将您的对象配置为公开可用,这可以通过两种方式完成:

  1. Bucket Level Restriction via Policy
  2. Object Level Restriction (in case you have a use case that requires granular control)

最后,如果您有上传这些内容的脚本,您也可以使用此脚本按需附加限制策略。

aws s3 cp /path/to/file s3://sample_bucket --acl public-read

我现在已经修好了。我错误地将 'Alternate Domain Names' 留空了。

我知道这是一个较旧的问题,但我想我会为未来的搜索者补充:确保(截至 2021 年年中)您的 Cloudfront 来源配置为命中 example.com.s3- website-us-east-1.amazonaws.com 而不是 example.com.s3.amazonaws.com 一旦你为静态网站托管设置了 S3 存储桶 - 我被绊倒了,因为(同样,从 2021 年年中开始) Cloudfront UI 建议后者,不正确的 S3 URL 作为下拉自动完成并且它们足够接近以至于如果您试图从内存而不是遵循文档,您可能无法弄清楚细微的区别是什么。