Wie stelle ich eine verschlüsselte Sicherungsdatei oder ein verschlüsseltes Microsoft-Azure-Backup in RDS for SQL Server aus einer lokalen Umgebung wieder her?

Lesedauer: 5 Minute
0

Ich möchte eine verschlüsselte Sicherungsdatei oder eine verschlüsselte Microsoft Azure-Sicherung zwischen einer lokalen Umgebung und Amazon Relational Database Service (Amazon RDS) für Microsoft-SQL-Server-Instance wiederherstellen. Wie kann ich das mit der nativen Sicherungs- und Wiederherstellungsfunktion tun?

Kurzbeschreibung

Sicherungs-Verschlüsselung ist in SQL Server 2014 (12.x) und höher verfügbar. Sie können den Verschlüsselungsalgorithmus und den Verschlüsseler (ein Zertifikat oder einen asymmetrischen Schlüssel) beim Erstellen einer Sicherung angeben. Dadurch wird eine verschlüsselte Sicherungsdatei erstellt.

Hinweis: Diese Funktion ist nicht dasselbe wie die TDE-Verschlüsselung.

Auflösung

Verschlüsselte Sicherungen

Hinweis: Bevor Sie mit den folgenden Lösungsschritten beginnen, stellen Sie sicher, dass Sie Folgendes erstellt haben:

  • Ein Amazon-Simple-Storage-Service-Bucket (Amazon S3).
  • Eine Amazon-RDS-Instance, die mit TDE und SQLSERVER_BACKUP_RESTORE in der Optionsgruppe konfiguriert ist.

1.    Erstellen Sie einen Hauptschlüssel mit dem folgenden Skript in Ihrem lokalen Konto:

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

2.    Erstellen Sie ein durch den Hauptschlüssel geschütztes Zertifikat in Ihrem lokalen Konto:

CREATE CERTIFICATE TDE_Cert
WITH 
SUBJECT='Database_Encryption';
GO

3.    Starten Sie eine native Sicherung mit dem folgenden Skript.

Hinweis:Aktivieren Sie die Komprimierung, um Probleme bei der Wiederherstellung auf RDS zu vermeiden.

BACKUP DATABASE [TestDB] TO DISK =N'E:\Backup\EncryptedBackupFromOnpremise.bak' WITH COMPRESSION,
ENCRYPTION( ALGORITHM = AES_256, SERVER CERTIFICATE = [TDE_Cert] ), STATS = 10
GO

4.    Laden Sie die verschlüsselte Sicherung mithilfe der AWS-Managementkonsole in den S3-Bucket tde-db hoch.

5.    Führen Sie den folgenden Befehl aus, um die Datenbank wiederherzustellen:

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

Verschlüsselte Microsoft-Azure-Backups.

Hinweis: Diese Lösung umfasst ähnliche Schritte wie die vorherigen Abschnitte. Die verschlüsselte Sicherung wird jedoch im Microsoft-Azure-Backup-Container statt im lokalen Speicher initiiert. Bevor Sie mit den folgenden Lösungsschritten beginnen, stellen Sie sicher, dass Sie Folgendes erstellt haben:

  • Ein Amazon-Simple-Storage-Service-Bucket (Amazon S3).
  • Eine RDS-Instance, die mit der Optionsgruppe TDE und SQLSERVER_BACKUP_RESTORE konfiguriert ist.
  • Ein lokales Konto, das mit Zertifikaten konfiguriert ist, um die Sicherung zu verschlüsseln.
  • Ein aktives Microsoft-Azure-Konto.

1.    Erstellen Sie ein Speicherkonto in Microsoft Azure. Weitere Informationen finden Sie unter Erstellen eines Speicherkontos auf der Microsoft-Dokumentationswebsite.

2.    Erstellen Sie Anmeldeinformationen basierend auf der Signatur für den gemeinsamen Zugriff. Weitere Informationen finden Sie unter Erstellen von SAS-Token für Ihre Speichercontainer auf der Microsoft-Dokumentationswebsite.

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.    Starten Sie eine native verschlüsselte Sicherung im Microsoft-Azure-Speicher:

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

Hinweis: Amazon RDS unterstützt keine Wiederherstellung von Sicherungen direkt aus Microsoft-Azure-Speichercontainern. Sie müssen die Sicherung also auf ein Zwischensystem herunterladen.

4.    Laden Sie die Sicherungsdatei in den S3-Bucket (tde-db) hoch.

5.    Führen Sie zum Sichern und Wiederherstellen des privaten Schlüssels und des Zertifikats in der RDS-Instance die Schritte im Abschnitt Beheben des Fehlers „Serverzertifikat mit Fingerabdruck nicht finden“ aus.

6.     Nachdem die Voraussetzungen erfüllt sind, führen Sie den folgenden Befehl aus, um die verschlüsselte Sicherung wiederherzustellen:

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

Fehler „Serverzertifikat mit dem Fingerabdruck kann nicht gefunden werden“ beheben

Das Wiederherstellen verschlüsselter Sicherungen in einer anderen Umgebung, in der keine Zertifikate konfiguriert sind, führt zu folgendem Fehler

Cannot find server certificate with thumbprint '0xBA01F2AF71C3FB4A92C5F69BDE3EC8DB318D7D0E'

Gehen Sie wie folgt vor, um den vorherigen Fehler zu vermeiden:

1.    Erstellen Sie einen neuen AWS-Key-Management-Service -Schlüssel (AWS KMS) in dem AWS-Konto, in dem Sie die native Wiederherstellung durchführen.

2.    Generieren Sie einen AWS-KMS-Datenschlüssel, um die Sicherung des Zertifikats zu starten:

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

Das Folgende ist eine Beispielausgabe des vorhergehenden Befehls:

{
"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.    Starten Sie eine Sicherung des Zertifikats und des privaten Schlüssels in der Quellinstance (lokal oder EC2-Instance):

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.    Laden Sie die Sicherungszertifikatdatei in den S3-Bucket tde-bkt hoch.

5.    Laden Sie die Datei mit dem privaten Schlüssel in den S3-Bucket tde-bkt hoch. Bearbeiten Sie nach dem Hochladen die Metadaten der privaten Schlüsseldatei und geben Sie dann die folgenden Werte an:

  • Schlüssel: x-amz-meta-rds-tde-pwd
  • Wert: CipertexBlob wurde in Schritt 2 erhalten.

6.    Stellen Sie das Zertifikat in der RDS-Instance wieder her:

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.    Führen Sie den folgenden Befehl aus, um die Datenbank wiederherzustellen:

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

Relevante Informationen

Migrieren Sie TDE-fähige SQL-Server-Datenbanken zu Amazon RDS for SQL Server

Wie stelle ich eine KMS-verschlüsselte Sicherungsdatei in RDS for SQL Server aus einer lokalen Umgebung wieder her?