MSE中的Nacos注册配置中心可以开启鉴权功能,以降低某个实例被恶意用户非法获取或修改的风险。本文介绍如何在MSE上为Nacos实例配置鉴权访问以及如何使用Nacos Client进行鉴权访问。
前提条件
访问方式
本文使用引擎直连链路的方式配置鉴权访问。授权成功后,Nacos Client可以通过RAM用户或RAM角色访问MSE的Nacos。
引擎直连链路:通过SDK/Client直接访问Nacos引擎,主要用于程序应用对Nacos引擎的访问。
引擎管控链路:通过管控控制台对Nacos引擎进行操作、查看和运维,适用于各类人员使用Nacos引擎。关于引擎管控链路的访问鉴权配置和使用,即为RAM用户授予使用MSE控制台权限的具体操作,请参见注册配置中心授权。
开启鉴权
创建的Nacos引擎默认不启用鉴权,Nacos引擎会响应所有请求。
Nacos开源控制台的登录功能仅用于记录用户,并没有鉴权拦截请求的能力,您可以参照本文开启鉴权。开启Nacos鉴权功能之后,无法通过Nacos开源控制台访问Nacos实例,仅支持使用MSE控制台访问该实例。
登录MSE注册配置中心管理控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择注册配置中心 > 实例列表。
在实例列表页面,单击目标实例名称。
在左侧菜单栏,单击参数设置,然后在参数设置页面单击编辑。
选择ConfigAuthEnabled或NamingAuthEnabled参数,在值列,单击ConfigAuthEnabled或NamingAuthEnabled对应的是,然后单击保存并重启实例。
重要打开配置中心鉴权或注册中心鉴权开关前,您需要在客户端配置AccessKey,否则将无法获取配置或服务。
两个开关分别控制对应模块,互不影响。
参数
说明
ConfigAuthEnabled
配置中心鉴权开关。支持基础版1.2.1及以上版本的实例,以及专业版及开发版全版本的实例。
NamingAuthEnabled
注册中心鉴权开关。支持专业版或开发版2.0.4及以上版本的实例。
为RAM用户配置鉴权
(可选)步骤一:创建RAM用户
如果您没有RAM用户或需要创建新的RAM用户,请参见创建RAM用户。
步骤二:为RAM用户添加权限
为已有或者步骤一所创建的RAM用户授权,并选择以下系统策略。此操作将为RAM用户授予对所有Nacos实例配置和服务的读写或只读权限,属于粗粒度授权。具体授权操作,请参见为RAM用户授权。
权限策略名称 | 说明 |
AliyunMSEFullAccess | 管理微服务引擎MSE的权限,等同于阿里云账号的权限,被授予该权限的RAM用户拥有所有功能的操作权限。 |
AliyunMSEReadOnlyAccess | 微服务引擎MSE的只读权限,被授予该权限的RAM用户具有阿里云账号所有资源的只读权限。 |
每次最多绑定5条策略,如需绑定更多策略,请分次操作。
步骤三:客户端(SDK)配置鉴权
AccessKey包括AccessKey ID和AccessKey Secret,需一起使用。Nacos实例开启鉴权后,在使用Nacos客户端时,需要添加对应RAM用户的AccessKey ID和AccessKey Secret,否则无法访问Nacos实例。关于获取AccessKey,请参见创建AccessKey。
Java版本的Nacos Client
若您使用的是Java版本的Nacos Client,请按照下列方式配置程序代码。
properties.put(PropertyKeyConst.SERVER_ADDR, "${mseNacos实例域名}");
properties.put(PropertyKeyConst.ACCESS_KEY, "${accessKey}");
properties.put(PropertyKeyConst.SECRET_KEY, "${secretKey}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Spring Cloud Alibaba框架
若您使用的是Spring Cloud Alibaba框架,请在应用配置文件添加下列配置。
## 注册中心
spring.cloud.nacos.discovery.accessKey=${accessKey}
spring.cloud.nacos.discovery.secretKey=${secretKey}
## 配置中心
spring.cloud.nacos.config.accessKey=${accessKey}
spring.cloud.nacos.config.secretKey=${secretKey}
Dubbo框架
若您使用的是Dubbo框架,请在dubbo配置文件的注册中心链接URL中加入下列配置。
dubbo.registry.address=nacos://${mseNacos实例域名}:8848?accessKey=${accessKey}&secretKey=${secretKey}
Go版本的Nacos Client
若您使用的是Go版本的Nacos Client,请按照下列方式配置程序代码。
cc := constant.ClientConfig{
AccessKey: "${accessKey}",
SecretKey: "${secretKey}"
}
serverConfigs := []constant.ServerConfig{
{
IpAddr: "${mseNacos实例域名}",
Port: 8848
}
}
namingClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
为RAM角色配置鉴权
借助ECS实例或ACK实例的RAM角色,您可以将RAM角色与ECS实例或ACK实例关联起来,然后将RAM角色名称告知Nacos Client,无需配置AccessKey即可访问MSE。基于RAM角色,您可以为不同实例设定不同的角色和授权策略,控制访问权限粒度或范围。更多信息,请参见ECS实例RAM角色、授权概述和RAM角色概览。
使用RAM角色进行鉴权,需要将应用部署到阿里云ECS实例或ACK集群,且ECS实例或ACK集群的网络环境为专用网络VPC。更多信息,请参见什么是云服务器ECS、什么是容器服务Kubernetes版和什么是专有网络。
使用ECS实例的RAM角色访问MSE Nacos
步骤一:创建RAM角色并配置授权策略
步骤二:为ECS实例授予RAM角色
登录ECS管理控制台。
在左侧导航栏,选择 。
在页面左侧顶部,选择目标资源所在的资源组和地域。
找到要操作的ECS实例,选择
。在对话框中,选择创建好的实例RAM角色,单击确定。
步骤三:客户端(SDK)配置鉴权
Java版本的Nacos Client
若您使用的是Java版本的Nacos Client,请按照下列方式配置程序代码。
使用RAM角色进行鉴权需要客户端升级至对应版本。更多信息,请参见Nacos Client鉴权及加解密支持版本。
properties.put(PropertyKeyConst.SERVER_ADDR, "${mseNacos实例域名}");
properties.put(PropertyKeyConst.RAM_ROLE_NAME, "${roleName}");
// 注册中心
NamingService naming = NamingFactory.createNamingService(properties);
// 配置中心
ConfigService configService = ConfigFactory.createConfigService(properties);
Spring Cloud Alibaba框架
若您使用的是Spring Cloud Alibaba框架,请在应用配置文件中添加下列配置。
需要将Spring Cloud Alibaba框架版本升级至2.2.9.RELEASE及以上版本。
## 注册中心
spring.cloud.nacos.discovery.ramRoleName=${roleName}
## 配置中心
spring.cloud.nacos.config.ramRoleName=${roleName}
Dubbo框架
若您使用的是Dubbo框架,请在dubbo配置文件的注册中心链接URL中加入下列配置。
dubbo.registry.address=nacos://${mseNacos实例域名}:8848?ramRoleName=${roleName}
使用ACK集群的RAM角色访问MSE Nacos
步骤一:为ACK集群Worker RAM角色授予权限
创建自定义权限策略,策略内容如下。具体操作,请参见步骤一:创建自定义权限策略。
为实例授予微服务引擎MSE的管理权限。
{ "Action": "mse:*", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } }
为实例授予微服务引擎MSE的只读权限。
{ "Action": [ "mse:Query*", "mse:List*", "mse:Get*" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } }
为集群的Worker RAM角色授权。具体操作,请参见步骤二:为集群的Worker RAM角色授权。
步骤二:客户端(SDK)配置鉴权
Java版本的Nacos Client
若您使用的是Java版本的Nacos Client,请按照下列方式配置程序代码。
使用RAM角色进行鉴权需要客户端升级至对应版本。更多信息,请参见Nacos Client鉴权及加解密支持版本。
properties.put(PropertyKeyConst.SERVER_ADDR, "${mseNacos实例域名}");
properties.put(PropertyKeyConst.RAM_ROLE_NAME, "${roleName}");
// 注册中心
NamingService naming = NamingFactory.createNamingService(properties);
// 配置中心
ConfigService configService = ConfigFactory.createConfigService(properties);
Spring Cloud Alibaba框架
若您使用的是Spring Cloud Alibaba框架,请在应用配置文件中添加下列配置。
需要将Spring Cloud Alibaba框架版本升级至2.2.9.RELEASE及以上版本。
## 注册中心
spring.cloud.nacos.discovery.ramRoleName=${roleName}
## 配置中心
spring.cloud.nacos.config.ramRoleName=${roleName}
Dubbo框架
若您使用的是Dubbo框架,请在dubbo配置文件的注册中心链接URL中加入下列配置。
dubbo.registry.address=nacos://${mseNacos实例域名}:8848?ramRoleName=${roleName}