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

也许这是一个奇怪的问题(我是微服务的新手)。 但我正在寻找有关如何继续这一点的一些信息。 不需要特定于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网关提供的服务)?

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

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

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

非常感谢,

/ d

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

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

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

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

我们使用jHipster-Gateway用于同样的目的:

这里查看更详细的架构。

使用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/

Interesting Posts