让我们假设以下情况:
在数据库顶部的node.js中编写了一个未定义数量的微服务
有一个前端应用程序使用基于令牌的身份验证和扩展的Actor模式来使用这些服务
返回文件需要某些请求
这些文档只能提供给具有特定文档权限的用户(权限是基于应用程序的,而不是基于操作系统的)
微服务端点从数据库中提取文档信息,该信息将包含文件服务器上文档的路径,该路径将由服务使用者应用程序解析,然后该应用程序将提供实际文档。
考虑到这些因素,我试图找出最安全,最快捷的方式(性能明智),使我的系统能够下载和上传文档。
这种方法仍然使用内置的权限系统来获取文档物理路径(不是它自己的文档),但是消费者服务器和文件服务器之间需要存在信任才能获得实际文档。 文件服务器绝不会暴露在互联网上。
编辑: 如果根据@JP建议,我决定将文档存储暴露给互联网,我担心如果前端遭到攻击,攻击者就能获得他想要的任何文件。
我不确定这是否可行,特别是如果有办法避免任何形式的信任并尽可能明确,但我希望有人能够建议更好的方式或实现这一目标的正确方法。
提前致谢!
答案 0 :(得分:1)
我认为最适合您的解决方案是让您远离管理上传,特别是如果您的关注度是一个问题。
在我看来,我认为使用S3是你最好的选择,特别是它的POST对象回调,https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
通过执行此操作,您可以让用户将文档直接上传到S3,而不是让您的服务器成为中间人,然后您可以在服务器收到S3存储桶中对象存在的通知后获取文件并对其进行操作。
在下载时,您也应该直接从S3提供文件。您可以将签名请求与CloudFront一起使用,以防止用户在您的S3存储桶中查看。您仍然需要检查数据库以查找相关文件的权限,除非您以某种方式将权限嵌入用户会话或其他内容,否则无法解决此问题。