如何从本地环境将 KMS 加密的备份文件还原到 RDS for SQL Server?

上次更新日期:2022 年 10 月 14 日

我想将 AWS Key Management Service(AWS KMS)加密的备份文件从本地环境还原到适用于 Microsoft SQL Server 实例的 Amazon Relational Database Service(Amazon RDS)。如何使用本机备份和还原功能来完成这项操作?

简短描述

AWS KMS 加密使用 AWS KMS 密钥安全地加密 RDS for SQL Server 中的 Microsoft SQL Server 备份文件。您可以将加密的备份还原到另一个 RDS for SQL Server 实例。

解决方法

注意:在开始以下解决方法之前,请确保您具备以下资源:

1.    通过指定 AWS KMS 密钥参数(@kms_master_key_arn)在本机备份上启动客户端加密:

exec msdb.dbo.rds_backup_database @source_db_name='database-name',
@s3_arn_to_backup_to='arn:aws:s3:::bucket-name/Filename.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:account-id:key/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxx1';

2.    在同一区域和账户中的另一个 RDS for SQL Server 实例中还原 AWS KMS 加密备份。为此,请在以下命令中指定用于加密备份的相同 AWS KMS 密钥:

exec msdb.dbo.rds_restore_database @restore_db_name='database-name',
@s3_arn_to_restore_from='arn:aws:s3:::bucket-name/Filename.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:account-id:key/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxx1';

在同一账户下的另一个区域中还原 AWS KMS 加密备份

如果 AWS KMS 加密备份需要在同一账户下的另一个区域中还原,请执行以下操作:

1.    创建一个多区域 AWS KMS 密钥。确保为密钥类型选择对称密钥。

2.    为所需的目标区域创建副本密钥

3.    通过在区域 A 中指定 AWS KMS 密钥参数(@kms_master_key_arn)来启动加密的本机备份:

exec msdb.dbo.rds_backup_database @source_db_name='database-name', 
@s3_arn_to_backup_to='arn:aws:s3:::bucket-name/Filename.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:account-id:key/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxx2';

4.    将备份文件复制到同一区域中的 S3 桶。Amazon RDS 不支持跨区域桶

5.    通过指定用于加密备份的相同 AWS KMS 密钥 ID,在区域 B 中还原 AWS KMS 加密备份。

注意:与 @kms_master_key_arn 相关的区域会相应地发生变化。

exec msdb.dbo.rds_restore_database ;@restore_db_name='database-name',
@s3_arn_to_restore_from='arn:aws:s3:::bucket-name/Filename.bak',
@kms_master_key_arn='arn:aws:kms:us-east-2:account-id:key/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxx2';

在本地环境、跨账户或跨区域中还原 AWS KMS 加密备份。

需要解决以下三种情况才能还原备份:

  • AWS KMS 加密数据库备份必须在同一区域中还原,但使用不同的账户(跨账户)。 Amazon RDS 不支持跨账户 AWS KMS 密钥共享。这意味着您不能先使用 KMS 密钥 K1 加密账户 A 中的备份,然后使用相同的密钥在账户 B 中还原此备份。
  • AWS KMS 加密数据库备份必须在不同的区域和不同的账户(跨区域和跨账户)中还原。 Amazon RDS 不支持跨账户 AWS KMS 密钥共享或跨区域桶。
  • AWS KMS 加密数据库备份必须在本地环境中还原。 本地环境不知道 AWS KMS 密钥详细信息,因为它是一个外部实体。因此,在还原之前,您必须先解密 AWS KMS 加密文件。

有关这些限制的变通方法,请参阅 Client-side encryption and decryption of Microsoft SQL Server backups for use with Amazon RDS 中的从 Amazon RDS for SQL Server 导出部分。