MSE Nacos 配置安全最佳实践|学习笔记(二)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习 MSE Nacos 配置安全最佳实践

开发者学堂课程【MSE Nacos配置安全最佳实践MSE Nacos 配置安全最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/969/detail/14890


MSE Nacos 配置安全最佳实践

六、防护攻击手段

1、开源 Nacos 鉴权

Nacos提供的配置鉴权能力其实是关闭的,开启鉴权的话只需要修改配置信息即可。

开启鉴权之前,application properties中的配置信息为:

### If turn on auth system:

nacos.core.auth.enabled=false

开启鉴权之后,application properties中的配置信息为:

### If turn on auth system:

nacos.core.auth.enabled=true

同时开源的 Nacos也提供了一些鉴权相关的配置参数。

name

description

 

NACOS_AUTH_ENABLE

是否开启权限系统

默认:false

NACOS AUTH TOKEN EXPIRE SECONDS

token 失效时间

默认:18000

NACOS AUTHTOKEN

token

默认:

SecretKev0123456789012345678901

NACOS AUTH CACHE ENABLE

权限缓存开关,开启后权限缓存的更新默认有15秒的延迟

默认:false

 

Nacos server开启鉴权之后,客户端肯定不能不加认证信息就进行访问了。那么 Nacos客户端里面需要去配置上这么两个值,一个是user name,一个是password。

在构建“Properties”类时,需传入用户名和密码。

properties.put("username","${username}" ) ' properties.put("password","${password}");

示例代码

try {

// Initialize the configuration service, and the console automatically obtains the

String serverAddr="{serverAddr}":

Properties properties=newProperties): properties.put("serverAddr",serverAddr);

I/ if need username and password to login

properties.put("username","nacos"); properties.put("password" “nacos");

ConfigService configService=NacosFactory.createConfigService(properties);

} catch(NacosException e){

// ToDO Auto-generated catch block e.printStackTrace();}

总结一下,第一是服务端打开开关,第二点是客户端加上一些默认的访问配置,这里是user name和password的:

Properties properties=new Properties(); properties.put("serverAddr",serverAddr); properties.put("username""nacos");

properties.put("password","nacos");

2.MSE 商业化提供的鉴权行为。

首先MSE提供的 Nacos也是默认不开启鉴权的,需要用户手动的去打开鉴权的开关,同时它会发生一次重启。

紧接着因为商业化的Nacos,商业化的MSE Nacos,它是背后的鉴权系统,它是跟RAM进行结合的,所以需要用户来到ram的控制台,去配置上一段自定义的权限策略。打开完开关,配置上RAM鉴权之后,就可以把刚才RAM配置生成的 Aksk在客户端SDK,也就是开源的 Nacos SDK当中去进行设置。

总结一下,第一点是开启RAM鉴权,再分为两点,第一点是打开MSE Nacos的一个鉴权开关,还要去RAM控制台当中去配置权限,去生成一个有对应权限的aksk,之后需要用户对现有的代码进行改造,把 ak和sk去设置到代码当中。

客户端:

Properties properties=new Properties(); properties.put(serverAddr",serverAddr); properties.put(“accessKey","xocx"); properties.put("accessSecret"“xxxx");

3.对比

对比MSE提供的商业化Nacos鉴权方案和开源max鉴权方案,主要是从6个层面。

图片3.png

安全性MSE Nacos的安全性是要高于开源Nacos的,首先,商业化的MSE Nacos鉴权,它是依托于RAM系统的,而RAM系统它的内核实现是经过了很多个原产品的一个验证。

其次开源Nacos提供的鉴权方案,它是一个开源方案,它可以被攻击者能够看到源代码,更容易被攻击者去研究出漏洞。而商业化这边能够做到的是跟开源对齐,但是鉴权这套方案完全是阿里云的一套方案,所以它的安全性是要比开源要好的。

企业级特性。这里要涉及到刚才介绍的开源 Nacos,它是使用 user name和password这样的简单的 Tv来做权限管控的,而MSE Nacos是依托于RAM系统,它可以去设置非常丰富的用户组,用户权限有一个非常完善的系统,它的权限力度也可以控制的非常细,所以说 MSE Nacos它是更具备一个丰富的企业级特性的。

元亲和性。如果某一个用户使用了一个阿里云非常多的云产品,那么它会非常青睐这种aksk的方案,同一个aksk它可以配置上n个权限,而如果一个用户他习惯了使用这套方案,转而去使用开源Nacos,它只提供了 user namepassword的形式的话,它就会造成一个技术方案的不对齐。

性能。所以说MSE Nacos提供的这一套aksk的方案,也是原综合性非常高的一套方案。

经过实际的压测发现 MSE Nacos是完全可以做到跟不开启鉴权,几乎性能没有下降,也就是说它的性能是非常高的。而开源 Nacos目前提供的鉴权方案,发现一些极端的case,它是会导致CPU的急速飙升的,那么这一点也已经反馈给了开源社区,但是目前还没有实质性的一个修复。

鉴权粒度。MSE Nacos和开源 Nacos目前支持的权限力度都是命名空间级别,未来也会视用户的一个反馈来制定说MSE Nacos到底要不要支持到 data ID级别。

鉴权方式。MSENacos使用的是一个aksk的方案,而开源Nacos它使用的是一个用户名和密码的方案,但是值得一提的一点是MSE Nacos它还提供了基于ecs的RAM方式,那么这种方式是一种比较高级的。

虽然配置麻烦,同时它也保障了更高的一个安全等级。这样的话去省去了aksk的一个轮转,以及aksk它泄密之后带来的损失。

七、鉴权演示

首先是来到MSE的控制台,要进行MSE Nacos的鉴权,首先得有一个集权,那么我这里已经提供提供了一个三节点的 network集群,注意它的版本是1.21版本,点击进入参数设置,那么默认购买的1.21版本的 Nacos,这个参数是关闭的,那么需要用户手动的对它进行开启。

那么开启之后它会进行一次重启,那么耐心等待大概5分钟之后重启完毕,那么集群就具备一个鉴权能力了。

如果Nacos是在线上运行着的,请慎重的去打开开关。因为开启此开关之后,原本可以访问通的这些客户端,不加上aksk就没法访问了。所以说这个功能如果是运行中的Nacos,就一定要慎重的去对待,不要轻易的打开。如果是一个新的Nacos,那么可以肆无忌惮的去体验。此时已经是一个开启之后的状态了。

那么之后回到代码当中

public class NacosConfigDemo (

public static void main(Stringl] args) throws NacosException, InterruptedException (

String serverAddr ="mse-55e84ab0-p.nacos-ans.nse.aliyuncs.com:8848";

Properties properties = new Properties();

properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);//properties.put(PropertyKeyConst.ACCESS_KEY,、"LTAI4G79kjyo6rhGFz44vPVo");//properties.put(PropertyKeyConst.SECRET_KEY,"PqQ0M7FDVrtNCnfkFV6PHxDAM0jbRL");

NacosConfigServiceconfigService = new NacosConfigService(properties);

String config = configService.getConfig( datald:"mse.nacos.auth.test.1", group: "DEFAULT_GROUP”, timeoutMs:3000);System.out.println("get config:"+ config);

这段程序演示了一个 Nacos配置的 demo,可以发现通过配置上MSE Nacos的一个地址,不加aksk去访问开启了鉴权的MSE Nacos就会显示异常。

开启鉴权,需要来到RAM的控制台,去给它加上对应的用户,并且配置上相应的权限。

事先准备好了一个用户,看一下权限,配置上了 Nacos的读写权限,并且是针对于 n6w22实例的,也就是说拥有了权限的aksk它可以完全的去对实例 MSE Nacos实例去进行读写。

将这一段aksk赋予到他的客户端当中的话,再来访问一次,这里已经正确的获取到了配置了,可以来到MSE的控制台,对配置进行一下验证。

事先在这准备好一个data ID正常的或被的代码获取到,那么另外一点就是 MSE提供的商业化的控制台,登录之后无需担心访问的鉴权问题,这个是由MSE云产品去保障的。

八、微服务框架接入 MSE Nacos

刚才介绍的是一些原生的方式,就是原生使用 Nacos的SDK如何进行鉴权的访问,而在更多场景下,其实是将 Nacos作为了微服务框架的一个配置中心去使用的,那么典型的就是两款大 rpc框架或者叫微服务框架, double和视频cloud,他们是如何去支持这种aksk的,那么在根据前文去介绍的,通过RAM系统去拿到 aksk之后,可以向下文的方式去配置到的application点practice当中,那么在原先的这个使用过程当中就完全不受到影响,只需要加上aksk的整个的使用体验就得到了提升,并且的安全防护级别也提升了一个档次。

具体代码如下:

1.Dubbo

dubbo.registryaddress=nacos://mse-xxnacos-ansmsealiyuncscom:8848 dubbo.config-centeraddress=nacos://mse-xx.nacos-

ans.msealiyuncs.com:8848?accessKey=xxx&secretKey=xxx

dubbometadata-reportaddress=nacos://mse-xxnacos

ans.msealiyuncs.com:8848?accessKey=xxx&secretKey=xxx

2.SpringCloud

spring.cloudnacos.configaccess-key=xx spring.cloudnacos.config.secret-key=xx

九、MSE Nacos 安全的最佳实践

第一点,测试集群配置是虽然可以打开公网,但是一定注意要配置上相应的一个acl就是允许哪一些IP段进行访问。

第二点,线上集群是强烈不建议大家去开通公网的,只需要去申请一个内网就行了。也就是说公网白名单这样的一个功能仅限于测试集群使用,尽最大的程度去避免黑客的攻击。

第三点,在使用 Nacos鉴权的时候,一定要打开鉴权开关,不要觉得麻烦,一定是有意义的。

第四点,在RAM当中对不同的aksk可以分配最小力度的权限。最典型的就是一些应用,它可能是指读取配置,那么可以分配给他一个只读的一个aksk 。一些应用它是一些核心应用,它需要涉及到配置的变更,那么可以分配给他一个读写权限的 Aksk。

目前MSE Nacos的鉴权是仅仅针对于配置中心部分的,MSE Nacos的注册中心部分是不受影响的,那么在未来也会对MSE Nacos的注册中心部分提供这样的鉴权能力,使用方式跟配置中心也是一模一样的。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
75 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
2月前
|
安全 Cloud Native 测试技术
Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
祝贺 Nacos 社区 Star 数突破 30000!值此时机,回顾过去的两年时间,Nacos 从 2.0.4 版本演进到了 2.4.2 版本,基本完成了当初构想的高性能、易拓展的目标,并且对产品的易用性和安全性进行了提升,同时优化了新的官网,并进行了多语言和更多生态支持。未来,Nacos 会向更安全、更泛化、更云原生的 Nacos3.0 演进。
146 15
|
1月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
47 1
|
2月前
|
Java 网络安全
zookeeper的环境搭建和配置
本文介绍了如何在多台节点上搭建和配置Zookeeper环境。内容包括Zookeeper的下载、解压、环境变量配置、配置文件修改、zkdata目录创建、myid文件设置,以及将Zookeeper及其配置文件复制到其他节点。还提供了运行测试的命令,包括启动、状态检查和停止Zookeeper服务。
zookeeper的环境搭建和配置
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
47 0
|
3月前
|
人工智能 Java 测试技术
就AI 基础设施的演进与挑战问题之ZooKeeper的稳定性提升配置优化的问题如何解决
就AI 基础设施的演进与挑战问题之ZooKeeper的稳定性提升配置优化的问题如何解决
|
4月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
111 3
|
4月前
|
API
zookeeper 使用api 进行节点增删改查及实现简易的配置中心
zookeeper 使用api 进行节点增删改查及实现简易的配置中心
49 2
|
3月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
320 0
|
4月前
|
消息中间件 NoSQL Kafka
日志收集平台项目nginx、kafka、zookeeper、filebeat搭建的基本配置(2)
日志收集平台项目nginx、kafka、zookeeper、filebeat搭建的基本配置(2)