MSE Nacos,解决敏感配置的安全隐患

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本文向大家介绍,MSE Nacos 是如何解决敏感配置的安全隐患,并提供使用 MSE Nacos 加解密敏感配置的最佳实践。

1.前言


1.1Nacos 简介

Nacos[1]是一个更易于构建云原生应用的配置管理和服务管理平台。Nacos 的配置中心具有众多优势:动态实时更新配置、支持水平扩展的高可用系统架构、API 简单易上手、开源免费、多语言支持、集成度高等。基于以上特点,Nacos 逐渐成为配置管理的事实标准,被越来越多的开发者接纳。


1.2敏感数据的安全挑战

很多用户在使用 Nacos 的配置管理功能时,逐渐开始在 Nacos 中存储敏感数据(如数据源、Token、用户名和密码等)。首先,用户自建的 Nacos 实例并未接入过多的安全防护,很容易受到安全攻击;其次,采用明文格式存储的敏感信息,很容易被窃取,给公司的信息安全带来了极大的隐患。


国家三级等保[2](三级信息安全等级保护)是针对重要信息系统的安全保护要求。其中对于应用与数据安全,提出了如下要求:


1. 软件开发过程应遵循安全编码原则,减少潜在漏洞。

2. 数据存储和处理过程中应进行必要的加密,同时也要有数据完整性检查机制。


针对数据安全隐患,MSE Nacos 可为敏感配置提供满足国家三级等保中数据安全要求的解决方案。


本文就向大家介绍,MSE Nacos 是如何解决敏感配置的安全隐患,并提供使用 MSE Nacos 加解密敏感配置的最佳实践。


2.MSE Nacos:解决敏感数据的安全隐患


2.1简介

MSE[3]是 Aliyun 推出的一个面向业界主流开源微服务生态的一站式微服务平台,提供注册配置中心(原生支持 Nacos/ZooKeeper/Eureka),具备如下优势:100% 兼容开源生态&功能增强、全托管服务、高可用、可视化等特点。


MSE Nacos 的配置中心,针对敏感配置的安全性问题,结合 KMS 密钥管理服务,推出了敏感配置的加解密功能,可显著降低存储在 Nacos 配置中心的敏感数据的泄露风险。


2.2方案

2.2.1产品架构

MSE Nacos 为敏感配置加解密提供了集成方案:KMS 为配置加解密,MSE Nacos 存储加密后的敏感配置。整体的产品逻辑架构图如下:



可以从整体的架构逻辑中看到,整个方案中敏感配置都是密文传输、密文存储,可显著提升敏感配置的安全性。


2.2.2安全特性

从国家三级信息安全等级保护角度来看,MSE Nacos 集成 KMS 的配置加解密方案做到了以下几点:


1. 数据存储加密

在应用侧对敏感数据加密处理,将密文存储在 Nacos 配置中心,有效防止敏感数据泄露。

2. 数据传输加密

MSE Nacos 可帮助用户配置并开启 TLS 数据传输加密,确保传输链路安全、数据不可被窃取。

3. 数据备份与恢复

在应用侧,Nacos Client 会落盘存储加密后的配置数据。在 MSE Console 中,可一键导出/导入明文配置、密文配置,可为用户建立数据备份策略,提供有效的路径。后续,MSE Console 计划接入密文数据的定期备份策略,敬请期待。

4. 数据生命周期管理

MSE 可为用户提供一站式的配置生命周期的管理,在 MSE Console 可以完成加密配置、普通配置的创建、修改、查看、删除等管理操作。

5. 数据访问权限控制

MSE 提供细粒度(细粒度到单个配置维度)的 RAM 权限管控,用户可结合实际场景,配置细粒度、多维度的的权限管控策略。

6. 数据审计

MSE 会记录所有的配置操作记录,包括配置变更时间、操作人、变更内容等关键信息,使得整个数据流程可追溯。


2.2.3MSE Nacos 配置加解密原理

MSE Nacos 提供的敏感配置加密功能,能否有效保护用户的敏感数据呢?MSE Nacos 是怎么做的呢?相信这是绝大多数用户的问题,因为整个流程对用户而言是黑盒模式,用户无法得知 MSE Nacos 是否真如其对外宣称的“能为用户提供安全、高效的敏感配置加密能力”。这里将详细阐述,MSE Nacos 对用户配置加解密的整个链路详情,以化解用户顾虑。


这里有一张 MSE Nacos 对配置加解密的整体链路图,详细的阐述了整个配置加解密链路,下面详细展开讲解。



配置加密链路

可以看到,整个链路中有 4 个主体:MSE Console、Nacos Client(即业务应用侧)、KMS Service、MSE Nacos。整个配置加密链路流程如下:


1. MSE Console/Nacos Client SDK(即业务应用侧)编辑待加密配置文本


这里需要说明,MSE Console与Nacos Client SDK 侧,都可以作为加解密配置的发起方,MSE Console 需要用户登录 Aliyun 官网的 MSE 产品控制台操作,而且必须赋予操作用户相应的 RAM 权限;Nacos Client SDK(业务应用)侧需要配置 KMS 相关实例的配置(下文介绍如何操作)。


2. MSE Console/Nacos Client SDK 请求 KMS Service 加密明文


MSE Console 与 Nacos Client SDK 侧编辑好待加密的明文配置后,就可以请求 KMS Service 对明文配置加密。


3. KMS Service 返回加密后的密文给 MSE Console/Nacos Client SDK 侧


4. MSE Console/Nacos Client SDK 请求 MSE Nacos 存储加密文本


这里需要说明的是,所有的明文配置都是在 MSE Console/Nacos Client SDK(业务应用)侧使用;MSE Nacos 存储的是加密后的密文,并未存储任何明文配置信息。因此即使 MSE Nacos 被攻击,也不会泄露任何加密配置的明文信息。所以,用户只需关心业务应用侧的安全防护,大大收敛了数据安全风险。


5. MSE Nacos 返回结果给 MSE Console/Nacos Client SDK


配置解密链路

配置解密链路无非就是配置加密链路的逆向过程,这里不再赘述,需要强调的是,解密后的明文配置都是在 MSE Console/Nacos Client SDK(业务应用)侧拿到的;MSE Nacos 无法拿到任何加密配置的明文信息。


2.3推荐加密的配置项

1. AK、SK 信息

2. 明文的 password 密码、token 等信息

3. RDS 数据源等配置总之,对于存在泄露风险的配置,都推荐使用 MSE Nacos 的加密配置功能存储。


3.MSE Nacos:敏感配置加解密的最佳实践


下面介绍如何使用 MSE 提供的配置加密能力,具体的文档说明,您可查看 MSE 官方文档中心的配置加密[4]这篇文档。


整个最佳实践可以归纳为如下几个步骤:


1. 开通微服务引擎 MSE

2. 登录 MSE 控制台,并创建 Nacos 引擎实例

3. 开通密钥管理服务 KMS

4. 登录密钥管理服务 KMS 控制台,创建 KMS 专属实例,创建密钥资源

5. 在 MSE 控制台,开启配置加密功能,绑定 KMS 密钥到 Nacos 实例,创建并使用加密配置

6. 通过 Nacos Client SDK 创建并使用加密配置


3.1开通微服务引擎 MSE

您可登录微服务引擎 MSE[5],查看并开通 MSE。


3.2登录 MSE 控制台,并创建 Nacos 引擎实例



登录微服务引擎 MSE 产品控制台,在左侧选项框中选择“注册配置中心”,点击“实例列表”,确定 region 后,选择“创建实例”。具体 MSE Nacos 实例创建流程,您可参考 MSE 文档中心的创建 Nacos 引擎[6]文档。


3.3开通密钥管理服务 KMS

您可登录密钥管理服务 KMS[7],查看并开通 KMS。


3.4登陆密钥管理服务 KMS 控制台,创建 KMS 专属实例,创建密钥资源


3.4.1 登录密钥管理服务 KMS 产品控制台,创建 KMS 专属实例



这里依次选择“实例管理”,“确定地域”(如北京),“创建实例”。


🔔注意:

1. KMS 实例一定要和使用配置加解密的应用程序的机器在同一个 VPC 内,否则会导致配置加解密无法使用。

2. 不用保证 MSE Nacos 与 KMS 实例的网络互通性。


3.4.2 确定 KMS 实例规格

其中,在创建 KMS 专属实例时,需要确认实例资源规格。这里需要强调的是,使用 MSE Nacos 的配置加解密能力,仅需 1 个密钥资源即可。其他具体实例规格信息可参考购买和启用 KMS 实例[8]


3.4.3 创建密钥资源



KMS 实例创建完成后,需要继续创建密钥资源。按照上图依次在密钥管理服务 KMS 控制台选择“密钥管理”、“确定地域(如北京)”、“创建密钥”。


3.4.4 确定密钥规格



对于用于 MSE Nacos 配置加解密的密钥,需要确定 2 个参数信息:


1. 密钥类型:对称密钥

2. 密钥规格:Aliyun_AES_256其他密钥参数,可根据客户自己需求设定,具体密钥管理功能可参考密钥管理[9]


3.5在 MSE 控制台,开启配置加密功能,绑定 KMS 密钥到 Nacos 实例,创建并使用加密配置

接下来登录微服务引擎 MSE 产品控制台,开启 MSE Nacos 实例的配置加密开关,并绑定 KMS 密钥至 MSE Nacos 实例。


3.5.1 开启 MSE Nacos 实例的配置加密功能



在 MSE Nacos 实例的详情页面,点击“参数设置”栏,将 ConfigSecretEnabled 的值设置为 true。🔔注意:如果之前为 false,重置为 true 后会导致实例重启。


3.5.2 绑定 KMS 密钥至 MSE Nacos 实例




在 MSE Nacos 实例的详情页面,点击“基础信息”栏,在基础信息的“KMS 密钥”属性中,点击红框图标,绑定第四步创建的 KMS 密钥至此 MSE Nacos 实例(之后 MSE Console 侧编辑的加密配置,都会使用此 KMS 密钥,因此请勿删除、禁用此 KMS 密钥,否则将会导致 MSE Nacos 的配置加解密能力不可用)。


绑定完成后,会在 MSE Nacos 的基础信息中,看到 KMS 密钥已成功绑定。点击密钥 KeyId,会跳转到 KMS 控制台处的密钥详情信息界面。



3.5.3 创建并使用加密配置



在 MSE Nacos 实例的详情页面,点击“配置列表”栏,并点击“创建配置”。



打开配置编辑界面,第 1 步点击“数据加密”开关,之后按照第 2、3、4 步骤编辑配置详情,并在编辑完成后,点击“发布”,即可创建加密配置,并可在 MSE 控制台查看刚刚创建的加密配置信息。




🔔注意:

1. MSE Nacos 存储的是加密后的密文信息。

2. MSE Console 控制台会对加密配置展示明文信息,如您想要在控制台隐匿此加密配置的信息,可参考链配置中心细粒度鉴权[10],分别授权不同的 RAM 权限给不同的 aliyun 账户。


3.6. 通过 Nacos Client SDK 创建并使用加密配置

您也可以使用 Nacos Client SDK 来发布、获取加密配置,这里以 JAVA SDK 为例。


3.6.1 获取 KMS 3.0 实例配置

登录密钥管理服务 KMS 控制台,为绑定到 MSE Nacos 实例的 KMS 密钥所归属的 KMS 实例,创建“应用接入点”(必选)、获取实例 CA 证书(可选)如图所示。



点击“快速创建应用接入点”后,请选择如下信息后,创建应用接入点:


  • 作用域(KMS 实例):请选择绑定至 MSE Nacos 实例的 KeyId 对应的实例 Id。
  • 网络控制规则:请输入使用配置加解密的应用服务坐在的实例的 IP 网段。



(必选)创建“应用接入点”完成后,会有如下信息(请存储至安全的介质中,这些接入点信息不会从 KMS 控制台二次获取,请妥善保存,初始化 Nacos Client SDK 会使用到):


1. 应用身份凭证口令(ClientKeyPassword)

2. 应用身份凭证内容(ClientKeyContent)



(可选)获取实例 CA 证书:如您希望加解密通信链路采用 TLS 加固,可获取 CA 证书,并添加到 Nacos Client 的初始化配置中。


3.6.2 用 KMS 3.0 配置信息,初始化 Nacos Client

1. 您需要在您的代码中添加如下 maven 依赖:


<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.4.3</version>
</dependency>
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client-mse-extension</artifactId>
    <version>1.0.3</version>
</dependency>


2. 初始化 Nacos Client,发布并获取加密配置


try {
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, "mse-xxxxxx-p.nacos-ans.mse.aliyuncs.com");
        properties.put(PropertyKeyConst.RAM_ROLE_NAME, "${roleName}"); //参考下方tips[1]
        properties.put("regionId", "cn-hangzhou");
        properties.put("kms_region_id", "cn-hangzhou");
        properties.put("kmsEndpoint", "kst-hzz6xxxr.cryptoservice.kms.aliyuncs.com");
        properties.put("keyId", "alias/acs/mse");
        properties.put("kmsVersion", "v3.0");
        properties.put("kmsClientKeyContent", "clientKey_content");
        // kmsClientKeyContent与kmsClientKeyFilePath设定任意一个即可,kmsClientKeyContent优先级更高。
        // properties.put("kmsClientKeyFilePath", "clientKey_hangzhou.json");
        properties.put("kmsPasswordKey", "10xxxd1d");
        properties.put("kmsCaFileContent", "ca_content");
        // kmsCaFileContent与kmsCaFilePath设定任意一个即可,kmsCaFileContent优先级更高。
        // properties.put("kmsCaFilePath", "ca.pem");
        ConfigService configService = NacosFactory.createConfigService(properties);
        //发布加密配置(dataId以"cipher-kms-aes-256-"作为前缀)
        configService.publishConfig("cipher-kms-aes-256-dataid", "group", "cipher-content"));
        //获取加密配置
        System.out.println("content:::"+configService.getConfig("cipher-kms-aes-256-dataid", "group", 6000));
      } catch (Exception e) {
            e.printStackTrace();
      }


🔔Tips:

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


3. 您可在 MSE Console 控制台上查看、编辑您通过 Nacos Client SDK 发布的加密配置



您可参考 JAVA SDK 用例[14]、GO SDK 用例[15],并参考 MSE 文档中心的配置加密[16]文档了解详情。


相关链接:

[1] Nacos

[2] 国家三级等保 《信息安全技术 网络安全等级保护基本要求》GB/T 22239-2023

[3] MSE

[4] 配置加密

[5] 微服务引擎 MSE

[6] 创建 Nacos 引擎

[7] 密钥管理服务 KMS

[8] 购买和启用 KMS 实例

[9] 密钥管理

[10] 链配置中心细粒度鉴权

[11] ECS 实例 RAM 角色

[12] 授权概述

[13] RAM 角色概览

[14] JAVA SDK 用例

[15] GO SDK 用例

[16] 配置加密

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
162 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
17天前
|
安全 算法 Java
MSE Nacos 2.3.2.0 发布,性能最多提升三倍,支持操作审计等安全特性
MSE Nacos 是阿里云推出的托管式注册配置中心。它基于阿里云开源产品 Nacos 构建,100% 兼容开源协议,同时在稳定性、安全性、性能、易用性等方面做了增强。不久前,我们发布了 MSE Nacos 2.3.2.0 版本,在性能、安全性方面大幅升级。
|
23天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
140 10
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
51 5
|
2月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
169 10
|
2月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
41 4
|
4月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
4月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
10天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
4月前
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)

相关产品

  • 微服务引擎