允许S3预签名URL中的未知键值对

时间:2019-05-03 23:46:50

标签: amazon-web-services amazon-s3 pre-signed-url

我有一个用例,其中我想为给定的对象密钥生成S3预签名的URL,但是如果添加了一些随机请求参数,则希望该URL工作。是否可以使用AWS Java SDK中的GeneratePresignedUrlRequest或SDK中的某些其他类来做到这一点?

示例

如果我的预签名URL是http://test.s3.amazonaws.com/sdfasdlkfjsd,而我请求http://test.s3.amazonaws.com/sdfasdlkfjsd?random=100&random=200,则我仍然希望能够忽略随机请求参数而下载该内容。目前,我得到了这个

<Error>
    <Code>SignatureDoesNotMatch</Code>
    <Message>
        The request signature we calculated does not match the signature you provided. Check your key and signing method.
    </Message>
    ....
</Error>

1 个答案:

答案 0 :(得分:1)

预签名URL旨在防止篡改。更改URL元素的任何修改都会使签名无效。这是设计使然,与Java SDK中的任何限制无关。

您当然可以在对URL进行签名之前 添加自定义值。 S3 access log documentation recommends these begin with x-和V4签名算法确实支持它,但是不清楚如何使用Java SDK来实现。使用JavaScript SDK时,a simple hack涉及事件挂钩。

或者,将CloudFront放在存储桶的前面。  使用自定义策略的CloudFront预签名URL支持wildcards in the Resource field,这是自定义策略中指定完整URL的字段。