AWS 账号间迁移加密RDS数据库的踩坑实录
AWS 账号间迁移加密RDS数据库的踩坑实录

AWS 账号间迁移加密RDS数据库的踩坑实录

内容目录

AWS 账号间迁移加密RDS数据库的踩坑实录

背景

最近在进行系统迁移,需要将原来一个环境的RDS迁移到另外一个账号。虽然大部分服务迁移都相对简单,但当我尝试将加密的RDS数据库迁移到新账号时,遇到了不少问题。

这篇文章记录我是如何解决这个问题的,希望能帮助遇到类似情况的朋友少走弯路。

问题分析

刚开始我天真地以为,像迁移EC2那样,RDS也能轻松地在账号间共享或迁移。然而实际操作后才发现,尤其是对于使用默认AWS KMS密钥加密的RDS实例,跨账号共享存在诸多限制。

核心问题是:使用默认服务密钥加密的RDS快照不支持跨账号共享

解决方案详解

经过一番研究和实践,我找到了完整的解决方案,主要分为源账号和目标账号两部分操作。

源账号操作

1. 创建RDS快照

首先需要为要迁移的数据库创建快照。这一步很简单,但如果数据库使用默认KMS密钥加密,我们还不能直接共享这个快照。

2. 创建可共享的自定义KMS密钥

关键步骤来了!需要创建一个新的KMS密钥,并授权给目标账号:

  1. 进入KMS服务控制台

  2. 选择"创建密钥"

  3. 选择对称加密密钥,其他选项保持默认

  4. 为密钥添加标签和别名(我用了"cross-account-rds-key")

  5. 设置密钥管理员权限

  6. 重点

    :在密钥使用权限中,添加目标AWS账号ID

    • 这一步非常关键,如果没有正确授权,目标账号将无法使用这个密钥解密数据

3. 使用新密钥重新加密快照

现在我们需要用新创建的密钥对原始快照进行重新加密:

  1. 在RDS控制台中找到原始快照
  2. 选择"操作" > "复制快照"
  3. 填写新快照名称(如"shareable-snapshot")
  4. 确保选中"启用加密"选项
  5. 在主密钥下拉菜单中,选择刚才创建的自定义KMS密钥
  6. 点击"复制快照"按钮完成操作

这样,我们就得到了一个可以跨账号共享的加密快照。

4. 共享加密快照

  1. 选中使用自定义KMS密钥加密的新快照
  2. 点击"操作" > "共享快照"
  3. 输入目标AWS账号ID
  4. 确认共享设置

目标账号操作

1. 查看共享快照

在目标账号中:

  1. 登录AWS管理控制台
  2. 进入RDS服务
  3. 在左侧导航栏选择"快照"
  4. 切换到"与我共享"标签页

这时应该能看到从源账号共享过来的快照。

2. 复制共享快照(关键步骤)

这一步容易出错,需要特别注意:

  1. 选择共享的快照

  2. 点击"操作" > "复制快照"

  3. 填写目标快照名称

  4. 重要

    :此时系统会要求输入源KMS密钥的ARN

    • 这个ARN必须从源账号获取,格式类似:arn:aws:kms:区域:源账号ID:key/密钥ID
    • 如果不知道确切ARN,需要联系源账号管理员提供,我们自己做的话直接复制就行了。
  5. 选择是否使用目标账号自己的KMS密钥进行再加密(建议选择,便于后续管理)

  6. 完成复制操作

如果不提供正确的源KMS密钥ARN,复制操作会失败,这是很多人卡住的地方。

3. 从复制的快照还原数据库

成功复制快照后,就可以从快照创建新的RDS实例了:

  1. 选择刚才复制的快照
  2. 点击"操作" > "还原快照"
  3. 配置新数据库实例参数:
    • 选择合适的实例类型
    • 配置存储选项
    • 设置网络和安全组
    • 配置数据库参数
  4. 点击"创建数据库"按钮

等待几分钟,新的数据库实例就会创建完成。

4. 验证迁移结果

最后,别忘了连接新创建的数据库实例,确认:

  • 所有数据是否完整
  • 数据库配置是否正确
  • 应用程序能否正常连接

踩坑总结

回顾整个过程,主要有这几个容易出问题的点:

  1. 默认KMS密钥的限制:AWS不允许使用默认服务密钥加密的快照直接共享
  2. KMS密钥权限:必须正确配置自定义KMS密钥的跨账号权限
  3. 源KMS ARN:在目标账号复制快照时,必须提供正确的源KMS密钥ARN
  4. 区域限制:跨账号共享通常需要在同一AWS区域内进行

结语

通过这次实践,我对AWS的安全机制有了更深的理解。虽然过程有些繁琐,但这些限制确实是为了保障数据安全而设计的。希望这篇文章能帮助到需要进行类似操作的朋友们!

如果你有任何补充或更好的方法,也欢迎分享交流。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注