MSE中的Nacos注册配置中心可以开启鉴权功能,以降低某个实例被恶意用户非法获取、修改的风险。本文介绍如何在MSE上为Nacos实例配置鉴权访问以及如何使用nacos-client进行鉴权访问。

前提条件

开启鉴权

注意 开启Nacos鉴权功能之后,无法通过Nacos开源控制台访问Nacos实例,请使用MSE控制台访问该实例。基于阿里云RAM用户体系,MSE控制台支持更细粒度的控制台权限控制。具体操作,请参见RAM授权访问注册配置中心
  1. 登录MSE管理控制台
  2. 在左侧导航栏选择注册配置中心 > 实例列表
  3. 实例列表页面,单击具体实例名称。
  4. 在实例基础信息页面左侧菜单栏,单击参数设置,然后在参数设置页面单击编辑
  5. 选择ConfigAuthEnabledNamingAuthEnabled参数,在列,单击ConfigAuthEnabledNamingAuthEnabled对应的,然后单击保存并重启实例
    • ConfigAuthEnabled指配置中心鉴权开关,基础版1.2.1及以上版本的实例支持该参数,专业版及开发版全版本的实例支持该参数。
    • NamingAuthEnabled指注册中心鉴权开关,专业版或开发版2.0.4及以上版本的实例支持该参数。

    两个开关分别控制对应模块,互不影响。

注意 打开配置中心鉴权或注册中心鉴权开关后,没有配置AccessKey的客户端将无法获取配置或服务,请谨慎操作。

RAM用户配置鉴权

步骤一:创建RAM用户

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
  3. 用户页面,单击创建用户
  4. 创建用户页面的用户账号信息区域,输入登录名称显示名称
    说明 单击添加用户,可一次性创建多个RAM用户。
  5. 访问方式区域,选择OpenAPI调用访问
    • 控制台访问:设置控制台登录密码、重置密码策略和多因素认证策略。
      说明 自定义登录密码时,密码必须满足密码复杂度规则。关于如何满足密码复杂度规则,请参见设置RAM用户密码强度
    • OpenAPI调用访问:自动为RAM用户生成访问密钥(AccessKey),支持通过API或其他开发工具访问阿里云。
    说明 为了保障账号安全,建议仅为RAM用户选择一种登录方式,避免RAM用户离开组织后仍可以通过访问密钥访问阿里云资源。
  6. 单击确定

步骤二:为RAM用户添加权限

说明 该操作将会授予该用户所有该用户下的Nacos实例的配置及服务的读写或只读权限,属于粗粒度授权。关于细粒度授权管理,请参见注册中心细粒度鉴权配置中心细粒度鉴权
  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
  3. 用户页面,单击目标RAM用户操作列的添加权限
  4. 添加权限面板,为RAM用户添加权限。
    1. 选择授权应用范围。
      • 整个云账号:权限在当前阿里云账号内生效。
      • 指定资源组:权限在指定的资源组内生效。
        说明 指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务
    2. 输入授权主体。
      授权主体即需要授权的RAM用户,系统会自动填入当前的RAM用户,您也可以添加其他RAM用户。
    3. 选择权限策略。
      权限策略名称 说明
      AliyunMSEFullAccess 管理微服务引擎MSE的权限,等同于阿里云账号的权限,被授予该权限的RAM用户拥有所有功能的操作权限。
      AliyunMSEReadOnlyAccess 微服务引擎MSE的只读权限,被授予该权限的RAM用户具有阿里云账号所有资源的只读权限。
      说明 每次最多绑定5条策略,如需绑定更多策略,请分次操作。
  5. 单击确定
  6. 单击完成

步骤三:客户端(SDK)配置鉴权

AccessKey包括AccessKey ID和AccessKey Secret,需要一起使用。Nacos实例开启鉴权后,在使用Nacos客户端时,需要添加对应RAM用户的AccessKey ID和AccessKey Secret,否则无法访问Nacos实例。关于获取AccessKey,请参见创建AccessKey

  • 若您使用的是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.nacos.discovery.accessKey=${accessKey}
    spring.cloud.nacos.discovery.secretKey=${secretKey}
    
    ## 配置中心
    spring.cloud.nacos.config.accessKey=${accessKey}
    spring.cloud.nacos.config.secretKey=${secretKey}
  • 若您使用的是Dubbo框架,请在dubbo配置文件的注册中心链接URL中加入配置:
    dubbo.registry.address=nacos://${mseNacos实例域名}:8848?accessKey=${accessKey}&secretKey=${secretKey}
  • 若您使用的是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实例中的应用程序需要访问MSE,必须将AccessKey以配置文件或其他形式保存在ECS实例中,这在一定程度上增加了AccessKey管理的复杂性以及暴露的风险性。

借助ECS实例RAM角色,您可以将RAM角色和ECS实例关联起来,然后将RAM角色名称告知Nacos-Client,此后无需配置AccessKey即可访问MSE。基于RAM角色,您可以为不同实例设定不同的角色和授权策略,控制访问权限粒度或范围。例如,如果配置只读策略,关联了该角色的ECS就只能读取MSE的配置和服务,而无法新增或修改MSE配置和服务。更多信息,请参见ECS实例RAM角色RAM角色概览

说明 使用RAM角色进行鉴权,需要将应用部署到阿里云ECS实例,且ECS实例的网络环境为专用网络VPC。更多信息,请参见什么是云服务器ECS什么是专有网络

步骤一:创建RAM角色并配置授权策略

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 角色
  3. 角色页面,单击创建角色
  4. 创建角色面板,选择可信实体类型为阿里云服务,然后单击下一步
  5. 选择角色类型为普通服务角色
  6. 输入角色名称备注
  7. 选择受信服务。
    说明 可以选择的受信服务请以控制台界面为准。
  8. 单击完成
  9. 角色页面,单击目标RAM角色操作列的添加权限
  10. 添加权限面板,为RAM角色添加权限。
    1. 选择授权应用范围。
      • 整个云账号:权限在当前阿里云账号内生效。
      • 指定资源组:权限在指定的资源组内生效。
        说明 指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务
    2. 输入授权主体。
      授权主体即需要授权的RAM角色,系统会自动填入当前的RAM角色,您也可以添加其他RAM角色。
    3. 选择权限策略。
      权限策略名称 说明
      AliyunMSEFullAccess 管理微服务引擎MSE的权限,等同于阿里云账号的权限,被授予该权限的RAM用户拥有所有功能的操作权限。
      AliyunMSEReadOnlyAccess 微服务引擎MSE的只读权限,被授予该权限的RAM用户具有阿里云账号所有资源的只读权限。
      说明 每次最多绑定5条策略,如需绑定更多策略,请分次操作。
  11. 单击确定
  12. 单击完成

步骤二:为ECS实例授予该RAM角色

  1. 登录ECS管理控制台
  2. 在左侧导航栏,选择实例与镜像 > 实例
  3. 在顶部菜单栏左上角处,选择地域。
  4. 找到要操作的ECS实例,选择图标 > 实例设置 > 授予/收回RAM角色
  5. 在弹窗中,选择创建好的实例RAM角色,单击确定完成授予。

步骤三:客户端(SDK)配置RAM角色并访问

  • 若您使用的是Java版本的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.nacos.discovery.ramRoleName=${roleName}
    
    ## 配置中心
    spring.cloud.nacos.config.ramRoleName=${roleName}
  • 若您使用的是Dubbo框架,请在dubbo配置文件的注册中心链接URL中加入配置:
    dubbo.registry.address=nacos://${mseNacos实例域名}:8848?ramRoleName=${roleName}