我想向我的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
答案 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=*
。这样,w
和h
参数的值可以是任意值,但必须同时设置两个参数。