默认情况下获取 Nacos 中的配置是不需要权限认证的, 这个估计是由其使用场景决定的(绝大多数都是仅内网可访问).

今天调查了下如何在获取配置时增加权限验证以提高其安全性.

1. 启用 Nacos 的权限认证

只要 nacos.core.auth.enabled 设置为 true 就行了.

    1. ### If turn on auth system:
      1. nacos.core.auth.enabled=true
    1.  

    2. 添加 Nacos 用户

    默认的用户 nacos 绑定的角色是 ROLE_ADMIN , 权限比较大, 最好是新增一个只读的用户用来读取对应命名空间(namespace)的配置.

    1. 权限控制 -> 用户列表 中新增用户
    2. 权限控制 -> 角色管理 中新增用户对应的角色
      一个用户可以绑定多个角色.
    3. 权限控制 -> 权限管理 中新增角色对应的权限
      可以设置角色对应的命名空间(页面上名称为资源), 在动作下拉框中指定读写权限(只读\只写\读写).
      一个角色可以配置多个权限.

    合理的使用 namespace 和 group 来隔离配置文件, 再辅以用户的角色、权限控制, 组合的权限策略还是比较灵活的, 应该能满足大多数项目的安全需求.

    创建好用户后可以通过 curl 命令验证一下效果.

    1. curl -XGET 'http://localhost:8848/nacos/v1/cs/configs?dataId=test.yaml&group=DEFAULT_GROUP&tenant=&username=test&password=123456'

    这里需要注意的是默认的 public 命名空间对应的值是空字符串, 而不是 public .

    在 PowerShell 中对应的命令:

    1. curl -Uri 'http://localhost:8848/nacos/v1/cs/configs?dataId=test.yaml&group=DEFAULT_GROUP&tenant=&username=test&password=123456'

    当请求中的用户不存在时, 会返回 unknown user! 错误.

    com.alibaba.nacos.api.exception.NacosException:

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Wed Jul 28 10:58:15 CST 2021

    There was an unexpected error (type=Forbidden, status=403).

    unknown user!

    当请求中的用户没有绑定角色或角色没有配置对应的权限时, 会返回 authorization failed! 错误.

    com.alibaba.nacos.api.exception.NacosException:

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Wed Jul 28 11:43:43 CST 2021

    There was an unexpected error (type=Forbidden, status=403).

    authorization failed!

    3. 修改 Spring Boot 配置文件

    在 bootstrap.yml 中添加 spring.cloud.nacos.config.username 和 spring.cloud.nacos.config.password 配置项 .

    如果不仅使用了配置中心, 还使用了 Nacos 的注册中心功能, 那么同时还要配置 spring.cloud.nacos.discovery.username 和 spring.cloud.nacos.discovery.password 配置项, 而且必须使用默认的 ROLE_ADMIN 角色的用户.

      1. spring:
        1. cloud:
          1. nacos:
            1. config:
              1. namespace:
                1. server-addr: 127.0.0.1:8848
                  1. username: test
                    1. password: 123456
                      1. group: DEFAULT_GROUP
                        1. prefix: test
                          1. file-extension: yaml
                            1. discovery:
                              1. namespace:
                                1. server-addr: 127.0.0.1:8848
                                  1. username: nacos
                                    1. password: nacos
                                  1.  

                                  附录

                                  1. 查到有文章说需要在配置文件中指定 spring.cloud.nacos.config.context-path 的值为 /nacos , 这里使用的 1.2.1 版没有这个问题 .

                                    附一下正在使用的项目依赖. spring-cloud-starter-alibaba-nacos-discovery 和 spring-cloud-starter-alibaba-nacos-config 使用的均是 2.2.1.RELEASE 版.

                                      1. <!-- Nacos -->
                                        1. <dependency>
                                          1. <groupId>com.alibaba.cloud</groupId>
                                            1. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                                              1. <version>2.2.1.RELEASE</version>
                                                1. </dependency>
                                                  1. <dependency>
                                                    1. <groupId>com.alibaba.cloud</groupId>
                                                      1. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                                                        1. <version>2.2.1.RELEASE</version>
                                                          1. </dependency>
                                                        1.  
                                                      1. 命名空间(namespace) 和 租户(tenant)

                                                        这两个貌似是同一个概念.

                                                      2. 查资料的时候看到今年年初的时候有报道说 1.4.1 版本有安全漏洞.

                                                        关于如何更加安全的使用 Nacos, 官方的公众号文章给出了一个比较全面的方案: Nacos配置安全最佳实践 .
                                                        文中推的阿里云微服务引擎(MSE)也是一个不错的方案, 安全性比较高, 看了下价格, 相比买 ECS 自己搭建集群, 价格上还是有些优势的.

                                                      文章知识点与官方知识档案匹配,可进一步学习相关知识
                                                      云原生入门技能树首页概览11931 人正在系统学习中

                                                      [转帖]Nacos 获取配置时启用权限认证的更多相关文章

                                                      1. nacos 发布配置

                                                        server 保留 2 份配置文件,一份在 mysql,一份在本地磁盘,同时在内存中缓存配置文件的 md5 值.当客户端获取配置时,server 直接返回本地磁盘文件,使用的是 sendFile ap ...

                                                      2. 关于heritrix安装配置时出现”必须限制口令文件读取访问权限”的解决方法

                                                        转载:http://www.floatinglife.cn/关于heritrix安装配置时出现必须限制口令文件读取访问 最近开始写一个RSS聚合程序,需要爬虫支持,于是就整来heritrix,没想到, ...

                                                      3. PHP 执行命令时sudo权限的配置

                                                        PHP 执行命令时sudo权限的配置 1.先写一个PHP文件 <?php system('whoami'); 先看自己的apache2的用户是谁,下面是笔者的截图,笔者使用apche2的用户是w ...

                                                      4. Android之运行时相机权限和联系人权限获取

                                                        原文:Android之运行时相机权限和联系人权限获取 本文链接:http://blog.csdn.net/qq_16628781/article/details/61623502 Android之运行 ...

                                                      5. 在IIS配置时没有启用目录浏览功能 :HTTP 错误 403.14

                                                        在IIS配置时没有启用目录浏览功能,浏览网站时,会出现“HTTP 错误 403.14–Forbidden,Web服务器被配置为不列出此目录内容”的提示,怎么解决这个问题呢? 01 02 03 04 0 ...

                                                      6. Nacos作为配置中心时,多个服务共用一个dataId的配置

                                                        写在前面 本文是对我之前一篇文章<Spring Cloud+nacos+Feign,实现注册中心及配置中心>的补充.此文章中简单写了如何将Nacos作为配置中心.在使用配置中心时,我们会遇 ...

                                                      7. nacos统一配置中心源码解析

                                                        配置文件想必大家都很熟悉,无论什么架构 都离不开配置,虽然spring boot已经大大简化了配置,但如果服务很多 环境也好几个,管理配置起来还是很麻烦,并且每次改完配置都需要重启服务,nacos c ...

                                                      8. Spring Cloud Alibaba基础教程:使用Nacos作为配置中心

                                                        通过本教程的前两篇: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方 ...

                                                      9. Nacos系列:基于Nacos的配置中心

                                                        前言 在看正文之前,我想请你回顾一下自己待过的公司都是怎么管理配置的,我想应该会有以下几种方式: 1.硬编码 没有什么配置不配置的,直接写在代码里面,比如使用常量类 优势:对开发友好,开发清楚地知道代 ...

                                                      10. 学习Spring Boot:(十三)配置 Shiro 权限认证

                                                        经过前面学习 Apache Shiro ,现在结合 Spring Boot 使用在项目里,进行相关配置. 正文 添加依赖 在 pom.xml 文件中添加 shiro-spring 的依赖: <d ...

                                                      随机推荐

                                                      1. 云小课|手把手教您在PyCharm中连接云端资源进行代码调试

                                                        摘要:让我们看看如何在PyCharm中连接云端资源进行代码调试吧! 本文分享自华为云社区<[云小课]EI第54课 手把手教您在PyCharm中连接云端资源进行代码调试>,作者:Hello ...

                                                      2. 浅析华为云基于HBase MTTR上的优化实践

                                                        摘要:主要介绍华为云在HBase 2.x内核所做的一些MTTR优化实践. 本文分享自华为云社区<华为云在HBase MTTR上的优化实践>,作者: 搬砖小能手. 随着HBase在华为云的广 ...

                                                      3. Python图像处理丨图像缩放、旋转、翻转与图像平移

                                                        摘要:本篇文章主要讲解Python调用OpenCV实现图像位移操作.旋转和翻转效果,包括四部分知识:图像缩放.图像旋转.图像翻转.图像平移. 本文分享自华为云社区<[Python图像处理] 六. ...

                                                      4. Linux IPTables:如何添加防火墙规则

                                                        摘要:本文介绍了如何使用"iptables -A"命令添加 iptables 防火墙规则. 本文分享自华为云社区<Linux IPTables:如何添加防火墙规则(使用允许 ...

                                                      5. Nginx The system cannot find the path specified

                                                        Nginx -t 时报  (3: The system cannot find the path specified) 原因:路径中有文件夹是中文,Nginx 全路径,不能包含中文

                                                      6. 如何设置IDEA代码风格为Google风格,使用Google风格format

                                                        1.在Github仓库寻找:google style 为了节省大家时间直接放链接了:Here 2.进到项目 找到名为intellij-java-google-style.xml 文件 Ctrl + F ...

                                                      7. java8 Steam流及Optional的使用

                                                        目录 Stream流: 获取流 1. list获取: 2. Map获取 3. 数组获取 流方法分类: 1. forEach(终结方法) 2. count计数(终结方法) 3.filter过滤 4.li ...

                                                      8. 活动回顾|阿里云云原生 Serverless 技术实践营 深圳站回放&PPT下载

                                                        11月24日"阿里云云原生 Serverless 技术实践营"深圳站圆满落幕.活动受众以关注  Serverless 技术的开发者.企业决策人.云原生领域创业者为主,活动形式为演讲 ...

                                                      9. 看这个视频,4万人学会云上部署 Stable Diffusion

                                                        目前大火的 AIGC 领域中, 除了 ChatGPT,Stable Diffusion 在文生图领域大放异彩,深刻影响着绘画.视频制作等相关领域.<动手吧,开发者>本期活动邀请 B 站知识 ...

                                                      10. 嵌入式数据库H2作为服务端

                                                        H2数据库一般情况都是作为嵌入式的数据库服务,不需要多个应用连接同一个h2的服务,但有的情况下需要他像oralce那样提供数据服务让多个应用访问. 一.环境准备(linux) 1.其他环境下生成的H2 ...