最近线上发生的几个坑
黑帐篷的毡片
某天的下午工作时间,我听着轻音乐在写业务(其实是在摸鱼),突然看到群里风控小组有人@我,内心惊呼:难道项目出问题了?打开文件查看,原来是 Nacos 的问题。
煮茶的残火
问题 1:
Nacos 竟然没有配置权限认证!,这个错误属实不应该,只能屁颠屁颠去改了。其实操作起来也简单,本项目 Nacos 是单机版,直接修改 Nacos 中的 conf 文件夹下面的 application.properties 配置文件。
官方文档是这么描述的:
注意
- Nacos 是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。
- Nacos 提供简单的鉴权实现,为防止业务错用的弱鉴权体系,不是防止强鉴权体系。
- 如果运行在不可信的网络环境或者有强鉴权诉求,请参考官方简单实现做替换增强。
服务端开启鉴权
nacos.core.auth.enabled=true
yml 配置文件 nacos 配置项中添加如下配置:
nacos.config.username: xxx
nacos.config.password: xxx
开启服务身份识别功能
开启鉴权功能后,服务端之间的请求也会通过鉴权系统的影响。考虑到服务端之间的通信应该是可信的,因此在1.2~1.4.0版本期间,通过User-Agent中是否包含Nacos-Server来进行判断请求是否来自其他服务端。
但这种实现由于过于简单且固定,导致可能存在安全问题。因此从1.4.1版本开始,Nacos添加服务身份识别功能,用户可以自行配置服务端的Identity,不再使用User-Agent作为服务端请求的判断标准。
开启方式:
### 开启鉴权
nacos.core.auth.enabled=true
### 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false
### 配置自定义身份识别的key(不可为空)和value(不可为空)
nacos.core.auth.server.identity.key=example
nacos.core.auth.server.identity.value=example
冬天的雪花
问题 2:
Nacos 未开启访问权限控制,导致没有对用户输入的数据进行全面安全检查或过滤 ,没有进行访问权限的过滤。
如图所示:
修改方案同上,或者升级 Nacos 到安全稳定的版本并开启权限控制 。