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

    • 配置中心可将账号密码等敏感数据加密存储。
  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/yunyunde/p/13530838.html
Copyright © 2011-2022 走看看