我有一个用例,其中我想为给定的对象密钥生成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>
答案 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的字段。