在 Amazon RDS for SQL Server 中跨账户备份和恢复透明数据加密数据库 数据库

在 Amazon RDS for SQL Server 中跨账户备份与恢复透明数据加密数据库

主要要点

Amazon RDS for SQL Server 简化了 Microsoft SQL Server 数据库的管理与操作。透明数据加密TDE对于保护在静态数据中的信息至关重要,但并不加密传输或使用中的数据。本文概述了在不同 AWS 账户之间迁移启用 TDE 的 SQL Server 数据库的步骤。

在进行物理数据中心外迁移时,确保数据保护与安全性变得尤为重要。Amazon RDS 使您能够使用 SQL Server 的 透明数据加密TDE功能,这可以保护存储中的数据并限制授权用户的访问。然而,在处理跨账户的 TDE 启用数据库管理时,必须遵循几个关键步骤以确保数据安全。

前提条件

假设您已经具备 Amazon RDS for SQL Server 和 SQL Server TDE 的相关知识。本文使用 SQL Server 2019 企业版。

您需要满足以下前提条件:

在账户A和账户B中启用 TDE 选项组的 Amazon RDS for SQL Server,并拥有适当的权限以与 AWS 资源交互。访问 AWS KMS 密钥的权限。在账户A和账户B中有 S3 存储桶。

解决方案概述

此解决方案要求您在 AWS 账户A中备份启用 TDE 的数据库,然后将其恢复到账户B中的另一个实例。TDE 证书需使用 AWS Key Management ServiceAWS KMS密钥恢复到目标实例中。用于在源数据库中备份 TDE 证书的私钥的密文需要通过账户A中的 KMS 密钥解密,并通过账户B中的 KMS 密钥重新加密。

要实施该解决方案,请按照以下高层步骤在账户A中完成:

如不存在创建新的对称 AWS KMS 密钥。使用 AWS KMS 密钥将 TDE 证书备份到一个 Amazon S3 存储桶。将 RDS for SQL Server 数据库备份到 S3 存储桶。从私钥文件的 S3 元数据中提取密文 Blob。共享 AWS KMS 密钥。

在账户B中,请完成以下步骤:

解密来自账户A的密文并提取明文密码。在账户B中创建新的对称 AWS KMS 密钥并使用明文密码加密该密钥。在恢复数据库之前,需在账户B目标实例中恢复 TDE 证书。恢复数据库并将 AWS KMS 密钥加密到账户B的 Amazon RDS for SQL Server。

下图展示了跨账户迁移 TDE 启用 SQL Server 数据库的解决方案架构。

从账户A备份 TDE 证书和 RDS for SQL Server 数据库到 S3 存储桶

使用带有 AWS KMS 密钥的 rdsbackuptdecertificate 存储过程备份账户A的 TDE 证书。以下示例代码适用于账户A的 Amazon RDS for SQL Server。

首先,从 syscertificates 系统视图查询 TDE 证书名称:

sqlUSE [master]GOSELECT FROM syscertificates WHERE name LIKE RDSTDECertificateGO

然后使用 KMS 密钥备份 Amazon RDS TDE 证书:

sqlEXECUTE msdbdbordsbackuptdecertificate @certificatename=RDSTDECertificate20230323T215533 @certificatefiles3arn=arnawss3ltBUCKETNAMEACCOUNTAgt/mssqlinst02cer @privatekeyfiles3arn=arnawss3ltBUCKETNAMEACCOUNTAgt/mssqlinst02pvk @kmspasswordkeyarn=arnawskmsuseast1ltACCOUNTAIDgtkey/mrkltKey IDgt @overwrites3files=1

最后,将加密的数据库本地备份到 Amazon S3:

sqlexec msdbdbordsbackupdatabase @sourcedbname=tpcc @s3arntobackupto=arnawss3ltBUCKETNAMEACCOUNTAgt/tpccnativebackupbak @overwrites3backupfile=1 @type=FULL @numberoffiles=4

有关更多信息,请参见 支持 SQL Server 中的透明数据加密。

从私钥文件的 S3 元数据中提取密文 Blob

完成以下步骤:

导航至上一步中的 S3 存储桶,复制私钥文件元数据中的密文 Blob。这可以在 xamzmetardstdepwd 标签下找到。

共享 KMS 密钥用于备份 TDE 证书的密钥给账户B的根用户、其他用户或角色。

以下是使用根用户的 IAM 策略示例:

json{ Sid Allow an external account to use this KMS key Effect Allow Principal { AWS [ arnawsiam444455556666root ] } Action [ kmsEncrypt kmsDecrypt kmsReEncrypt kmsGenerateDataKey kmsDescribeKey ] Resource ltARNFORKMSKEYgt}

以下是使用角色的 IAM 策略示例:

飞机加速下载最新版

json{ Sid Allow an external account to use this KMS key Effect Allow Principal { AWS arnawsiam444455556666role/ExampleRole } Action [ kmsEncrypt kmsDecrypt kmsReEncrypt kmsGenerateDataKey kmsDescribeKey ] Resource ltARNFORKMSKEYgt}

将 TDE 证书 (cer) 和私钥 (pvk) 备份文件从账户A的 S3 存储桶复制到账户B的 S3 存储桶。

解密来自账户A的密文并提取明文密码

使用您用于备份 TDE 证书的 AWS KMS 密钥 ID 解密来自账户A的密文。下面是解密密文并获取明文密码的 AWS 命令行界面AWS CLI命令示例:

bashaws kms decrypt keyid ltKMSKeyIDgt ciphertextblob ltCiphertextBlobgt output text query Plaintext region ltRegiongt

有关解密的更多信息,请参见 Decrypt。

在账户B中创建新的 AWS KMS 密钥并使用明文密码加密该密钥

接下来,在账户B中创建新的对称 AWS KMS 密钥,并使用在上一步中解密的明文密码加密该密钥。使用具有 AWS KMS 密钥权限的凭证。下面的命令提供了之前解密的明文密码的密文:

bashaws kms encrypt keyid lt提供账户B的KMS Key IDgt plaintext 解密步骤的输出 output text region ltAWS区域gt

有关更多信息,请参见 创建对称 CMK。

接下来,导航至账户B中的 S3 存储桶,选择存放证书和私钥的存储桶。选择私钥文件 (pvk),进入对象操作并编辑元数据。在用户定义类型下的标签 xamzmetardstdepwd 更新密文值。

将数据库恢复并将 AWS KMS 密钥加密到账户B的 Amazon RDS for SQL Server

在恢复数据库之前,确保账户B的 RDS for SQL Server 实例具有启用 TDE 和本地备份与恢复的选项组。

使用新创建的 AWS KMS 密钥,将更新后的 TDE 证书恢复到账户B的 Amazon RDS for SQL Server。以下是示例代码:

sqlEXECUTE msdbdbordsrestoretdecertificate @certificatename=UserTDECertificateFromAcct1 @certificatefiles3arn=arnawss3ltBUCKETNAMEACCOUNTBgt/mssqlinst02cer @privatekeyfiles3arn=arnawss3ltBUCKETNAMEACCOUNTBgt/mssqlinst02pvk @kmspasswordkeyarn=arnawskmsuseast1ltACCOUNTBIDgtkey/mrkltKey IDgt

使用以下代码检查用户证书是否已加载:

sqlSELECT FROM msdbdbordsfnlistusertdecertificates()

在成功恢复并验证 Amazon RDS for SQL Server 中的 TDE 证书后,可以继续恢复数据库备份。以下是从账户B的 S3 存储桶中恢复 TDE 启用的备份的示例:

sqlexec msdbdbordsrestoredatabase @restoredbname=tpcc @s3arntorestorefrom=arnawss3ltBUCKETNAMEACCOUNTBgt/tpcc @withnorecovery=0 @type=FULL

清理

要删除在测试过程中创建的 AWS 资源,请完成以下步骤:

在 Amazon RDS for SQL Server 中跨账户备份和恢复透明数据加密数据库 数据库登录到 AWS 管理控制台。选择 RDS for SQL Server 实例所在的区域。在 Amazon RDS 控制台中,选择导航窗格中的 数据库。选择创建的 RDS 实例。在 操作 菜单中,选择 删除。在 Amazon S3 控制台中,选择创建的存储桶。在 操作 菜单中,选择 删除。在 AWS KMS 控制台中,选择您创建的 KMS 密钥。选择 调度密钥删除,输入 7 到 30 天之间的时间段,然后选择 调度删除。

结论

透明数据加密是一种常用的内置加密机制,常用于 SQL Server 来保护数据。本文介绍了从一个 RDS for SQL Server 实例恢复启用 TDE 的数据库到另一个不同账户的实例的解决方案。

欢迎尝试此解决方案,并在评论区留下反馈或问题。敬请关注更多涵盖其他 SQL Server 迁移解决方案的帖子。

关于作者

Alvaro CostaNeto 是 AWS 的数据库专家解决方案架构师,帮助客户设计和实施云数据库解决方案。他对数据库技术充满热情,拥有超过19年的相关工作经验,主要使用 Microsoft SQL Server。他与妻子和两个孩子生活在佛罗里达州克莱门特,享受航空和旅行的乐趣。在闲暇时,他喜欢与家人和朋友聚会,探索新地方。

Gopakumar Gopalakrishna Pillai 是亚马逊网络服务公司的数据库工程师。他在多个数据库技术领域工作,并在其16年的数据库职业生涯中为各种客户问题提供了解决方案。他专注于为 RDS SQL Server 客户提供最佳数据库解决方案,并利用他的经验帮助客户构建无服务器应用程序。在闲暇时,他喜欢探索新地方。

Jeril Jose 是一名数据库专家顾问,拥有超过14年的 Microsoft SQL Server 和其他数据库技术经验。他帮助客户架构、迁移和优化其在 AWS 上的数据库解决方案。在加入 AWS 之前,他支持金融和零售领域中的生产和关键任务数据库的实施。

使用 AWS 应用程序自动缩放为 Amazon Aurora 副本安排缩放 数据库博客

使用 AWS 应用程序自动缩放为 Amazon Aurora 副本安排缩放 数据库博客

使用 AWS 应用自动扩缩对 Amazon Aurora 复本进行计划扩缩关键要点本文将介绍如何使用 AWS 应用自动扩缩来按照计划调整 Amazon Aurora 复本的数量。随着应用程序的增长,数...

未授权策略聚焦:通过第三方身份提供商获取初始访问 安全博客

未授权策略聚焦:通过第三方身份提供商获取初始访问 安全博客

非法策略聚焦:通过第三方身份提供者获取初始访问权限by Steve de Vera 和 Mike Saintcross 于 2024年11月04日 发表在 高级 (300) 和 安全、身份与合规性永久...

订阅