如何将查询字符串参数添加到Cloudfront?

时间:2018-12-10 08:29:22

标签: amazon-web-services amazon-s3 amazon-cloudfront

我想向我的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

2 个答案:

答案 0 :(得分:2)

签名URL背后的核心概念之一是它们不容易受到篡改-您无法更改签名URL并使它保持有效。

  

CloudFront使用公共密钥来验证签名并确认URL是否未被篡改。如果签名无效,则请求被拒绝。

     

...

     

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

     

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html

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

答案 1 :(得分:0)

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

例如,如果您对URL:https://example.com/images/funny/cat.png*进行签名,则可以向URL添加可选参数。

如果参数不应该是可选的,则也可以像这样签名:https://example.com/images/funny/cat.png?w=*&h=*。这样,wh参数的值可以是任意值,但必须同时设置两个参数。