我正在使用flask作为REST API的后端。我有一个数据库,其中包含用户和他们上传的图像信息。所有图像都存储在S3存储桶中,例如“ bucket_name / user_1 / img1.jpg” 。我想允许用户下载所有仅针对他们的图像,即文件夹“ user_1” 中的内容,并且他们不应该访问“ user_2” 图像。此外,存储桶及其内容是私有的。
图像表具有图像路径(例如“ bucket_name / user_1 / img1.jpg”),只能由flask应用访问。 REST API由Android应用程序使用。
因此,当Android应用程序上的用户获取其图像(使用GET请求)时,他应该能够下载所有图像。如何传递这些图像?
这个android-flask-AWS Flow应该如何工作?
答案 0 :(得分:0)
有两种方法可以实现这一目标。
预签名URL
保留所有内容私有。然后,当客户端(例如Android应用程序)需要访问对象时,您的应用程序应通过检查数据库来验证他们有权访问该对象。如果被允许访问,则应用程序应生成一个预签名URL ,该URL授予对对象的时间限制访问。
创建预签名URL仅需要几行代码,而无需调用AWS。因此,创建起来非常快,并且应用程序可以完全控制谁可以访问哪些对象。
临时证书
由于允许用户访问其文件夹中的所有内容,因此您可以{<3>}使用安全令牌服务。可以将策略分配给这些凭证,以允许访问s3://bucket_name/user_1/*
。然后,Android应用程序可以使用这些凭据直接调用AWS API以下载内容(或上传或执行您分配的任何权限)。
这使应用程序可以直接与AWS进行通信,而不必为每次对象访问而调用服务器。
如果您使用联合身份验证(例如,信任Facebook),则可能需要create Temporary Security Credentials。