我知道使用此方法限制对象的上传大小:http://doc.s3.amazonaws.com/proposals/post.html#Limiting_Uploaded_Content
但我想知道如何在服务器端使用S3 SDK作为IAM用户生成预签名网址时如何完成。
SDK中的此Url在其参数中没有此类选项:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
这两者都没有: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property
请注意:我已经知道这个答案:AWS S3 Pre-signed URL content-length并且它不是我想要的。
答案 0 :(得分:6)
V4签名协议提供了在签名中包含任意标头的选项。看到: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html 因此,如果您事先知道确切的内容长度,则可以将其包含在签名的URL中。根据CURL的一些实验,如果您发送的内容超过Content-Length标头中指定的数量,S3将截断该文件。以下是签名中具有多个标头的示例V4签名 http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html
答案 1 :(得分:3)
您可能无法事先限制内容上传大小,尤其是考虑上传POST
和Multi-Part
。您可以使用AWS Lambda
创建事后解决方案。您可以设置Lambda
函数来接收来自S3
存储桶的通知,让函数检查对象大小并让函数删除对象或执行其他操作。
答案 2 :(得分:0)
对于最终出现在此线程上的任何其他漫游者 - 如果您在从客户端发送请求时设置了 Content-Length 属性,则有几种可能性:
Content-Length 是自动计算的,S3 每个文件最多可以存储 5GB
内容长度由您的客户端手动设置,这意味着将发生以下三种情况之一:
在任何情况下,恶意用户都可以覆盖您的客户端并手动发送带有他们想要的任何标头的 HTTP 请求,包括比您预期的要大得多的 Content-Length。签名的 URL 不能防止这种情况!唯一的方法是设置 POST 策略。官方文档在这里:https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html
或者,您可以使用 Lambda 自动删除比预期大的文件。