CloudFront 上的 IllegalLocationConstraintException(对于 S3)

sen*_*nty 13 cdn amazon-s3 amazon-web-services amazon-cloudfront

我已经创建了一个 S3 并且我成功地在存储桶上上传了文件。现在,我试图让它与 CloudFront 一起工作,但它给了我

非法位置约束异常

ap-east-1 位置约束与此请求发送到的区域特定端点不兼容。

我的 S3 网址是:http : //my-bucket-name.s3.ap-east-1.amazonaws.com/assets/local/css/app.css(这会返回文件)

CloudFront 链接到 S3,网址为:https : //id.cloudfront.net/assets/local/css/app.css(这会返回 IllegalLocationConstraintException)


在 S3 存储桶 > 权限 >

“阻止公共访问”已关闭

“存储桶策略”是自动生成的:

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "######"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket-name/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

sen*_*nty 25

即使您在 CloudFront 中自动选择 S3 作为相关存储桶,您仍然需要手动放置您的位置以使其工作。


更新:

我的问题是因为我的 CloudFront 源不在 us-east,并且当您在 CloudFront 中自动选择存储桶的源时,它不会将位置前缀添加到 url。因此,请确保像这样添加 s3 位置:

bucketname.s3.ap-east-1.amazonaws.com

  • 在米兰地区非常适合我。你可能拯救了我几个小时的绝望。 (4认同)
  • Amazon UI 会在下拉列表中为您提供一个不完整的名称,其中不包含区域。看来命名约定对我来说是不同的。通过将原始域名设置为:bucketname.s3-website.region.amazonaws.com,让我的 Cloudfront 发行版提供 s3 存储桶内容,这实际上只是您可以直接浏览的 s3 网站域 (3认同)
  • @IvanCarosati 同样在这里。我不明白为什么一旦选择了 s3 存储桶就没有根据区域正确指定。 (2认同)

小智 9

  1. 转到您的 CloudFront 仪表板并单击分配 ID
  2. 转到“来源和来源组”选项卡
  3. 选择您的来源并单击“编辑”
  4. 编辑“原始域名”以匹配此格式 bucketname.s3.regioncode.amazonaws.com
  5. 保存并等待“部署”状态