10

我正在构建一个 Web 应用程序,并正在研究使用 Amazon S3 来存储用户上传。

我担心的是,我不希望用户 A 看到他上传的文档的下载链接是 urltoMyS3/doc1234.pdf 并尝试 urltoMyS3/doc1235.pdf 并获取另一个用户文档。

我能想到的唯一方法是只允许 Web 应用程序连接到 S3,然后检查用户是否有权访问 Web 应用程序上的文件,让 Web 应用程序下载文件,然后提供它给客户。这种方法的问题是应用程序必须首先下载文件,并且不可避免地会减慢用户的下载过程。

Amazon S3 通常如何处理用户文件?还是它通常不用于文件不应该公开的场景?还有其他类似的服务吗?

谢谢

4

3 回答 3

8

您可以实施Query String Authentication,这将解决您的问题。

查询字符串身份验证对于让 HTTP 或浏览器访问通常需要身份验证的资源很有用。查询字符串中的签名保护请求。查询字符串身份验证请求需要到期日期。您可以在纪元或 UNIX 时间(自 1970 年 1 月 1 日以来的秒数)中指定任何未来的到期时间。

于 2012-10-18T20:58:04.920 回答
4

您可以通过生成适当的链接来做到这一点,请参阅以下内容

https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth

于 2012-10-18T21:02:15.967 回答
0

如果有时限的身份验证不起作用(如其他答案中所建议)。您可以考虑实施 s3fs 之类的东西来将您的 S3 存储桶作为驱动器安装在您的 Web 应用程序服务器上。通过这种方式,您可以简单地进行身份验证,然后将文件直接提供给用户,而他们不知道文件驻留在 S3 中。同样,您可以简单地将上传的文件直接写入此 s3fs 挂载。

S3fs,还允许您在您的机器上配置 S3 目录的本地缓存,以便更快地访问。

这在集群 Web 服务器环境中也能很好地工作,因为您可以让每台服务器安装 s3fs 驱动器并在其上独立执行/读取/写入。

包含更多信息的链接

于 2012-10-18T22:54:09.527 回答