Comment restaurer un fichier de sauvegarde crypté ou une sauvegarde Microsoft Azure cryptée dans RDS pour SQL Server à partir d'un environnement sur site ?

Dernière mise à jour : 2022-10-14

Je souhaite restaurer un fichier de sauvegarde crypté ou une sauvegarde Microsoft Azure cryptée entre un environnement sur site et Amazon Relational Database Service (Amazon RDS) pour une instance Microsoft SQL Server. Comment puis-je faire cela à l'aide de la fonction de sauvegarde et de restauration native ?

Brève description

Le chiffrement des sauvegardes est disponible dans SQL Server 2014 (12.x) et versions ultérieures. Vous pouvez spécifier l'algorithme de chiffrement et le crypteur (un certificat ou une clé asymétrique) lors de la création d'une sauvegarde. Cela crée un fichier de sauvegarde crypté.

Remarque : Cette fonctionnalité n'est pas identique au cryptage TDE.

Solution

Sauvegardes cryptées

Remarque : Avant de commencer les étapes de résolution suivantes, assurez-vous d'avoir créé les éléments suivants :

  • Compartiment Amazon Simple Storage Service (Amazon S3).
  • Une instance Amazon RDS configurée avec TDE et SQLSERVER_BACKUP_RESTORE dans le groupe d'options.

1.    Créez une clé principale à l'aide du script suivant dans votre compte sur site :

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

2.    Créez un certificat protégé par la clé principale dans votre compte sur site :

CREATE CERTIFICATE TDE_Cert
WITH 
SUBJECT='Database_Encryption';
GO

3.    Lancez une sauvegarde native à l'aide du script suivant.

Remarque : Activez la compression pour éviter tout problème lors de la restauration vers 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.    Téléchargez la sauvegarde cryptée dans le compartiment S3 tde-db à l'aide de la Console de gestion AWS.

5.    Exécutez la commande suivante pour restaurer la base de données :

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

Sauvegardes Microsoft Azure cryptées

Remarque : Cette résolution implique des étapes similaires à celles des sections précédentes. Toutefois, la sauvegarde cryptée est initiée vers le conteneur de sauvegarde Microsoft Azure au lieu du stockage local. Avant de commencer les étapes de résolution suivantes, assurez-vous d'avoir créé les éléments suivants :

  • Compartiment Amazon Simple Storage Service (Amazon S3).
  • Instance RDS configurée avec le groupe d'options TDE et SQLSERVER_BACKUP_RESTORE.
  • Compte sur site configuré avec des certificats pour crypter la sauvegarde.
  • Un compte Microsoft Azure actif.

1.    Créez un compte de stockage dans Microsoft Azure. Pour plus d'informations, consultez la section Création d'un compte de stockage sur le site Web de documentation Microsoft.

2.    Créez des informations d’identification basé sur la signature d'accès partagé. Pour plus d'informations, voir Créer des jetons SAS pour vos conteneurs de stockage sur le site Web de documentation 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.    Démarrez une sauvegarde cryptée native sur le stockage 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

Remarque : Amazon RDS ne prend pas en charge la restauration de sauvegardes directement à partir de conteneurs de stockage Microsoft Azure. Vous devez donc télécharger la sauvegarde sur un système intermédiaire.

4.    Téléchargez le fichier de sauvegarde dans le compartiment S3 (tde-db).

5.    Pour sauvegarder et restaurer la clé privée et le certificat sur l'instance RDS, suivez les étapes décrites dans la section Résolution de l'erreur « Impossible de trouver le certificat de serveur avec empreinte numérique ».

6.     Une fois les conditions préalables réunies, exécutez la commande suivante pour restaurer la sauvegarde cryptée :

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

Résoudre l'erreur "Impossible de trouver le certificat du serveur avec l'empreinte de pouce"

La restauration de sauvegardes cryptées dans un autre environnement où les certificats ne sont pas configurés entraîne l'erreur suivante :

Cannot find server certificate with thumbprint '0xBA01F2AF71C3FB4A92C5F69BDE3EC8DB318D7D0E'

Pour éviter l'erreur précédente, procédez comme suit :

1.    Créez une nouvelle clé AWS Key Management Service (AWS KMS) dans le compte AWS sur lequel vous allez effectuer la restauration native.

2.    Générez une clé de données AWS KMS pour lancer la sauvegarde du certificat :

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

Voici un exemple de sortie pour la commande précédente :

{
"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.    Démarrez une sauvegarde du certificat et de la clé privée dans l'instance source (instance sur site ou instance 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.    Téléchargez le fichier de certificat de sauvegarde dans le compartiment S3 tde-bkt.

5.    Téléchargez le fichier de clé privée dans le compartiment S3 tde-bkt. Après le téléchargement, modifiez les métadonnées du fichier de clé privée, puis spécifiez les valeurs suivantes :

  • Clé : x-amz-meta-rds-tde-pwd
  • Valeur : CipertexBlob obtenu à l'étape 2.

6.    Restaurez le certificat dans l'instance 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.    Exécutez la commande suivante pour restaurer la base de données :

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