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

本文涉及的产品
服务治理 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月前
|
人工智能 Serverless 测试技术
nacos常见问题之Serverless 应用引擎2.0不支持 MSE nacos如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
23 0
|
3月前
|
网络协议 Nacos 数据安全/隐私保护
MSE微服务引擎注册问题之nacos注册失败如何解决
MSE(MicroService Engine)微服务引擎是阿里云提供的一种微服务治理平台,它通过提供服务注册、发现、配置管理等功能来支撑微服务架构的稳定运行;本合集旨在梳理MSE微服务引擎的核心特性、部署流程,以及实践中可能遇到的问题和相应的解决方案,以助力用户优化微服务架构的实施和管理。
|
2月前
|
Docker 容器
在docker中安装zookeeper,并且阿里云服务器配置
在docker中安装zookeeper,并且阿里云服务器配置
205 1
|
25天前
|
负载均衡 Cloud Native 安全
云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
本文档介绍了如何在 MSE(Microservices Engine)云原生网关中集成JWT进行全局认证鉴权。
|
1月前
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。
|
1月前
|
负载均衡 Kubernetes Cloud Native
云原生最佳实践系列2:基于 MSE 云原生网关同城多活
通过使用阿里云的云原生微服务引擎 MSE,可以实现注册中心的同城容灾多活微服务应用。MSE 提供了云原生网关和注册中心,支持机房级故障的秒级自动转移、非对等部署下的全局流量负载均衡以及流量精细化管控。
659 39
|
2月前
|
Java Linux Spring
Zookeeper实现分布式服务配置中心
Zookeeper实现分布式服务配置中心
48 0
|
2月前
|
存储 安全 Nacos
使用KMS为MSE-Nacos敏感配置加密的最佳实践
本文主要介绍通过KMS密钥管理服务产生的密钥对敏感的AK等数据进行加密之后可以有效解决泄漏带来的安全风险问题,其次通过KMS凭据托管的能力直接将MSE的主AK进行有效管理,保障全链路无AK的业务体验,真正做到安全、可控。
92272 3
|
2月前
|
运维 监控 安全
MSE Nacos 配置变更审计平台使用指南
MSE Nacos 配置变更审计平台使用指南
|
14天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
30 2