Come posso ripristinare un file di backup crittografato o un backup crittografato di Microsoft Azure in RDS per SQL Server da un ambiente on-premise?

Ultimo aggiornamento: 14/10/2022

Desidero ripristinare un file di backup crittografato o un backup crittografato di Microsoft Azure tra un ambiente on-premise e un'istanza Amazon Relational Database Service (Amazon RDS) per Microsoft SQL Server. Come posso farlo utilizzando la funzionalità di backup e ripristino nativa?

Breve descrizione

La crittografia dei backup è disponibile in SQL Server 2014 (12.x) e versioni successive. Durante la creazione di un backup, puoi specificare l'algoritmo e il programma di crittografia (un certificato o una chiave asimmetrica). In questo modo, viene creato un file di backup crittografato.

Nota: questa funzionalità non è la stessa della crittografia TDE.

Risoluzione

Backup crittografati

Nota: prima di iniziare i seguenti passaggi di risoluzione, assicurati di aver creato quanto segue:

  • Un bucket Amazon Simple Storage Service (Amazon S3).
  • Un'istanza Amazon RDS configurata con TDE e SQLSERVER_BACKUP_RESTORE nel gruppo di opzioni.

1.    Crea una chiave master utilizzando il seguente script nel tuo account on-premise:

USE Master;
GO
CREATE MASTER KEY ENCRYPTION
BY PASSWORD='InsertStrongPasswordHere';
GO

2.    Crea un certificato protetto dalla chiave master nel tuo account on-premise:

CREATE CERTIFICATE TDE_Cert
WITH 
SUBJECT='Database_Encryption';
GO

3.    Avvia un backup nativo utilizzando il seguente script.

Nota: attiva la compressione per evitare problemi durante il ripristino su 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.    Carica il backup crittografato nel bucket S3 tde-db, utilizzando la Console di gestione AWS.

5.    Emetti il seguente comando per ripristinare il database:

exec msdb.dbo.rds_restore_database 
@restore_db_name='onpremdb',
@s3_arn_to_restore_from='arn:aws:s3:::tde-db/EncryptedBackupFromOnpremise.bak';

Backup crittografati di Microsoft Azure

Nota: questa risoluzione prevede passaggi simili a quelli delle sezioni precedenti. Tuttavia, il backup crittografato viene avviato nel container di backup di Microsoft Azure anziché nell'archivio locale. Prima di iniziare i seguenti passaggi di risoluzione, assicurati di aver creato quanto segue:

  • Un bucket Amazon Simple Storage Service (Amazon S3).
  • Un'istanza RDS configurata con il gruppo di opzioni TDE e SQLSERVER_BACKUP_RESTORE.
  • Un account on-premise configurato con i certificati per crittografare il backup.
  • Un account Microsoft Azure attivo.

1.    Crea un account di archiviazione in Microsoft Azure. Per ulteriori informazioni, consulta Creazione di un account di archiviazione sul sito Web della documentazione Microsoft.

2.    Crea una credenziale basata sulla firma di accesso condivisa. Per ulteriori informazioni, consulta Creazione di token SAS per i container di archiviazione sul sito Web di documentazione Microsoft.

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.    Avvia un backup criptato nativo nello spazio di archiviazione di 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

Nota: Amazon RDS non supporta il ripristino dei backup direttamente dai container di archiviazione di Microsoft Azure. Quindi, dovrai scaricare il backup su un sistema intermedio.

4.    Carica il file di backup nel bucket S3 (tde-db).

5.    Per eseguire il backup e il ripristino della chiave privata e del certificato sull'istanza RDS, segui i passaggi riportati nella sezione Risoluzione dell'errore "Impossibile trovare il certificato del server con l'identificazione personale".

6.     Dopo aver impostato i prerequisiti, emetti il seguente comando per ripristinare il backup crittografato:

exec msdb.dbo.rds_restore_database
@restore_db_name='AzureBackupEncrypted',
@s3_arn_to_restore_from='arn:aws:s3:::tde-db/backup/azure-encrypted.bak'

Risoluzione dell'errore "Impossibile trovare il certificato del server con l'identificazione personale"

Il ripristino dei backup crittografati in un altro ambiente in cui i certificati non sono configurati genera il seguente errore:

Cannot find server certificate with thumbprint '0xBA01F2AF71C3FB4A92C5F69BDE3EC8DB318D7D0E'

Per evitare l'errore precedente, completa le seguenti operazioni:

1.    Crea una nuova chiave del Servizio di gestione delle chiavi AWS (AWS KMS) nell'account AWS in cui eseguirai il ripristino nativo.

2.    Genera una chiave di dati AWS KMS per avviare il backup del certificato:

aws kms generate-data-key --key-id KMS-Key-ID --key-spec AES_256 --region us-west-2

Di seguito è riportato un esempio di output del comando precedente:

{
"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.    Avvia un backup del certificato e della chiave privata nell'istanza di origine (istanza on-premise o 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.    Carica il file del certificato di backup nel bucket S3 tde-bkt.

5.    Carica il file della chiave privata nel bucket S3 tde-bkt. Dopo il caricamento, modifica i metadati del file della chiave privata, quindi specifica i seguenti valori:

  • Chiave: x-amz-meta-rds-tde-pwd
  • Valore: CipertexBlob ottenuto nel passaggio 2.

6.    Ripristina il certificato nell'istanza 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.    Emetti il seguente comando per ripristinare il database:

exec msdb.dbo.rds_restore_database 
@restore_db_name='onpremdb',
@s3_arn_to_restore_from='arn:aws:s3:::tde-db/EncryptedBackupFromOnpremise.bak';