Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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 web services 如何向Cloudfront添加查询字符串参数?_Amazon Web Services_Amazon S3_Amazon Cloudfront - Fatal编程技术网

Amazon web services 如何向Cloudfront添加查询字符串参数?

Amazon web services 如何向Cloudfront添加查询字符串参数?,amazon-web-services,amazon-s3,amazon-cloudfront,Amazon Web Services,Amazon S3,Amazon Cloudfront,我想向我的Cloudfront Url添加一个查询字符串参数,以便能够在Cloudfront日志中获得一些额外的信息。我有两个发行版,一个有符号,一个没有符号,指向两个不同的S3存储桶(一个有音频,一个有图像)。 在不添加查询字符串的情况下,对这两个发行版的访问都可以正常工作,但如果我添加一个查询参数,如下面的测试参数: https://x.cloudfront.net/audio.m4a?li=...62&Expires=1544430879&Signature=...QTQ_

我想向我的Cloudfront Url添加一个查询字符串参数,以便能够在Cloudfront日志中获得一些额外的信息。我有两个发行版,一个有符号,一个没有符号,指向两个不同的S3存储桶(一个有音频,一个有图像)。 在不添加查询字符串的情况下,对这两个发行版的访问都可以正常工作,但如果我添加一个查询参数,如下面的测试参数:

https://x.cloudfront.net/audio.m4a?li=...62&Expires=1544430879&Signature=...QTQ__&Key-Pair-Id=xxx&test=fail

https://y.cloudfront.net/image.jpg?test=allgood
第一个失败(拒绝访问),但第二个工作正常。 两个发行版都没有将查询字符串转发给S3

签名音频分发已启用日志记录,而图像分发未启用日志记录。除此之外,它们的设置是相同的

为了让音频分发接受我的自定义查询参数,我需要做什么? 谢谢
/o

签名URL背后的核心概念之一是它们不易被篡改——您无法更改签名URL并使其保持有效

CloudFront使用公钥验证签名并确认URL未被篡改。如果签名无效,请求将被拒绝

签名的CloudFront URL不能包含额外的查询字符串参数。如果在创建签名URL后将查询字符串添加到该URL,该URL将返回HTTP 403状态


要将查询字符串参数添加到CloudFront签名的URL,您需要在签名URL之前添加它。。。因为添加将更改签名。

通过在签名策略中的资源中添加星号(
*
),可以为已签名的cloudfront URL允许附加/可选参数

例如,如果您在URL上签名:
https://example.com/images/funny/cat.png*
然后您将能够向URL添加可选参数


如果参数不是可选的,您也可以这样签名:
https://example.com/images/funny/cat.png?w=*&h=*
。通过这种方式,
w
h
参数的值可以是任何值,但必须同时设置这两个参数。

那么您的问题到底是什么:如何将查询字符串转发到S3,或者如何使S3接受它们?如果不清楚,很抱歉,但问题是如何让Cloudfront接受查询字符串,而不是返回“拒绝访问”响应。是的,对象确实存在,在没有自定义查询参数的情况下请求它可以正常工作,但是如果我添加了一个参数(如上面示例中的测试参数),我会被拒绝访问。我不需要修改“forwarded query strings”设置,因为我不需要查询转到S3,我只需要Cloudfront的访问日志捕获它,根据和(jfyi),在现有发行版上更改它可以很好地工作(尽管我不需要这样做:-),即使不进行转发,它也应该被捕获。希望能有帮助。谢谢,这就解释了!不过,亚马逊最好在他们的文档中澄清这一点。他们说(在web应用程序附加查询字符串的上下文中):“如果您使用已签名的URL,并且希望将CloudFront配置为将查询字符串转发到您的源,那么您自己的查询字符串参数不能命名为Expires、Key Pair Id、Policy或Signature。”这让我想到可以在客户端完成。我将尝试设置一个cookie,希望它能在Cloudfront日志中得到跟踪。