SpringCloud之EurekaServer的安全

Eureka本身不具备安全认证的能力,Spring Cloud使用Spring Security为Eureka Server进行了增强。

Eureka Server端

基于之前的Eureka Server项目进行改造:

加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

加配置

spring:
  security:
    user:
      name: user                # 配置登录的账号是user
      password: password123     # 配置登录的密码是password123

不设置这段内容,账号默认是user,密码是一个随机值,该值会在启动时打印出来

改配置

将Eureka Server中的 eureka.client.service-url.defaultZone 修改为为http://{user}:{password}@EUREKA_HOST:EUREKA_PORT/eureka/ 的形式:

eureka:
  client:
    service-url:
      defaultZone: http://user:password123@localhost:8761/eureka/

写代码

/**
 * Spring Cloud Finchley及更高版本,必须添加如下代码,部分关闭掉Spring Security 的CSRF保护功能,否则应用无法正常注册!*/
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.csrf().ignoringAntMatchers("/eureka/**");
    super.configure(http);
  }
}

测试

启动Eureka Server并访问http://localhost:8761 ,可跳转至类似如下的登录页面:

Eureka Client端

如何将微服务注册到需认证的Eureka Server上呢——和Eureka Server端一样,只须将eureka.client.service-url.defaultZone 配置为http://{user}:{password}@EUREKA_HOST:EUREKA_PORT/eureka/ 的形式即可:

eureka:
  client:
    serviceUrl:
      defaultZone: http://user:password123@localhost:8761/eureka/

数据权限·拓展

实际项目中,出于安全考虑,往往还需实现数据权限。

举个例子:

  • 团队1维护微服务A、B、C
  • 团队2维护微服务D、E、F

从安全的角度,我们希望:

  • 团队1中的开发人员只能操作微服务A、B、C在Eureka Server上的信息;
  • 团队1中的开发人员只能访问其他团队授权给该团队的微服务的信息(例如团队2将微服务D授权给微服务A访问);

此时该怎么办呢?

有人可能会想:Eureka Server上哪有什么操作啊!整个Eureka Server的界面上,明明只有查看的能力!

如果只是查看,那当然没有问题,但要知道Eureka Server是有RESTful API的

举个例子,只需发送DELETE请求到http://{username}:{password}@EUREKA_HOST:EUREKA_PORT/eureka/apps/{appId}/{instanceID} ,即可下线服务。如果线上微服务被恶意下线,那后果是不堪设想的。

Spring Cloud抑或原生Eureka Server并未提供这一功能,只能由开发人员基于Spring Security或其他权限框架自行扩展。

这个扩展的成本还是比较高的,于是目前业界大多企业都放弃了扩展,转而采用管理手段防止无数据权限带来的风险。例如,生产环境中:

  • 将Eureka Server的账号密码管控起来,只有核心成员才知晓。

  • 配置中心可将账号密码等敏感数据加密存储。
原文地址:https://www.cnblogs.com/yunyunde/p/13530838.html