5

我试图找出使用 Spring Cloud 和 Netflix 的堆栈来构建和实现微服务的最佳方法,特别是使用 Eureka 和 Feign。我对每个问题都有一些与安全相关的问题:

  1. 我已经看到您可以使用用户名/密码凭据配置 Eureka Server。这可以阻止未经授权的应用程序,但是每个应用程序必须共享凭据才能访问 Eureka。有没有一种简单的方法来创建凭据注册表,以便每个微服务都可以拥有自己的?(将它挂接到 Spring Security 的堆栈中会很不错——UserDetailService等等)

  2. 一旦微服务连接起来并通过 feign 进行通信,是否可以将原始请求中使用的凭据共享/传递给对其他微服务进行的其他调用?因此,如果“Jim”/foosFooService上请求,而FooService/barsBarService上请求,BarService会知道是 Jim 在请求它们吗?

Jim > FooService > BarService - BarService 知道正在为 Jim 处理请求的地方...

4

1 回答 1

1

大卫。你可能想看看我写的一篇关于保护 Spring Cloud 服务的文章。Spring 团队在很大程度上将这个主题留给了开发人员,因为组织之间的安全实现差异很大。此示例在 eureka 和配置服务器上使用基本身份验证。

http://www.baeldung.com/spring-cloud-securering-services

一些小收获应该是:除了系统其余部分的任何其他类型的身份验证之外,必须在配置和发现服务器上定义身份验证。这两个服务器必须处理自己的身份验证,因为它们通常需要在身份验证服务器启动之前运行(因为它从配置服务中提取它的配置并注册到发现服务)。

服务到服务的通信是一种不同的野兽。您必须问自己的问题,就像 David 所说的那样,您是否正在使用具有 ip 安全性的服务运行,它们是否暴露在整个网络中,您的应用程序中在哪里进行身份验证。没有这些问题,很难给出具体的建议。

这方面的一些一般性建议可能是:

  • 如果您的服务在 IP 防火墙后面运行,您可以指定一个唯一的标头来验证任何进入的服务。通过这种方式,您实际上不需要为您的内部网络指定权限,只需识别每个服务就足够了。您甚至可以将特定 IP 地址列入白名单以始终允许。

  • 如果您正在运行这些暴露于网络的服务,您可能希望将所有流量引导回您的网关(这也应该是您的应用程序进行身份验证的地方)。如果您收到 403,那么您应该以编程方式执行登录并使用会话 ID 重试请求。如果您使用 spring-session 配置您的系统,每个服务将自动提取该服务的身份验证详细信息。

这些只是众多可能性中的两种。我不确定您在编写这些安全配置方面有多舒服,因此如果您需要更多帮助,请将您的问题澄清到一个场景,我将尝试为您的用例编写一个通用解决方案。

于 2017-05-16T18:59:30.717 回答