怎么保障数据库在凭据变更过程中的安全与稳定?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 本文介绍了在Spring应用中实现RDS数据源账密运行时轮转的方案,通过集成KMS与Nacos,实现数据库凭据的加密托管、动态更新与无缝切换,保障应用在凭据变更过程中的安全与稳定。适用于使用Java语言开发的Spring Boot或Spring Cloud应用,支持多种数据库类型,如MySQL、SQL Server、PostgreSQL等。

今天讲下如何在Spring应用中实现RDS数据源账密的运行时轮转,通过集成KMS与Nacos,实现数据库凭据的加密托管、动态更新与无缝切换,保障应用在凭据变更过程中的安全与稳定。

如果您的应用侧主要使用Java语言,使用Spring Boot或者Spring Cloud框架开发,并且应用中大量访问数据库,比如Mysql,Sql Server,PostgreSQL,MariaDB等,推荐采用运行时数据源轮转方案提升安全性

 

方案架构如下图所示:

9131.jpg

该方案的核心思想就是通过KMS对数据库账号密码进行加密托管,并结合Nacos实现动态配置管理,最终由Druid管理数据库连接。

 

准备工作:

已拥有阿里云账号。

开通云数据库RDS,创建实例;还不会创建实例的友友可以去看小编之前的教程。

开通密钥管理服务(KMS),创建KMS专属版实例,完成KMS密钥KeyId创建。

开通MSE,创建企业版实例。

 

步骤一:创建KMS凭据

1. 前往密钥管理服务的凭据管理页面,选择数据库凭据。

2. 然后选择实例ID,单击创建凭据 > 创建单个凭据。

3. 在创建数据库凭据面板选择RDS凭据的数据库类型,输入凭据名称,选择关联的RDS实例。

22.jpg

4.选双账号托管,输入定制账号名,选择数据库,指定权限。

33.jpg

5.选择加密主密钥,设置轮转周期,最后单击确定。

 

KMS凭据会自动创建访问数据库账号及密码,并且保证密码强度。

 

 

步骤二:创建数据源

说明数据源功能底层基于Nacos配置中心实现,数据源配置将以加密配置形式存储在配置中心中。

 

1. 前往MSE注册配置中心控制台的实例列表页面,在顶部菜单栏选择地域。

2. 单击目标企业版实例名称。在左侧导航栏选择数据源管理。
如果实例没有绑定KME密钥,请按照弹窗提示完成密钥绑定

3. 在数据源管理页面,选择目标命名空间,然后单击创建数据源。

4. 在创建数据源面板,配置数据源相关参数。

44.jpg

5. 单击确定,在确认创建数据源弹框中,再单击确定,提交数据源。

 

步骤三:凭据账密轮转

数据源的帐密轮转功能由KMS密钥管理服务提供,有两种轮转方式:

 

定时轮转:创建凭据时可以设置定时轮转周期,到时会自动轮转

立即轮转:当出现帐密泄漏或者其他需要实时轮转时可以KMS凭据管理控制台进行立即轮转。

 

当KMS凭据发生定时或者主动轮转时,会通知MSE Nacos进行加密数据源配置的更新,Nacos会实时推送应用侧进行账号密码的更新,Druid会优雅进行在线连接的替换,保证对业务无损。

 

说明账号密码的轮转由KMS凭据管家托管,通过RDS控制台、OpenAPI或数据库内高权限账号直接修改托管账号的密码无法实时推送至应用侧。

步骤四:应用侧接入

单击数据源详情页的应用侧接入,查看每个数据源的接入步骤。

 

说明参数配置请以控制台应用侧接入的实际设置为准,控制台中每一步的参数均与目标实例及数据源的绑定关系和动态适配规则直接关联。

 

Step 1: 版本升级

Spring Cloud 版本升级 2023.0.3.3 版本以上。

Druid 升级至 1.2.25版本以上。

<dependency>

   <groupId>com.alibaba</groupId>

   <artifactId>druid</artifactId>

   <version>1.2.25</version>

</dependency>

 

<dependency>

   <groupId>com.alibaba.cloud</groupId>

   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

   <version>2023.0.3.3</version>

</dependency>

 

Step2: 修改配置

修改application.properties,配置开启动态数据源轮转及指定数据源对应的Nacos配置。

 

#将数据源配置导入Spring,初始化数据源

spring.config.import[0]=optional:nacos:cipher-kms-aes-256-proxy-spring-{resourceName}.properties?group=nacos-datasource

 

#指定Nacos地址,此处默认为公网地址,请按需修改

spring.cloud.nacos.config.server-addr={nacos server}

#指定命名空间

spring.cloud.nacos.config.namespace={命名空间ID}

#指定kms region id

spring.cloud.nacos.config.kms_region_id={实例region}

 

#打开druid数据源托管开关并指定轮转加密配置dataId

spring.nacos.config.proxy.druid.enabled=true

spring.nacos.config.proxy.druid.data-id={dataID}

 

Step3 设置访问凭证

数据源对应的加密配置需要在应用运行时进行内存解密,因此需预先设置可解密配置的凭证。该解密过程支持两种凭证管理方式:

 

无AK形式访问凭证(推荐)

如果应用运行时在阿里云ECS或者ACK上,推荐使用无AK形式。设置JVM参数:

ECSRAMRole形式:

-Dspring.cloud.nacos.config.ramRoleName=${ramRoleName}

OIDCRoleARN形式:

-Dspring.cloud.nacos.config.alibabaCloudRoleSessionName=${sessionName}

 

传统AK/SK形式

设置JVM参数:

-Dspring.cloud.nacos.config.accessKey=${accessKey}

-Dspring.cloud.nacos.config.secretKey=${secretKey}

${accessKey}和${secretKey}请替换为实际的accessKey及secretKey。

 

无论选择哪种访问凭证,都需要为凭证进行授权,为对应账号或者角色授予“针对 KMS 加密的解密权限”,才能正常在应用侧内存中将加密配置解密为明文。

 

进入当前实例页面,单击安全防护 > 认证鉴权 > 客户端鉴权 ,授权粒度选择针对 KMS 加密的解密权限,按照指引完成授权。

 

常见问题

1. KMS的凭据轮转什么时候会对旧账密进行失效处理呢?

KMS在凭据轮转时会通知MSE更新账密,并且保留两个版本的账密生效,2个版本前账密会失效,未来会对接具体数据源的会话管理,当旧账密不存在在线连接才会失效,进一步保证稳定性。

 

2. 当应用侧触发异常保护机制时,有办法感知吗?

在Nacos的推送机制中,当应用侧数据连接池触发异常保护机制时,会告知nacos通知失败,可以通过nacos的config.log查看notify-error关键字感知异常保护事件的发生,未来在nacos的新版本中会上报客户端监听期的回调状态,在监听查询功能中可以直接看到客户端的回调失败的状态。

相关文章
|
1月前
|
安全 关系型数据库 数据管理
阿里云数据库:构建高性能与安全的数据管理系统
阿里云数据库提供RDS、PolarDB、Tair等核心产品,具备高可用、弹性扩展、安全合规及智能运维等技术优势,广泛应用于电商、游戏、金融等行业,助力企业高效管理数据,提升业务连续性与竞争力。
|
1月前
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。
|
3月前
|
SQL 人工智能 安全
深度复盘MCP安全风暴:一个工单如何演变成数据库“特洛伊木马”危机?
近期,安全公司 General Analysis 披露的MCP安全漏洞在技术圈引发了巨大震动。这个"特洛伊木马"式的安全漏洞暴露了一个现实:AI时代,传统的数据库访问方式已经无法满足安全需求。阿里云数据管理DMS新推出的DMS MCP Server,正是为AI时代的数据库安全访问而生,它不仅完美解决了传统MCP的安全隐患,更为企业提供了一个安全、智能、高效的数据访问新范式。
385 5
|
8月前
|
数据管理 关系型数据库 MySQL
数据管理服务DMS支持MySQL数据库的无锁结构变更
本文介绍了使用Sysbench准备2000万数据并进行全表字段更新的操作。通过DMS的无锁变更功能,可在不锁定表的情况下完成结构修改,避免了传统方法中可能产生的锁等待问题。具体步骤包括:准备数据、提交审批、执行变更及检查表结构,确保变更过程高效且不影响业务运行。
455 2
|
9月前
|
存储 关系型数据库 数据库
RDS:稳定、安全、开放的新一代云数据库服务
RDS是阿里云提供的新一代云数据库服务,具备稳定、安全、开放的特点。本次分享由阿里云智能集团和平安科技专家共同介绍,涵盖RDS年度产品发布与最佳实践、金融场景下关系型数据库的要求。重点内容包括RDS通用云盘、RDS On OSS、RDS Custom等技术创新,以及在成本控制、性能优化、业务连续性、数据安全等方面的解决方案。通过实际案例展示了RDS在不同行业的应用,如汇联易、莉莉丝游戏、中免日上等,帮助客户实现高效、低成本的数据库管理。
523 2
|
10月前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。
|
11月前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
292 2
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
11月前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
551 9
|
安全 数据库 数据安全/隐私保护
数据库 变更和版本控制管理工具 --Bytebase 安装部署
数据库 变更和版本控制管理工具 --Bytebase 安装部署
838 0
|
1月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
84 3

热门文章

最新文章