• 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的账号密码管控起来,只有核心成员才知晓。

    • 配置中心可将账号密码等敏感数据加密存储。
  • 相关阅读:
    在IE中下载Office2007文件时在对话框中下载文件变成ZIP文件的问题
    异常:tomcat与windows时间不同步
    centos 解决"不在 sudoers 文件中。此事将被报告"的问题
    linux device drivers
    linux device drivers
    linux device drivers
    Source Insight 空格和Tab出现乱码
    光和颜色
    RTOS Thread stack and MSP/PSP registers in ARM Cortex-M3
    Keil MDK编译出现Error: L6405E
  • 原文地址:https://www.cnblogs.com/yunyunde/p/13530838.html
Copyright © 2020-2023  润新知