Nacos 鉴权与安全
Nacos 默认账号密码是 nacos/nacos,若裸奔在网络上,等于把注册中心和配置中心拱手送人。本章讲如何开启鉴权、管理用户、保护 OpenAPI 与网络边界。
默认账号的风险
刚装好的 Nacos 任何人用 nacos/nacos 都能登录控制台,能看全部配置、改权重、上下线实例。内网环境也应改掉默认口令,暴露到公网则必须配合鉴权与网络策略(见下文)。
开启服务端鉴权
编辑 conf/application.properties,打开鉴权开关并替换默认密钥与身份标识,然后重启生效:
# 开启鉴权(生产环境必须)
nacos.core.auth.enabled=true
# 签名密钥:生成足够长且随机的值,不要用默认值
nacos.core.auth.plugin.nacos.token.secret.key=请替换为自定义Base64密钥
# 集群节点间校验用的身份标识,key 与 value 都要自定义且各节点一致
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=my-custom-value
集群部署时每个节点都要改,且配置保持一致;开启后未带凭证的 OpenAPI 请求会被拒绝。
控制台用户与角色管理
鉴权开启后,用管理员账号进入"权限控制":
- 用户列表:新建用户(普通使用者)、重置密码
- 角色列表:把用户绑定到角色,如只读角色、配置管理员
- 权限列表:给角色分配某个命名空间、某个资源(服务/配置)的读或写权限
日常开发应使用最小权限账号,而不是所有人共用管理员。
OpenAPI 携带凭证
先调登录接口换取 accessToken(默认有效期 18000 秒,约 5 小时):
curl -X POST 'http://localhost:8848/nacos/v1/auth/login' \
-d 'username=nacos&password=你的密码'
# 返回:{"accessToken":"eyJhbGciOiJIUzI1NiJ9...","tokenTtl":18000,"globalAdmin":true}
之后每次调用把 token 带在请求里,可作 URL 参数 accessToken,也可放入请求头 Authorization: Bearer <token>(以所用版本支持的传法为准):
curl 'http://localhost:8848/nacos/v1/ns/instance/list?serviceName=order-service&accessToken=eyJhbGciOiJIUzI1NiJ9...'
脚本里 token 过期要重新登录,建议封装成公共函数自动续期。
命名空间:天然的多租户边界
命名空间之间服务与配置互不可见,本身就是隔离边界。多团队共用一个集群时:
- 每个团队/环境一个命名空间,配独立权限(某角色只能读写自己的命名空间)
- 配合上文权限列表,把"谁能碰哪个命名空间"管起来
注意命名空间隔离的是数据,不是资源配额,容量治理仍需统一规划。
网络层安全建议
- 控制台与 OpenAPI 不直接暴露公网,走内网、VPN 或跳板机
- 确需公网访问时只对负载均衡开放,并在安全组做来源 IP 白名单
- 最小化开放端口:业务只访问 8848/9848,关闭其他管理端口
配置加密
配置里避免明文存放数据库密码、密钥等敏感信息:可存密文并配合加密插件/解密 SDK,由应用侧解密使用;敏感值不要写在配置内容明文里。
小结
安全三板斧:服务端开启鉴权并把默认密钥、默认口令全部换掉;OpenAPI 与脚本统一走"登录取 token、请求带 token";网络层不裸奔公网、用命名空间 + 权限做多租户隔离。做到这三点,Nacos 才算达到生产可用状态。