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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 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,、"xxxxx");//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的注册中心部分提供这样的鉴权能力,使用方式跟配置中心也是一模一样的。

相关文章
|
19天前
|
人工智能 运维 Serverless
函数计算 × MSE Nacos : 轻松托管你的 MCP Server
本文将通过一个具体案例,演示如何基于 MCP Python SDK 开发一个标准的 MCP Server,并将其部署至函数计算。在不修改任何业务代码的前提下,通过控制台简单配置,即可实现该服务自动注册至 MSE Nacos 企业版,并支持后续的动态更新与统一管理。
321 29
|
1月前
|
监控 算法 Java
使用 MSE 流量防护轻松面对运行态流量不确定风险的最佳实践
本文深入分析了系统架构中因流量变化带来的稳定性风险,探讨了流量不确定性的两大根源及四种典型场景,并结合阿里云微服务引擎 MSE 的实际功能,演示了如何通过限流、熔断、热点防护和并发隔离等手段有效应对突发流量和依赖服务异常等问题。最后,文章提出了流量防护的最佳实践,强调“事前评估配置,事中观察调整,事后回溯优化”的全流程防护策略,为保障系统稳定性提供了全面解决方案。
|
2月前
|
人工智能 Kubernetes Cloud Native
MSE Nacos Controller:为 Kubernetes 生态构建配置管理与服务发现的桥梁
在企业云原生转型过程中,如何实现传统微服务与 Kubernetes 服务的配置统一管理、服务互通及协议转换成为关键挑战。MSE Nacos Controller 应运而生,作为连接 Kubernetes 与 Nacos 的桥梁,支持 ConfigMap 与 Nacos 配置双向同步、服务自动注册发现,并助力 Higress 等 MCP 网关实现 REST API 向 AI 可调用 MCP 服务的转换,全面提升系统治理能力与智能化水平。
302 32
|
9月前
|
负载均衡 Kubernetes 网络协议
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,继续探讨注册中心的原理及选型。文章详细介绍了Eureka、Nacos的工作机制与特点,并对比了Eureka、Nacos、Consul和Zookeeper在一致性协议、健康检查、负载均衡等方面的差异。最后根据不同的应用场景给出了注册中心的选型建议,帮助读者理解如何选择最适合的注册中心。
742 100
|
6月前
|
存储 安全 Nacos
阿里云 MSE Nacos 发布全新“安全防护”模块,简化安全配置,提升数据保护
阿里云在其微服务引擎(MSE)注册配置中心 Nacos 上正式推出全新“安全防护”功能模块,旨在帮助企业用户有效管理安全状态和降低开启安全相关功能的学习成本,提升微服务架构的安全性。
250 25
|
6月前
|
存储 Kubernetes 安全
Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置
无论是使用 Nacos-Controller 实现配置的双向同步,还是直接在应用中接入 Nacos SDK 以获得更高级的配置管理特性,都能显著提升配置管理的灵活性、安全性和可维护性。使用 Nacos,您能够更好地管理和优化您的应用配置,从而提高系统的稳定性和可靠性。
560 49
|
10月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
1769 82
高效搭建Nacos:实现微服务的服务注册与配置中心
|
10月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
971 155
|
6月前
|
存储 人工智能 测试技术
Nacos托管LangChain应用Prompts和配置,助力你的AI助手快速进化
AI 应用开发中,总有一些让人头疼的问题:敏感信息(比如 API-KEY)怎么安全存储?模型参数需要频繁调整怎么办?Prompt 模板改来改去,每次都得重启服务,太麻烦了!别急,今天我们就来聊聊如何用 Nacos 解决这些问题。
|
11月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
1043 214

热门文章

最新文章