首页 > 数据库 >将AWS RDS MySQL实例从存储未加密改为加密的方案

将AWS RDS MySQL实例从存储未加密改为加密的方案

时间:2024-07-20 23:27:22浏览次数:15  
标签:加密 RDS Aurora AWS 实例 MySQL 快照

问题描述:

因为AWS RDS官方文档【1】中已经明确说明,MySQL RDS的存储为EBS卷,用KMS进行RDS加密有如下限制:

您只能在创建RDS的时候,选择加密。对于已经创建的RDS实例,您无法将为加密的实例,直接改为加密实例。(文档【1】中的Amazon RDS 加密的数据库实例的限制部分)

因此,对于一个我们已经创建并运行的实例,我们无法将其从未加密的状态,直接改为加密状态。

那么如果我的数据较多,或者我的生产环境过于忙碌,我也并不想通过mysqldump这类,需要很长的停机时间才能够迁移全部数据的方式,将数据从未加密的实例迁移到加密实例。

我有哪些方案可以选择呢?

分析过程 及 方案建议:

1. 我们可以为RDS MySQL创建一个Aurora MySQL 集群的只读副本。因为我们可以在创建Aurora集群的只读副本的的时候,将“启用加密”的选项选择上。等到Aurora副本和primary的MySQL RDS latency为0以后,promote Aurora cluster副本,并修改application connection string。

文档【2】对这个方式提供了理论支撑:如果 MySQL 数据库实例未加密,请指定一个加密密钥来对数据库集群进行静态加密。我也进行了测试,未加密的RDS MySQL是可以创建加密的Aurora cluster的。

2. 如果我们并不希望通过建Aurora副本的方式,而希望继续使用RDS MySQL。
那么我们可以通过如下的步骤,建立一个加密的RDS MySQL实例,在这之后建立源库和新库之间的主从,步骤如下:

我们可以通过您的未加密的RDS实例,记录binlog position, 之后创建一个未加密的快照。之后,选定此快照,通过复制(copy)的方式,复制一个快照的副本【3】,而copy的过程中,我们可以选定KMS加密并选定使用加密的key。这样创建的新的快照,便是加密的快照。之后,我们可以用这个快照恢复成一个新的RDS,这个新的RDS,即为加密RDS。这个过程也在文档【1】中有所提及。

等到snapshot还原RDS B完成以后,我们可以通过用mysql.rds_set_external_source这个存储过程【4】,将源RDS设为Primary,并同步这段时间Primary写入的数据,之后在同步完成以后,promote已经加密的新库并更改endpoint.

过程描述:
未加密的实例A --> 未加密的实例快照A snapshot -- > 通过copy,成为加密快照Encrypted Snapshot B -->  Snapshot B还原为加密的RDS B. --> 用primary replica连结A和B.

3. 另一种方式是,我们创建一个新的RDS,并在创建RDS的过程中,选择加密RDS的存储。
在创建出新的加密RDS以后,我们可以使用Database Migration Service【5】服务,创建一个fullload + CDC,全量+持续复制任务,指定我们的未加密的RDS为源,已经加密的新的RDS为目标端。将我们的未加密的RDS中的数据,全部迁移到已经加密的新的RDS中。

请注意,DMS服务并不会迁移MySQL数据库的所有架构。我们可能需要mysqldump metadata only的方式迁移view, function, procedure,trigger等DDL。

过程描述:
未加密的实例A 为源端 ---> DMS 任务 --> 加密的实例B为目标

在迁移完以后,我们可以选择改变业务应用中的RDS 连结,选择新的加密的RDS进行应用。或者,我们可以更换RDS 实例ID,重命名原RDS,并将新的已经加密的RDS改为原RDS ID。然后重新进行应用的连结。

参考文档:
【1】加密RDS实例, 以及Amazon RDS 加密的数据库实例的限制:
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/Overview.Encryption.html    
【2】Aurora只读副本加密:https://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.RDSMySQL.Replica.html 
【3】复制RDS快照:https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html  
【4】mysql.rds_set_external_source: https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/mysql_rds_set_external_source.html 
【5】Databse Migration Service介绍:https://docs.amazonaws.cn/dms/latest/userguide/Welcome.html    

标签:加密,RDS,Aurora,AWS,实例,MySQL,快照
From: https://blog.csdn.net/shiran0418/article/details/140555216

相关文章

  • SQL Server 2008中的代码安全(七):证书加密
    原文链接:https://blog.csdn.net/downmoon/article/details/6252336证书可以在数据库中加密和解密数据。证书包含密钥对、关于证书拥有者的信息、证书可用的开始和结束过期日期。证书同时包含公钥和密钥,前者用来加密,后者解密。SQLServer可以生成它自己的证书,也可以从外部文件或程......
  • ViT(论文解读):An Image is worth 16*16 words
    研究问题虽然transformer已经成为NLP领域的标准(BERT、GPT3、T5),但是在CV领域很有限。在CV中,自注意力要么和CNN一起用,要么替换CNN中某个组件后保持整体结构不变。本文证明了对CNN的这种依赖并不必要,在图像分类中,纯VisionTransformer直接作用于一系列图像块也可以取得不错的成果......
  • 【Rust光年纪】解锁Rust语言核心库奥秘:加密、数字签名和数据库操作全面解析
    从加密到数据库:探索Rust语言丰富的工具库生态系统前言在Rust语言开发中,使用合适的库可以极大地提高代码的安全性和效率。本文将介绍一些用于加密、数字签名、数据库连接等功能的Rust语言库,帮助读者快速了解其核心功能、使用场景以及安装配置等方面的信息。欢迎订阅专栏:R......
  • MongoRepository 操作 AWS DocumentDB时,如何达到与MySql 中有 select … for update
    在MySQL中,SELECT...FORUPDATE用于在事务中对读取的数据行加锁,以防止其他事务同时修改这些行。这种行级锁定机制在关系型数据库中广泛使用,以确保数据一致性。在MongoDB或AWSDocumentDB中,类似的效果可以通过以下方式实现:使用FindandModify操作:MongoDB提供了f......
  • 自动化中MD5和RSA加密解读!
     接口自动化中一般都会遇到密码加密的情况,有时候我们会找开发解决。其实测试工程师也是可以自己解决的,下面就给大家介绍一下请求中加密的方式和应用。 MD5加密特性与加密处理对称加密算法:加密和解密使用同一个密钥-----单密钥加密DES、AES不对称加密算法:加密和解密......
  • pdf文件编辑时提示加密怎么解除?
    在数字化时代,PDF文件因其跨平台性和格式稳定性,在办公和学习中得到了广泛应用。为了保护PDF文件内容不被未经授权的人员查看或编辑,许多用户会选择对PDF文件进行加密处理。然而,当需要编辑这些加密的PDF文件时,PDF文件编辑加密怎么解除,便成为了一个亟待解决的问题。本文将介绍几种解除......
  • pdf怎么加密? 教你3个好用的方法
    PDF加密是一种常见的文档保护措施,用于确保PDF文件中的内容不被未经授权的人访问或修改。随着数字化时代的到来,电子文档的使用变得越来越普遍。在处理敏感信息或重要文件时,保护文档安全显得尤为重要。一般来说,PDF加密主要包括两种方式:用户密码和所有者密码。用户密码用于限制文档......
  • 如何在AWS上构建Apache DolphinScheduler
    引言随着云计算技术的发展,AmazonWebServices(AWS)作为一个开放的平台,一直在帮助开发者更好的在云上构建和使用开源软件,同时也与开源社区紧密合作,推动开源项目的发展。本文主要探讨2024年值得关注的一些开源软件及其在AWS上的应用情况,希望能够给大家参考使用!2024年数据开源......
  • vue对接口参数加密
    1.安装:npminstallcrypto-js或者yarnaddcrypto-js2.引入crypto-js,并封装加密解密的方法secureUtil.js/***Createdbylijingweion2018/1/12.*/importCryptoJSfrom'crypto-js'//SecureUtil=function(){varCONTRAST="0123456789ABCDEFGHIJKLM......
  • js 加密算法
    (1)md5摘要算法npminstallcrypto-jsconst CryptoJS = require('crypto-js');//原始数据const data = '123456';//生成MD5摘要const md5Digest = CryptoJS.MD5(data).toString();console.log(md5Digest);(2)AES加密constCryptoJS=require("crypto-j......