AWS 账号间迁移加密RDS数据库的踩坑实录
背景
最近在进行系统迁移,需要将原来一个环境的RDS迁移到另外一个账号。虽然大部分服务迁移都相对简单,但当我尝试将加密的RDS数据库迁移到新账号时,遇到了不少问题。
这篇文章记录我是如何解决这个问题的,希望能帮助遇到类似情况的朋友少走弯路。
问题分析
刚开始我天真地以为,像迁移EC2那样,RDS也能轻松地在账号间共享或迁移。然而实际操作后才发现,尤其是对于使用默认AWS KMS密钥加密的RDS实例,跨账号共享存在诸多限制。
核心问题是:使用默认服务密钥加密的RDS快照不支持跨账号共享。
解决方案详解
经过一番研究和实践,我找到了完整的解决方案,主要分为源账号和目标账号两部分操作。
源账号操作
1. 创建RDS快照
首先需要为要迁移的数据库创建快照。这一步很简单,但如果数据库使用默认KMS密钥加密,我们还不能直接共享这个快照。
2. 创建可共享的自定义KMS密钥
关键步骤来了!需要创建一个新的KMS密钥,并授权给目标账号:
-
进入KMS服务控制台
-
选择"创建密钥"
-
选择对称加密密钥,其他选项保持默认
-
为密钥添加标签和别名(我用了"cross-account-rds-key")
-
设置密钥管理员权限
-
重点
:在密钥使用权限中,添加目标AWS账号ID
- 这一步非常关键,如果没有正确授权,目标账号将无法使用这个密钥解密数据
3. 使用新密钥重新加密快照
现在我们需要用新创建的密钥对原始快照进行重新加密:
- 在RDS控制台中找到原始快照
- 选择"操作" > "复制快照"
- 填写新快照名称(如"shareable-snapshot")
- 确保选中"启用加密"选项
- 在主密钥下拉菜单中,选择刚才创建的自定义KMS密钥
- 点击"复制快照"按钮完成操作
这样,我们就得到了一个可以跨账号共享的加密快照。
4. 共享加密快照
- 选中使用自定义KMS密钥加密的新快照
- 点击"操作" > "共享快照"
- 输入目标AWS账号ID
- 确认共享设置
目标账号操作
1. 查看共享快照
在目标账号中:
- 登录AWS管理控制台
- 进入RDS服务
- 在左侧导航栏选择"快照"
- 切换到"与我共享"标签页
这时应该能看到从源账号共享过来的快照。
2. 复制共享快照(关键步骤)
这一步容易出错,需要特别注意:
-
选择共享的快照
-
点击"操作" > "复制快照"
-
填写目标快照名称
-
重要
:此时系统会要求输入源KMS密钥的ARN
- 这个ARN必须从源账号获取,格式类似:
arn:aws:kms:区域:源账号ID:key/密钥ID
- 如果不知道确切ARN,需要联系源账号管理员提供,我们自己做的话直接复制就行了。
- 这个ARN必须从源账号获取,格式类似:
-
选择是否使用目标账号自己的KMS密钥进行再加密(建议选择,便于后续管理)
-
完成复制操作
如果不提供正确的源KMS密钥ARN,复制操作会失败,这是很多人卡住的地方。
3. 从复制的快照还原数据库
成功复制快照后,就可以从快照创建新的RDS实例了:
- 选择刚才复制的快照
- 点击"操作" > "还原快照"
- 配置新数据库实例参数:
- 选择合适的实例类型
- 配置存储选项
- 设置网络和安全组
- 配置数据库参数
- 点击"创建数据库"按钮
等待几分钟,新的数据库实例就会创建完成。
4. 验证迁移结果
最后,别忘了连接新创建的数据库实例,确认:
- 所有数据是否完整
- 数据库配置是否正确
- 应用程序能否正常连接
踩坑总结
回顾整个过程,主要有这几个容易出问题的点:
- 默认KMS密钥的限制:AWS不允许使用默认服务密钥加密的快照直接共享
- KMS密钥权限:必须正确配置自定义KMS密钥的跨账号权限
- 源KMS ARN:在目标账号复制快照时,必须提供正确的源KMS密钥ARN
- 区域限制:跨账号共享通常需要在同一AWS区域内进行
结语
通过这次实践,我对AWS的安全机制有了更深的理解。虽然过程有些繁琐,但这些限制确实是为了保障数据安全而设计的。希望这篇文章能帮助到需要进行类似操作的朋友们!
如果你有任何补充或更好的方法,也欢迎分享交流。