Docker Nacos 升级,增加安全配置_权限控制

目前Nacos的版本是: NACOS 2.0.2,存在安全问题

关于Nacos配置不当导致的身份认证绕过的风险预警

问题描述

Nacos存在身份认证绕过问题,若用户Nacos未修改 secret.key,则可利用默认secret.key生成JWT Token,从而造成权限绕过访问到相关API接口。

受影响的版本

0.1.0 <= Nacos <= 2.2.0

整改措施

升级到安全版本,开启鉴权并修改token.secret.key和nacos用户的密码,同时避免在公网环境使用

升级Nacos

下载2.2.1版本的nacos
docker pull nacos/nacos-server:v2.2.1
  • 1.
Docker 环境启动 Nacos

参考连接:

https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
  • 1.
使用官方镜像,请在启动docker容器时,添加如下环境变量
NACOS_AUTH_ENABLE=true
  • 1.

修改客户端配置

spring:
  cloud:
    nacos:
      discovery:
        username: ${NACOS_USERNAME:nacos_user}  # nacos用户名
        password: ${NACOS_PASSWORD:nacos_password} # nacos密码
      config:
        username: ${spring.cloud.nacos.discovery.username}
        password: ${spring.cloud.nacos.discovery.password}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

Nacos 页面配置

  1. 权限控制-用户列表-创建用户
  2. 权限控制-权限管理-添加权限
  3. 权限控制-角色管理-绑定角色

错误信息

客户端403提示

修改配置nacos.core.auth.enabled=true后,注册服务时提示

failed to req API:127.0.0.1:8848/nacos/v1/ns/instance. code:403
  • 1.

参考连接:

https://github.com/alibaba/nacos/issues/2426
  • 1.

解决办法:

重新启动客户端

Mysql 提示缺少字段

Unknown column 'encrypted_data_key' in 'field list'
  • 1.

看提示是数据表缺少encrypted_data_key字段,那就手动为据表添加该字段

为保证用户敏感配置数据的安全,Nacos 提供了配置加密的新特性。降低了用户使用的风险,也不需要再对配置进行单独的加密处理。

数据库表 config_info、config_info_beta、his_config_info中需要新增字段 encrypted_data_key ,用来存储每一个配置项加密使用的秘钥。新版本的默认创建表的sql中已经添加该字段。

config数据库的这三张表变一下,就OK了

ALTER TABLE config_info ADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥' ;
ALTER TABLE config_info_beta ADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥' ;
ALTER TABLE his_config_info ADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥' ;
  • 1.
  • 2.
  • 3.