微服务-安全实现

Microservices - Security Implementation

在微服务部署中,在微服务级别或 api 网关级别处理安全性哪个更好?有没有一种情况比另一种更合适?

我想说这是使用某种反向代理作为安全网关的常见方式,它会生成某种安全令牌,例如 SAML。

否则,例如,如果您有一些链式调用,例如微服务用户调用微服务事务日志,每个微服务都会一次又一次地为自己进行身份验证。这可能会变得非常昂贵。

来自this篇文章:

A major benefit of using an API Gateway is that it encapsulates the internal structure of the application. Rather than having to invoke specific services, clients simply talk to the gateway.

这只是意味着客户端通过 API 网关与微服务对话,并且该网关处理来自任何底层服务的所有请求。

因此,我认为如果您需要对请求进行任何授权,最好在 API 网关本身进行授权,因为这样一来,未经授权的请求永远不会到达您的服务。

但这也不是一个完整的解决方案。让我们考虑一个实际验证用户身份的服务。此服务将始终由尚未授权的用户访问,因此,在服务级别而不是 API 网关为该服务实施安全性是有意义的。

另外,考虑创建订单的服务。如果任何内部服务都可以调用此服务并创建订单,而不需要任何令牌(或任何其他身份验证过程)会怎样?现在可以使用多种方法解决此问题,例如:

  • 限制对内部服务的网络访问,例如除 API 网关之外的其他服务不能访问此服务。
  • Add/Proxy 所有服务的安全令牌(如 JWT),并在每个服务中验证针对该令牌的请求。

当然这是一个高层次的概述,是我的想法,我愿意看看别人怎么说。