数据权限·吐槽·拓展
实际项目中,出于安全考虑,往往还需实现数据权限。
举个例子:
- 团队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的某个地方能直接切换环境,例如一键切换开发、测试、生产环境等。
思路已经给出,实现也就是工作量的事情了。
相信聪明的看官们,对是放弃扩展,抑或追求完美一事,心里一定有了一些计较。
配套代码
- GitHub:
- microservice-discovery-eureka-authenticating:https://github.com/eacdy/spring-cloud-study/tree/master/2018-Finchley/microservice-discovery-eureka-authenticating
- Gitee:
- microservice-discovery-eureka-authenticating:https://gitee.com/itmuch/spring-cloud-study/tree/master/2018-Finchley/microservice-discovery-eureka-authenticating