【发布时间】:2018-09-03 06:37:09
【问题描述】:
我想提供对 S3 存储桶的公开写入访问权限,但可以选择限制上传大小。
通过存储桶策略启用对存储桶的公共写入访问权限是不够的,因为没有这样的s3 condition 来限制上传大小。
另一个推荐的解决方案是使用签名的POST policy,它有content-length-range,但我不能直接使用它,因为策略需要一个过期日期,显然每个请求都会改变。我无法使用实际凭据部署(桌面)应用程序,这意味着我无法签署策略。
经过进一步研究,我看到了以下选项:
-
a) 创建一个 lambda 端点我将文件上传到该端点
lambda 函数将验证文件大小,并将文件复制到 S3 存储桶。文件大小限制很小(最多约 MB),因此 lambda 执行时间限制应该不是问题。
-
b) 创建一个生成签名的 POST 策略
的 lambda 端点然后上传文件会产生两个请求:(1) 发出 GET 请求以获取新的签名策略,以及 (2) 使用检索到的策略将文件直接上传到 S3。
-
c) 创建一个 生成预签名 URL 的 lambda 端点
和 b) 差不多。
问题:
- 推荐的方法是什么/每种方法的优缺点是什么?
- 使用签名的 POST 策略和预签名的 URL 之间有实际区别吗?尤其是考虑到预签名 URL 无论如何都使用相同的 POST 策略。
【问题讨论】:
-
POST 策略要求用户拥有 IAM 凭证。使用预签名 URL,您可以与没有 IAM 凭证的任何用户共享该 URL,并且他们可以上传/下载文件。所以例如如果您希望您的客户将文件上传到您的 S3 存储桶但不想创建 AWS IAM 用户。您可以根据需要 IAM 凭据的 POST 策略生成预签名 URL。
标签: amazon-web-services amazon-s3 file-upload aws-lambda