0

我正在通过 AWS Security Token Service (AWS STS) 创建临时凭证。并使用这些凭据将文件从 S3 JAVA SDK 上传到 S3。我需要一些方法来限制文件上传的大小。我试图在创建用户时添加策略(s3:content-length-range),但这似乎不起作用。有没有其他方法可以指定用户可以上传的最大文件大小?

4

2 回答 2

5

另一种方法是生成预签名 URL 而不是临时凭证。这对于一个具有您指定名称的文件会很好。您还可以在生成 URL 时强制设置内容长度范围。您的用户将获得 URL,并且必须对请求使用特定的方法(POST/PUT/等)。他们设置内容,而您设置其他所有内容。

我不确定如何使用Java来做到这一点(它似乎不支持条件),但使用Python 和 boto3很简单:

import boto3

# Get the service client
s3 = boto3.client('s3')

# Make sure everything posted is publicly readable
fields = {"acl": "private"}

# Ensure that the ACL isn't changed and restrict the user to a length
# between 10 and 100.
conditions = [
    {"acl": "private"},
    ["content-length-range", 10, 100]
]

# Generate the POST attributes
post = s3.generate_presigned_post(
    Bucket='bucket-name',
    Key='key-name',
    Fields=fields,
    Conditions=conditions
)

在进行测试时,请确保每个标题项都匹配,否则您会收到模糊的拒绝访问错误。完全匹配可能需要一段时间。

于 2017-11-03T17:12:35.650 回答
1

我相信在上传之前没有办法限制对象的大小,对此做出反应会非常困难。一种解决方法是通过 Lambda 函数或 SNS 主题创建触发您的代码的S3 事件通知。例如,这可以验证或删除对象并通知用户。

于 2017-11-03T11:39:20.107 回答