我正在构建一个Web应用程序,并正在考虑使用Amazon S3来存储用户上传。
我担心的是,我不希望用户A看到他上传的文档的下载链接是urltoMyS3 / doc1234.pdf并尝试urltoMyS3 / doc1235.pdf并获取另一个用户文档。
我能想到的唯一方法就是只允许Web应用程序连接到S3,然后检查用户是否可以访问Web应用程序中的文件,让Web应用程序下载文件,以及然后将它提供给客户。此方法的问题是应用程序必须首先下载文件,并且不可避免地会降低用户的下载过程。
用户文件通常如何使用Amazon S3处理?或者它是否通常不用于文件不应公开的场景?是否有其他类似的服务?
由于
答案 0 :(得分:9)
您可以实施Query String Authentication,这将解决您的问题。
查询字符串身份验证对于提供HTTP或浏览器非常有用 访问通常需要身份验证的资源。该 查询字符串中的签名可以保护请求。请求参数 身份验证请求需要到期日期。你可以指定 在纪元或UNIX时间内的任何未来到期时间(秒数 自1970年1月1日起)。
答案 1 :(得分:3)
您可以通过生成相应的链接来执行此操作,请参阅以下
答案 2 :(得分:0)
如果时间限制身份验证不起作用(如其他答案中所述)。您可以考虑实现类似s3fs的东西,将S3存储桶作为驱动器安装在Web应用程序服务器上。通过这种方式,您可以简单地进行身份验证,然后直接将文件提供给用户,而无需知道该文件位于S3中。同样,您只需将上传的文件直接写入此s3fs mount。
S3fs,还允许您在计算机上配置S3目录的本地缓存,以便更快地访问。
这也适用于集群Web服务器环境,因为您可以让每个服务器挂载s3fs驱动器并独立执行/读取/写入。