不允许直接调用微服务。仅允许通过API网关

问题描述 投票:10回答:5

也许这是一个奇怪的问题(我是微服务的新手)。但我正在寻找有关如何继续这一点的一些信息。不需要特定于Spring,但这是我目前正在使用的框架。

示例:假设我们有两个微服务

a)http://myurlfortesting.com:8085/api/rest/serviceone

b)http://myurlfortesting.com:8090/api/rest/servicetwo

我们设置了Spring Zuul(充当API网关),其中包含以下转发来电的规则:

/ rest / one - > http://myurlfortesting.com:8085/api/rest/serviceone

/ rest / two - > http://myurlfortesting.com:8090/api/rest/servicetwo

问题是:有没有办法阻止用户直接访问A和B中提到的服务(只允许通过API网关提供的服务)?

可以通过设置一些额外的过滤器或者我们在微服务端点中设置它来使用Springs Zuul(充当API网关)吗?

甚至想知道是否有一种方法甚至不能处理不通过API网关的微服务端点上的直接调用。

也许这是通过服务器特定规则解决的,与Spring无关?

非常感谢,

/ d

java spring rest microservices gateway
5个回答
5
投票

假设您有防火墙,您可以将服务器的入站流量限制为Zuul端点所在的端口,并禁止任何人直接访问微服务端口。

如果您想避免使用防火墙路由,可以强制端点在转发请求之前检查特定HTTP标头或由Zuul设置的内容,但这样做很容易规避。根据我过去的经验,“正确”的方式是通过防火墙来做到这一点。您的应用应负责处理请求。您的防火墙应负责决定谁可以命中特定的端点。


3
投票

通常,通过实施适当的OAuth服务器来处理这种情况,其中只有您的API网关将处理令牌验证。任何对微服务的直接调用都不会进行正确的令牌交换,因此请求将被中止。

如果您已经在任何云上部署了微服务,那么您可以通过仅将路由暴露给API网关来实现这一点。是的,防火墙阻止,IP白名单是限制对微服务的访问的一些其他方式。


2
投票

使用反向代理。我们将Nginx用于同一目的。 Api网关应始终部署在负载平衡器后面,以用于生产方案,以避免网关成为单点故障。此外,网关和服务部署在VPC中。 enter image description here


0
投票

我们正在使用jHipster-Gateway达到同样的目的:

查看HERE了解更详细的架构。


0
投票

使用AWS API Gateway执行此操作的正确方法是使用最近启动的“VPC Link”集成,该集成可确保API网关与VPC内部后端之间的连接。

https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-endpoint-integrations-with-private-vpcs/

© www.soinside.com 2019 - 2024. All rights reserved.