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

jol*_*ola 3 amazon-s3 amazon-web-services 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
Run Code Online (Sandbox Code Playgroud)

第一个失败(拒绝访问),但第二个工作正常。没有一个发行版将查询字符串转发到 S3。

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

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

Mic*_*bot 6

签名 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 签名之前添加它...因为添加会更改签名。