¿Cómo puedo restaurar un archivo de copia de seguridad cifrado o una copia de seguridad cifrada de Microsoft Azure en RDS para SQL Server desde un entorno local?

Última actualización: 14-10-2022

Quiero restaurar un archivo de copia de seguridad cifrado o una copia de seguridad cifrada de Microsoft Azure entre un entorno local y una instancia de Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server. ¿Cómo puedo hacer esto con la función de copia de seguridad y restauración nativa?

Descripción corta

El cifrado de copia de seguridad está disponible en SQL Server 2014 (12.x) y versiones posteriores. Puede especificar el algoritmo de cifrado y el cifrador (un certificado o una clave asimétrica) al crear una copia de seguridad. De este modo, se crea un archivo de copia de seguridad cifrado.

Nota: Esta función no es la misma que el cifrado TDE.

Resolución

Copias de seguridad cifradas

Nota: Antes de iniciar los siguientes pasos de resolución, asegúrese de haber creado lo siguiente:

  • Un bucket de Amazon Simple Storage Service (Amazon S3).
  • Una instancia de Amazon RDS configurada con TDE y SQLSERVER_BACKUP_RESTORE en el grupo de opciones.

1.    Cree una clave maestra mediante el siguiente script en su cuenta local:

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

2.    Cree un certificado protegido por la clave maestra en su cuenta local:

CREATE CERTIFICATE TDE_Cert
WITH 
SUBJECT='Database_Encryption';
GO

3.    Inicie una copia de seguridad nativa mediante el siguiente script.

Nota: Active la compresión para evitar problemas durante la restauración a 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.    Cargue la copia de seguridad cifrada en el bucket tde-db de S3 mediante la consola de administración de AWS.

5.    Ejecute el siguiente comando para restaurar la base de datos:

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

Copias de seguridad cifradas de Microsoft Azure

Nota: Esta resolución incluye pasos similares a los de las secciones anteriores. Sin embargo, la copia de seguridad cifrada se inicia en el contenedor de copia de seguridad de Microsoft Azure en lugar de en el almacenamiento local Antes de iniciar los siguientes pasos de resolución, asegúrese de haber creado lo siguiente:

  • Un bucket de Amazon Simple Storage Service (Amazon S3).
  • Una instancia de RDS configurada con el grupo de opciones TDE y SQLSERVER_BACKUP_RESTORE.
  • Una cuenta local configurada con certificados para cifrar la copia de seguridad.
  • Una cuenta de Microsoft Azure activa.

1.    Cree una cuenta de almacenamiento en Microsoft Azure. Para obtener más información, consulte Crear una cuenta de almacenamiento en el sitio web de documentación de Microsoft.

2.    Cree una credencial basada en la firma de acceso compartido. Para obtener más información, consulte Creación de tokens de SAS para los contenedores de almacenamiento en el sitio web de documentación de 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.    Inicie una copia de seguridad cifrada nativa en el almacenamiento de 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 no admite la restauración de copias de seguridad directamente desde los contenedores de almacenamiento de Microsoft Azure. Por lo tanto, debe descargar la copia de seguridad a un sistema intermediario.

4.    Cargue el archivo de copia de seguridad al bucket de S3 (tde-db).

5.    Para hacer una copia de seguridad y restaurar la clave privada y el certificado en la instancia de RDS, siga los pasos de la sección Resolver el error “Cannot find server certificate with thumbprint” (No se puede encontrar el certificado del servidor con huella digital).

6.     Una vez cumplidos los requisitos previos, ejecute el siguiente comando para restaurar la copia de seguridad cifrada:

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

Resolver el error “Cannot find server certificate with thumbprint” (No se puede encontrar el certificado del servidor con huella digital)

Al restaurar las copias de seguridad cifradas en otro entorno donde los certificados no están configurados, se produce el siguiente error:

Cannot find server certificate with thumbprint '0xBA01F2AF71C3FB4A92C5F69BDE3EC8DB318D7D0E'

Para evitar el error anterior, haga lo siguiente:

1.    Cree una nueva clave de AWS Key Management Service (AWS KMS) en la cuenta de AWS en la que realizará la restauración nativa.

2.    Genere una clave de datos de AWS KMS para iniciar la copia de seguridad del certificado:

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

A continuación se muestra un ejemplo del resultado del comando anterior:

{
"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.    Inicie una copia de seguridad del certificado y la clave privada en la instancia de origen (local o instancia de 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.    Cargue el archivo del certificado de copia de seguridad en el bucket de S3 tde-bkt.

5.    Cargue el archivo de clave privada en el bucket tde-bkt de S3. Tras subirlo, edite los metadatos del archivo de clave privada y, a continuación, especifique los siguientes valores:

  • Clave: x-amz-meta-rds-tde-pwd
  • Valor: CipertexBlob obtenido en la etapa 2.

6.    Restaure el certificado en la instancia de 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.    Ejecute el siguiente comando para restaurar la base de datos:

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 (Migración de bases de datos de SQL Server con TDE a Amazon RDS para SQL Server)

How do I restore a KMS-encrypted backup file in RDS for SQL Server from an on-premises environment? (¿Cómo restauro un archivo de copia de seguridad cifrado por KMS en RDS para SQL Server desde un entorno local?)

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?