【问题标题】:Security between microservices微服务之间的安全
【发布时间】:2016-10-18 06:28:28
【问题描述】:

我有两个微服务,例如 A 和 B。微服务 B 具有必须只能从微服务 A 访问的其余端点。 如何限制微服务之间的访问?如果可能的话,最好的做法是什么?

我正在使用 Spring Cloud Security(oauth2、jwt)。

【问题讨论】:

  • 我建议根本不允许微服务使用同步通信(改用消息传递和发布/订阅)。
  • 我认为这个问题与同步性无关?同步调用在支付等微服务中也完全有效
  • 有趣的问题,我不明白反对票...
  • 你能更详细地描述一下这个场景吗?

标签: spring-security microservices spring-cloud-feign spring-cloud-security


【解决方案1】:

这是一个网络问题。只需在网络级别限制对微服务 B 的访问。例如,如果使用 Docker,这可以很容易地完成。您不会公开为微服务 B 公开相关端口,而是在特定网络上公开它,然后让微服务加入该网络。

如果您想增加额外的安全性,您可以使用公钥/私钥。或者,为应用程序 A 生成 JWT 并在微服务 B 中验证它会更简单,但随着您添加更多微服务,这会产生更多管理开销。

或者,您应该研究一个可以为您处理 API 访问的 API 网关

【讨论】:

  • 这在 Kubernetes/Swarm 之类的东西中可行吗?(我打算用它们来构建我的架构)例如,如果我想将服务 A 限制为只能由服务访问CE 而不是 BD,有可能做这样的事情吗?
  • 我认为这会自动保护我的内部网络,不是吗?而且由于我的一切都在 API 网关后面,因此会自动处理外部安全
  • 有人曾经告诉我,依靠网络安全来确保应用程序安全只是“通过默默无闻的安全”,我认为他们是对的
  • @BigOmega 您能否详细说明您的评论意味着什么以使其具有建设性?这不是通过默默无闻的安全性,但如果建议是应用程序安全性不应该被网络级安全性取代,那么你是对的 - 两者都是必不可少的(并且不仅限于微服务)
  • @ExoticChimp,关于使用API​​ GW解决这个问题的建议,通常API GW用于南北请求,较少用于东西,因此两个微服务之间的通信在同一个应用不一定会流经 API GW。
【解决方案2】:

还有另一个微服务,它不是对业务问题负责,而是对非功能性业务问题负责:安全性。

这个微服务是合乎逻辑的(因为所有微服务都应该在逻辑上对业务问题负责)并且不是单独部署的,而是与其他微服务一起部署的。然后在接受任何调用或执行调用之前构建一个适当的 API,微服务 A 和 B 都知道并强制执行。

如果其他微服务应属于某些业务相关边界(有界上下文,如果您愿意的话)的一部分,则安全微服务位于非功能性需求的边界内。你可以称之为 IT/Ops 或 Devops 之类的。

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 2017-11-14
    • 2017-09-25
    • 1970-01-01
    • 2021-12-27
    • 2016-06-10
    • 2021-06-20
    • 2021-05-06
    • 2022-01-03
    相关资源
    最近更新 更多