我正在尝试找出允许客户将媒体(照片和视频)上传到我的 S3 存储桶的最简单方法,而无需授予他们直接访问权限或使用预签名 URL。
我的想法是,我不希望发生任何类型的媒体处理,我唯一感兴趣的是保护 S3 存储桶不与客户端直接接触,并记录有关正在上传的文件的信息(例如大小、类型等)。
您对如何以简单的方式实现此架构有什么想法吗?
最佳答案
从移动应用上传
要将文件从移动应用程序上传到 Amazon S3:
- 在您的后端,使用 AWS Security Token Service生成临时凭证
- 将凭据传递到您的移动应用
- 移动应用程序随后可以调用 AWS API
临时凭证可以被授予一组有限的权限(例如上传到特定存储桶和路径),并且仅在有限的时间内有效,最多一小时。这是良好的安全实践,因为移动设备上不会保留永久凭据。
从网页上传
通过 HTML 表单使用基于浏览器的上传。这允许 HTML 页面中的表单直接安全地上传 Amazon S3 - 甚至上传到私有(private)文件夹。它使用签名策略来定义允许的操作(例如上传到特定位置、达到特定文件大小、使用特定权限集)。
表单可以是静态的——无需为要上传的每个单独文件重新计算签名。
参见:Authenticating Requests in Browser-Based Uploads Using POST
关于Java - 充当文件上传到 S3 的中间人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27347766/