如何從內部部署環境還原 RDS for SQL Server 中的加密備份檔案或加密的 Microsoft Azure 備份?

3 分的閱讀內容
0

我想要將加密的備份檔案或加密的 Microsoft Azure 備份在內部部署環境和 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 執行個體之間進行還原。如何使用原生備份與還原功能執行此操作?

簡短描述

備份加密可在 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 (KMS) key

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';

相關資訊

將啟用 TDE 的 SQL Server 資料庫遷移到 Amazon RDS for SQL Server

如何從內部部署環境還原 RDS for SQL Server 中採用 KMS 加密的備份檔案?

AWS 官方
AWS 官方已更新 2 年前