Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何从本地环境还原 RDS for SQL Server 中的加密备份文件或加密的 Microsoft Azure 备份?
我想在本地环境和适用于 Microsoft SQL Server 实例的 Amazon Relational Database Service(Amazon RDS)之间还原加密备份文件或加密的 Microsoft Azure 备份。如何使用本机备份和还原功能来完成这项操作?
简短描述
SQL Server 2014(12.x)及更高版本中提供备份加密功能。创建备份时,您可以指定加密算法和加密器(证书或非对称密钥)。这将创建一个加密的备份文件。
**注意:**此功能与 TDE 加密不同。
解决方法
加密备份
**注意:**在开始执行以下解决步骤之前,请确保您已经创建了以下资源:
- 一个 Amazon Simple Storage Service(Amazon S3)桶。
- 一个在选项组中配置了 TDE 和 SQLSERVER_BACKUP_RESTORE 的 Amazon RDS 实例。
1. 在您的本地账户中使用以下脚本创建一个主密钥:
USE Master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD='InsertStrongPasswordHere'; GO
2. 在您的本地账户中创建一个受主密钥保护的证书:
CREATE CERTIFICATE TDE_Cert WITH SUBJECT='Database_Encryption'; GO
3. 使用以下脚本开始本机备份。
注意:启用压缩功能可避免在还原到 RDS 时出现问题。
BACKUP DATABASE [TestDB] TO DISK =N'E:\Backup\EncryptedBackupFromOnpremise.bak' WITH COMPRESSION, ENCRYPTION( ALGORITHM = AES_256, SERVER CERTIFICATE = [TDE_Cert] ), STATS = 10 GO
4. 使用 AWS 管理控制台将加密的备份上传到 S3 桶 tde-db。
5. 运行以下命令还原数据库:
exec msdb.dbo.rds_restore_database @restore_db_name='onpremdb', @s3_arn_to_restore_from='arn:aws:s3:::tde-db/EncryptedBackupFromOnpremise.bak';
加密的 Microsoft Azure 备份
**注意:**此解决方案涉及的步骤与前面各节相似。但是,加密备份在 Microsoft Azure 备份容器启动,而不是在本地存储中。在开始执行以下解决步骤之前,请确保您已经创建了以下资源:
- 一个 Amazon Simple Storage Service(Amazon S3)桶。
- 一个配置了 TDE 和 SQLSERVER_BACKUP_RESTORE 选项组的 RDS 实例。
- 一个配置了用于加密备份的证书的本地账户。
- 一个活跃的 Microsoft Azure 账户。
1. 在 Microsoft Azure 中创建一个存储账户。有关更多信息,请参阅 Microsoft 文档网站中的创建存储账户。
2. 根据共享访问签名创建凭证。有关更多信息,请参阅 Microsoft 文档网站中的为存储容器创建 SAS 令牌。
USE master CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a forward slash at the end WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and should not be changed , SECRET = 'sharedaccesssignature' GO
3. 开始对 Microsoft Azure 存储进行本机加密备份:
BACKUP DATABASE [TestDB] TO URL = N'https://backuptestsanketh.blob.core.windows.net/backup/TestDB_backup_2022_09_29_112330.bak' WITH COPY_ONLY, NOFORMAT, NOINIT, NAME = N'BackupEnc-Full Database Backup', NOSKIP, NOREWIND, NOUNLOAD, COMPRESSION, ENCRYPTION(ALGORITHM = AES_128, SERVER CERTIFICATE = [On_PremTDE_Cert]), STATS = 10 GO
**注意:**Amazon RDS 不支持直接从 Microsoft Azure 存储容器还原备份。因此,您必须将备份下载到中间系统。
4. 将备份文件上传到 S3 桶(tde-db)。
5. 要对私钥和证书进行备份并还原到 RDS 实例,请按照解决“Cannot find server certificate with thumbprint(找不到带指纹的服务器证书)”错误部分中的步骤进行操作。
6. 满足先决条件后,运行以下命令还原加密备份:
exec msdb.dbo.rds_restore_database @restore_db_name='AzureBackupEncrypted', @s3_arn_to_restore_from='arn:aws:s3:::tde-db/backup/azure-encrypted.bak'
解决“Cannot find server certificate with thumbprint(找不到带指纹的服务器证书)”错误
在另一个未配置证书的环境中还原加密备份会导致以下错误:
Cannot find server certificate with thumbprint '0xBA01F2AF71C3FB4A92C5F69BDE3EC8DB318D7D0E'
要避免上述错误,请执行以下操作:
1. 在您要执行本机恢复的 AWS 账户中创建一个新的 AWS Key Management Service(AWS KMS)密钥。
2. 生成 AWS KMS 数据密钥以启动证书备份:
aws kms generate-data-key --key-id KMS-Key-ID --key-spec AES_256 --region us-west-2
以下是前述命令的示例输出:
{ "Plaintext": "Gve+VE1JV8aufhDkPKeWceEt+vZaTYZCH25/OLPo+a4=", "KeyId": "arn:aws:kms:us-west-2:289799745972:key/eee4d613-4871-4cee-87d8-a54ad8d5251b", "CiphertextBlob": "AQIDAHiojOaIcTtQGK4gqEf6QcYuVUutMiW0y52tG63GqOknSgF0ZtnfmfqadzhfWUlRSx15AAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM/U3+BkE/yN5Jf0ckAgEQgDtoG9coTwG7bnPGx3c4hND8LAc4LEPnxd2BLQdJDOjqXU0LgudNfVUw4xNfWy2XCDgmSYV0nHU9EVbwkQ==" }
3. 开始备份源实例(本地实例或 EC2 实例)中的证书和私钥:
use master BACKUP CERTIFICATE TDE_Cert TO FILE= 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\DATA\certificatename.cer' WITH PRIVATE KEY ( FILE= 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\DATA\privatekey.pvk', ENCRYPTION BY PASSWORD='Gve+VE1JV8aufhDkPKeWceEt+vZaTYZCH25/OLPo+a4=')
4. 将备份证书文件上传到 S3 桶 tde-bkt。
5. 将私钥文件上传到 S3 桶 tde-bkt。上传后,编辑私钥文件的元数据,然后指定以下值:
- 键:x-amz-meta-rds-tde-pwd
- 值:在步骤 2 中获得的 CipertexBlob。
6. 还原 RDS 实例中的证书:
exec msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_ec2_tde_cert', @certificate_file_s3_arn='arn:aws:s3:::tde-bkt/certificatename.cer', @private_key_file_s3_arn='arn:aws:s3:::tde-bkt/privatekey.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:aws-account-id:key/key-id';
7. 运行以下命令还原数据库:
exec msdb.dbo.rds_restore_database @restore_db_name='onpremdb', @s3_arn_to_restore_from='arn:aws:s3:::tde-db/EncryptedBackupFromOnpremise.bak';
相关信息
Migrate TDE-enabled SQL Server databases to Amazon RDS for SQL Server
