Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 为同一Cloudfront发行版的不同来源配置不同的错误页_Amazon S3_Amazon Cloudfront - Fatal编程技术网

Amazon s3 为同一Cloudfront发行版的不同来源配置不同的错误页

Amazon s3 为同一Cloudfront发行版的不同来源配置不同的错误页,amazon-s3,amazon-cloudfront,Amazon S3,Amazon Cloudfront,我们创建了一个cloudfront发行版,它有2个来源(1个s3来源和1个自定义来源)。我们希望来自自定义源的错误(5xx/4xx)不经修改就到达客户端/用户,但是来自s3的错误页面将由cloudfront错误页面配置提供服务。这可能吗?目前Cloudfront不支持不同来源的不同自定义错误页-如果任一来源返回错误,Cloudfront将提供相同的错误页 您可以使用自定义源代码的错误响应 您需要将源响应触发器与与与您的源关联的行为相关联 CloudFront从源站收到响应后触发源站响应: 通过

我们创建了一个cloudfront发行版,它有2个来源(1个s3来源和1个自定义来源)。我们希望来自自定义源的错误(5xx/4xx)不经修改就到达客户端/用户,但是来自s3的错误页面将由cloudfront错误页面配置提供服务。这可能吗?目前Cloudfront不支持不同来源的不同自定义错误页-如果任一来源返回错误,Cloudfront将提供相同的错误页

您可以使用自定义源代码的错误响应

您需要将源响应触发器与与与您的源关联的行为相关联

CloudFront从源站收到响应后触发源站响应:

通过这种方式,您可以添加头、发出重定向、动态生成响应或更改HTTP状态代码

根据您的用例,您可能必须为这两个来源进行自定义

另请参见。

我通过将S3存储桶切换为静态网站,将其用作CloudFront自定义源站(即无源站访问标识),解决了(并…最终放弃了我的解决方案)此问题。我使用了一个
aws:Referer
bucket策略,将访问权限限制为仅通过CloudFront发送的请求

注意A
Referer
头通常包含请求的URL。在这个场景中,您只是用一个在CloudFront和S3之间共享的唯一的秘密令牌覆盖它

这在“使用网站端点作为原点,访问受限于Referer头”下进行了描述

我最终使用了一个随机UUID作为令牌,并在CloudFront源配置中设置了它。

使用相同的UUID,我最终得到了一个桶策略,如:

{
“Id”:“保单1603604021476”,
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“STMT1604014855”,
“委托人”:“*”,
“效果”:“允许”,
“行动”:[
“s3:GetObject”
],
“资源”:“arn:aws:s3:::示例/*”,
“条件”:{
“StringEquals”:{
“aws:参考文件”:“b4355bde-9c68-4410-83cf-058540d83491”
}
}
},
{
“Sid”:“STMT1604014855”,
“委托人”:“*”,
“效果”:“允许”,
“行动”:[
“s3:ListBucket”
],
“资源”:“arn:aws:s3:::示例”,
“条件”:{
“StringEquals”:{
“aws:参考文件”:“b4355bde-9c68-4410-83cf-058540d83491”
}
}
}
]
}
要使404正常工作,需要使用
s3:ListBucket
策略。如果没有,您将得到标准的S3AccessDenied错误页面

现在,我的每个S3源代码都可以有不同的错误页面行为,这些行为是在S3端配置的(而不是在CloudFront中)

跟进我不推荐这种方法,原因如下:

  • 不可能让S3在HTTPS上托管您的静态网站,因此您的Referer令牌将以明文形式发送。虽然这可能会出现在AWS网络上,但这仍然不是我所希望的
  • 无论如何,每个S3存储桶只能得到一个错误文档,因此与CloudFront行为相比,这并没有太大的改进