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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
简介: 本文向大家介绍,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搭建和管理企业级网站应用
相关文章
|
2月前
|
安全 Cloud Native 测试技术
Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
祝贺 Nacos 社区 Star 数突破 30000!值此时机,回顾过去的两年时间,Nacos 从 2.0.4 版本演进到了 2.4.2 版本,基本完成了当初构想的高性能、易拓展的目标,并且对产品的易用性和安全性进行了提升,同时优化了新的官网,并进行了多语言和更多生态支持。未来,Nacos 会向更安全、更泛化、更云原生的 Nacos3.0 演进。
137 16
|
2天前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
10 0
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
3月前
|
安全 Nacos 数据安全/隐私保护
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
本文详细介绍了如何在微服务环境下从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性。作者小米分享了升级过程中的关键步骤,包括备份配置、更新鉴权信息及验证测试等,并解答了常见问题。通过这些步骤,可以帮助读者顺利完成升级并提高系统的安全性与一致性。
106 8
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
|
3月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
3月前
|
缓存 Cloud Native Java
【紧急救援】Nacos配置上线后失效?手把手教你如何轻松搞定命名空间修改难题!
【8月更文挑战第15天】Nacos是关键的云原生服务管理平台,用于动态服务发现与配置管理。但在使用其管理微服务配置时,可能会遇到命名空间内的配置更新后不生效的问题。本文探讨此问题并提供解决方案。首先需确认Nacos服务器运行正常及客户端正确连接。接着检查客户端缓存配置,可通过禁用缓存或缩短缓存间隔来即时更新配置。例如,在Spring Cloud Alibaba Nacos配置中心中启用自动刷新功能,并设置每5秒拉取新配置。同时,对于新增配置项,需重启客户端应用。还需检查Nacos服务器日志排除异常,并考虑升级Nacos版本解决兼容性问题。通过这些步骤,通常可有效解决配置不生效的难题。
153 0
|
3月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
251 0
|
4月前
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
94 5
|
4月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
112 3
|
3月前
|
应用服务中间件 Nacos 数据库
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
61 1

相关产品

  • 微服务引擎