[转帖]Nacos 获取配置时启用权限认证

nacos,获取,配置,启用,权限,认证 · 浏览次数 : 0

小编点评

**1. 启用 Nacos 的权限认证** 将 `nacos.core.auth.enabled` 设置为 `true` 以启用权限认证。 **2. 添加 Nacos 用户 默认的用户和角色** 创建一个名为 `nacos` 的用户,并绑定 `ROLE_ADMIN` 角色。 **3. 设置权限控制** 在用户列表中添加一个只读的用户,并设置其角色为 `ROLE_ADMIN`。 **4. 使用命名空间和权限控制** 使用命名空间和权限控制来隔离配置文件。例如,您可以使用 `namespace` 和 `group` 来指定文件路径,并使用 `permission` 来设置读写权限。 **5. 示例配置** ```yaml spring: cloud: nacos: config: namespace: my-namespace username: my-user password: my-password discovery: namespace: my-namespace username: nacos password: nacos ``` **6. 验证配置** 使用 `curl` 命令验证配置文件的安全性: ```bash curl -XGET 'http://localhost:8848/nacos/v1/cs/configs?dataId=test.yaml&group=DEFAULT_GROUP&tenant=&username=test&password=123456' ``` **注意**: * 使用默认的 `public` 命名空间可能不安全,因为它不进行权限验证。 * 您需要在 `bootstrap.yml` 中配置 `spring.cloud.nacos.config.context-path`,以指定 Nacos 配置文件的位置。 * 确保您的应用程序在安全环境中运行。

正文

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

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

1. 启用 Nacos 的权限认证

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

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

2. 添加 Nacos 用户

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

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

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

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

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

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

在 PowerShell 中对应的命令:

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:
  2. cloud:
  3. nacos:
  4. config:
  5. namespace:
  6. server-addr: 127.0.0.1:8848
  7. username: test
  8. password: 123456
  9. group: DEFAULT_GROUP
  10. prefix: test
  11. file-extension: yaml
  12. discovery:
  13. namespace:
  14. server-addr: 127.0.0.1:8848
  15. username: nacos
  16. password: nacos

附录

  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 -->
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    5. <version>2.2.1.RELEASE</version>
    6. </dependency>
    7. <dependency>
    8. <groupId>com.alibaba.cloud</groupId>
    9. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    10. <version>2.2.1.RELEASE</version>
    11. </dependency>
  2. 命名空间(namespace) 和 租户(tenant)

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

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

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

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

与[转帖]Nacos 获取配置时启用权限认证相似的内容:

[转帖]Nacos 获取配置时启用权限认证

默认情况下获取 Nacos 中的配置是不需要权限认证的, 这个估计是由其使用场景决定的(绝大多数都是仅内网可访问). 今天调查了下如何在获取配置时增加权限验证以提高其安全性. 1. 启用 Nacos 的权限认证 只要 nacos.core.auth.enabled 设置为 true 就行了. ###

[转帖]nacos discovery和config

微服务和nacos版本都在2.x及之后。 1、discovery用于服务注册,将想要注册的服务注册到nacos中,被naocs发现。 pom引入的依赖是: yml配置文件中: 2、config用于获取nacos配置管理->配置列表下配置文件中的内容 pom引入的依赖是: 获取nacos的配置有三种方

[转帖]工信部电子标准院授予阿里巴巴9个开源项目“优秀”评级

http://blog.itpub.net/31545803/viewspace-2932061/ 1月13日消息,工信部电子标准院近日公布第二批通过开源项目成熟度评估的开源项目名单,阿里巴巴主导的Flink、Dubbo、龙蜥操作系统、Seata、Nacos等多个开源项目获得“优秀”评级。 电子标准

[转帖]Nacos和Eureka的区别

Eureka架构图: Eureka架构图 1.服务注册(register):Eureka Client会通过发送REST请求的方式,向Eureka Server注册自己的服务。注册时,提供自身的元数据,比如ip地址、端口、运行状况指标、主页地址等信息。Eureka Server接收到注册请求后,就会

[转帖]nacos修改密码

https://www.cnblogs.com/cherish-code/p/14765862.html nacos修改默认的用户名密码 修改配置文件, vim nacos/conf/application.properties 在配置文件加入如下: spring.datasource.platfo

[转帖]Nacos 是什么?

https://my.oschina.net/u/4526289/blog/5605693 摘要:Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,相较之下,它更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 本文分享自华为云

[转帖]nacos开启强鉴权

注意 Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。 Nacos提供简单的鉴权实现,为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系。 如果运行在不可信的网络环境或者有强鉴权诉求,请参考官方简单实现做替换增强。 鉴权 服务端如何开启鉴权 非

[转帖]Nacos的版本支持情况

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 由于 Spring Boot 3.0,Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大,目前企业

[转帖]重写Nacos服务发现逻辑动态修改远程服务IP地址

https://www.cnblogs.com/changxy-codest/p/14632574.html 背景 还是先说下做这个的背景,开发环境上了K8S,所有的微服务都注册在K8S内的Nacos,注册地址为K8S内部虚拟IP,K8S内的服务之间相互调用没有问题,但是本机开发联调调用其他微服务就

[转帖]关于Nacos默认token.secret.key及server.identity风险说明及解决方案公告

https://nacos.io/zh-cn/blog/announcement-token-secret-key.html 近期Nacos社区收到关于Nacos鉴权功能通过token.secret.key默认值进行撞击,绕过身份验证安全漏洞的问题。社区在2.2.0.1和1.4.5版本已移除了自带的