我有一个应用程序,用户可以在其中上传他们的文档(假设某些文档是敏感文档,例如身份证明)。我的 S3 存储桶结构是这样的,每个用户都有自己的文件夹,其中保存他/她的文档。
应用程序在 MEAN 堆栈上运行。
截至目前,该存储桶是公开的。(敏感文件上传是未来的补充)。
我希望登录用户只能访问他/她的文档。此外,文档 URL 应该是安全的。(可能是预签名 URL)
对于上述要求,我应该采取什么方法?任何代码资源/文档等..?
您不应使用任何存储桶策略。存储桶应保持“私有”,并应通过以下两种方式之一向最终用户授予访问权限:
选项 1:提供临时 AWS 凭证
如果有“智能”客户端(例如移动应用程序或浏览器中的 JavaScript),您的后端可以使用AWS 安全令牌服务生成临时凭证。然后,客户端可以使用这些凭证直接与 AWS 服务对话,例如访问 Amazon S3 中的对象和读取/写入 DynamoDB 中的数据。
在后端负责认证用户,生成临时凭证并将它们传递到客户端,但不参与后续调用AWS。可以将策略附加到这些临时凭证以授予诸如“允许来自此 Amazon S3 存储桶的此特定子目录(路径)的 GetObject”等权限。
如果每个用户的策略只授予访问“他们的子目录”的权限,那么这符合您的要求,即他们只能访问他们的特定文档。
实现上述的一种常见方法是使用Amazon Cognito进行身份验证和分配权限。
选项 2:使用预签名 URL
在客户端的情况下,简单的网页那些不能直接使用AWS凭据调用AWS服务,安全性在后端使用预先签订的URL处理。
当后端生成链接到私有对象(例如通过<img src='...'>
)的网页时,后端应该:
此方法使后端完全控制用户可以访问 S3 中的哪些对象。它可以在数据库中维护这个列表,或者它可以依赖对象的路径来确定这个访问。这甚至可以扩展为允许在用户之间共享对象。例如,假设有一个照片共享应用程序,用户想要与其他用户共享照片。他们可以通过 UI 指示这一点,后端可以将其存储在数据库中。稍后,当用户想要查看共享照片时,后端会检查数据库以确认他们的权利,然后生成一个预签名的 URL 来查看共享对象,即使它在不同的路径中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句