【问题标题】:How to add a query string parameter to Cloudfront?如何向 Cloudfront 添加查询字符串参数?
【发布时间】:2020-12-12 00:13:02
【问题描述】:

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

【问题讨论】:

  • 那么您的问题到底是什么:如何将查询字符串转发到 S3 或如何让 S3 接受它们?
  • 对不起,如果不清楚,但问题是如何让 Cloudfront 接受查询字符串而不返回“拒绝访问”响应。
  • 是的,该对象确实存在,在没有自定义查询参数的情况下请求它可以正常工作,但如果我添加一个参数(如上面示例中的测试参数),我会收到拒绝访问。我不需要修改“转发的查询字符串”设置,因为我不需要查询去 S3,我只需要它被 Cloudfront 的访问日志捕获,即使没有转发也应该,根据@987654321 @ And (jfyi) 在现有发行版上更改它可以正常工作(尽管我不需要这样做:-)
  • 参考这个。希望能帮助到你。 stackoverflow.com/questions/54965779/…

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


【解决方案1】:

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

【讨论】:

  • 谢谢,这就解释了!不过,亚马逊最好在他们的文档中澄清这一点。他们说(在 Web 应用程序附加查询字符串的情况下):“如果您使用签名的 URL,并且您希望将 CloudFront 配置为将查询字符串转发到您的源,您自己的查询字符串参数不能命名为 Expires、Key-Pair- ID、策略或签名。”这让我想到它可以在客户端完成。我将尝试设置一个 cookie,然后希望在 Cloudfront 日志中进行跟踪。
【解决方案2】:

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

例如,如果您对 URL 签名:https://example.com/images/funny/cat.png*,那么您将能够向 URL 添加可选参数。

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

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2017-02-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多