

Spring Cloud之Finchley版学习番外篇(一)-Eureka安全详解
source link: https://www.wencst.com/archives/1299
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Spring Cloud之Finchley版学习番外篇(一)-Eureka安全详解
前文的示例中,Eureka Server都是允许匿名访问的,该方式一般无法满足公司在安全性上的诉求。
本节来构建一个需要登录才能访问的Eureka Server。Eureka本身不具备安全认证的能力,Spring Cloud使用Spring Security为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保护功能,否则应用无法正常注册! * ref: http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#_securing_the_eureka_server * @author zhouli */ @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } }
Spring Cloud Finchley及更高版本必须添加这一段,在Edgware以及更早的版本中无需这一步骤。
- 启动Eureka Server并访问
http://localhost:8761
,可跳转至类似如下的登录页面: - 输入账号
user
,密码password123
后,即可正常访问Eureka Server首页。
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访问);
此时该怎么办呢?
TIPS
有人可能会想:Eureka Server上哪有什么操作啊!整个Eureka Server的界面上,明明只有查看的能力!
如果只是查看,那当然没有问题,但要知道Eureka Server是有RESTful API的(详见 跟我学Spring Cloud(Finchley版)-06-服务注册与服务发现-Eureka深入 一节 )——举个例子,只需发送DELETE请求到
http://{username}:{password}@EUREKA_HOST:EUREKA_PORT/eureka/apps/{appId}/{instanceID}
,即可下线服务。如果线上微服务被恶意下线,那后果是不堪设想的。君不见,前两年携程删库事件造成股票大跌?
Spring Cloud抑或原生Eureka Server并未提供这一功能,只能由开发人员基于Spring Security或其他权限框架自行扩展。
这个扩展的成本还是比较高的,于是目前业界大多企业都放弃了扩展,转而采用管理手段防止无数据权限带来的风险。例如,生产环境中:
- 将Eureka Server的账号密码管控起来,只有核心成员才知晓。
TIPS
有人可能会想:这TM扯淡吧?我翻一下配置属性不知道账号密码了?后面会讲配置中心,配置中心可将账号密码等敏感数据加密存储。
- 将Eureka Server部署在一个隔离的网络中,人们无法直接访问到Eureka Server首页,必须借助跳板机等工具才能访问。
但不管怎么样,以上方式都会增加运维成本,同时也会带来不少沟通问题。
在笔者看来,体验最好、最直观、最完美的做法如下:
- 有完备的数据权限机制;
- 开发人员在一个Dashboard上可以查看、管理所有他有权管理的微服务(这里的Dashboard并不是指Eureka Server的界面,而是自己另外做的界面);
- 在Dashboard的某个地方能直接切换环境,例如一键切换开发、测试、生产环境等。
思路已经给出,实现也就是工作量的事情了。
相信聪明的看官们,对是放弃扩展,抑或追求完美一事,心里一定有了一些计较。
如果文章对您有用,扫一下支付宝的红包,不胜感激!
欢迎加入QQ群进行技术交流:656897351(各种技术、招聘、兼职、培训欢迎加入)
Leave a Reply Cancel reply
You must be logged in to post a comment.
Recommend
-
34
配置刷新三要素 spring-boot-starter-actuator /actuator/refresh management: endpoints: web: exposure: include: refresh 待刷新的配置属性所在的类上添加了 @Re...
-
30
经过前文讲述,我们的微服务架构日趋完善,已可使用Spring Cloud构建一个非常健壮的系统! 但假设,你的项目一旦出现问题,如何才能快速定位出来呢?一般项目上要求我们快速定位两种问题: 调用发生失败,快速定位...
-
70
一个良好的监控,应该有一个人类亲和的界面,这个界面就是Zipkin。本文详细讨论Sleuth如何与Zipkin配合使用。 Zipin简介 Zipkin是Twitter开源的分布式跟踪系统,基于Dapper的论文设计而来。它的主要功能是收集系统的...
-
4
上一节( Spring Cloud之Finchley版学习(十六)-Zuul )中,已经实现用Zuul转发到Eureka上的微服务。默认的路由规则是:访问$ZUUL_URL/指定为服务/** 会被转发到指定微服务 的
-
11
Spring Cloud之Finchley版学习(十二)-微服务容错三板斧 作者: wencst 分类: JAVA,
-
7
本文总结Feign常见问题及解决方案。 一、FeignClient接口如使用@PathVariable ,必须指定value属性 代码示例: @FeignClient("microservice-provider-user") public interface UserFeignClient { @RequestM...
-
14
Spring Cloud之Finchley版学习(六)-服务注册与服务发现-Eureka深入 作者: wencst 分类: JAVA,
-
11
Spring Cloud之Finchley版学习(二十六)-使用Elasticsearch作为Zipkin Server的后端存储 作者: wencst 分类: JAVA,
-
5
Spring Cloud之Finchley版学习(十五)-Hystrix监控详解 作者: wencst 分类: JAVA,
-
8
Spring Cloud之Finchley版学习(五)-服务注册与服务发现-Eureka学习 作者: wencst 分类: JAVA,
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK