【问题标题】:Serving permitted documents in microservices environment在微服务环境中提供允许的文档
【发布时间】:2018-08-18 06:53:48
【问题描述】:

让我们假设以下场景:

  • 在数据库之上用 node.js 编写的微服务数量不定

  • 有一个前端应用程序使用基于令牌的身份验证和扩展的 Actor 模式来使用这些服务

  • 某些要求需要退回文件

  • 这些文档只能提供给具有特定文档权限的用户(权限是基于应用程序的,而不是基于操作系统的)

  • 微服务端点从数据库中获取文档信息,其中包含文件服务器上文档的路径,该路径将由服务消费者应用程序解析,然后服务于实际文档。

考虑到这些事情,我正试图找出最安全和最快的方法(性能方面),以使我的系统能够下载和上传文档。

这种方法仍然使用内置的权限系统来获取文档物理路径(而不是它自己的文档),但是消费者服务器和文件服务器之间需要存在信任才能获取实际文档。 文件服务器绝不会暴露在互联网上。

编辑: 如果按照@JPs 的建议,我决定使用暴露在互联网上的文档存储,我担心万一前端受到攻击,攻击者将能够获得他想要的任何文档。

我不确定这是否是正确的方法,尤其是如果有办法避免任何形式的信任并尽可能明确,但我希望有人能够提出更好的方法或正确的方法实现这一目标。

提前致谢!

【问题讨论】:

    标签: node.js architecture microservices


    【解决方案1】:

    我认为对您来说最好的解决方案是远离上传管理,尤其是在您关心规模的情况下。

    在我看来,我认为使用 S3 是最好的选择,特别是利用它的 POST 对象回调,https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html

    通过这样做,您可以让用户将文档直接上传到 S3,而不是让您的服务器充当中间人,然后您可以在您的服务器收到 S3 存储桶中存在对象的通知后获取文件并对其进行操作。

    在下载时,您还应该直接从 S3 提供文件。您可以将签名请求与 CloudFront 一起使用,以防止用户在您的 S3 存储桶中闲逛。您仍然需要检查数据库以获得相关文件的权限,除非您以某种方式将权限嵌入用户会话或其他内容中,否则无法解决此问题。

    【讨论】:

    • 感谢您的回答,我已经稍微编辑了我的问题以回答您的问题并避免混淆。这纯粹是架构问题,所以我正在寻找潜在的替代解决方案(更安全、更快、更好)来解决这个问题。
    • 我已经更新了我的答案,我仍然不清楚你的问题的前提是什么,你问的问题很简单,但是“最快”或“最安全”的问题并没有对我来说很有意义。
    • 请参阅将文档存储移动到 s3 实际上会将文档暴露给我想避免的 Internet。在我的场景中,文档存储永远不会暴露在互联网上,服务服务文档需要首先与底层微服务层对话,获得资源授权,然后获取实际文档。所以我需要看看你提出的签名请求。如果你解释它是如何工作的,那可能是我正在寻找的答案的有价值的部分。
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2019-09-07
    • 2018-10-04
    相关资源
    最近更新 更多