使用Flask和AWS S3安全访问Web资产
我正在尝试安全地向用户提供文件(这里是图片)。我想用flask来实现这个功能,最好是使用亚马逊的S3存储,不过如果有其他云存储方案我也愿意考虑。
我已经成功把flask的静态文件,比如css,放到了S3上,但这些文件都是不安全的。也就是说,任何拥有链接的人都可以打开这些静态文件。这显然不是我想要的安全内容。我就是搞不明白怎么才能让文件只对那些“拥有”这个文件的认证用户可用。
举个例子:当我登录到我的Dropbox账户并复制一个随机文件的下载链接时,如果我换到另一台电脑上使用这个链接,它会拒绝我访问。尽管我仍然是登录状态,而且这个下载链接在另一台电脑上也是可用的。
1 个回答
1
首先,你需要向你的Flask应用发送请求,这个应用会验证用户身份,然后把你引导到S3的对象上。这里的关键是,跳转的链接应该是一个临时的签名网址,这个网址大约在一分钟后就会失效,这样别人就不能保存这个链接来以后使用了。
在你的Flask应用中,你可以使用 boto.s3.key.generate_url
这个函数来生成这个临时网址。