Blog de Amazon Web Services (AWS)

Como puede crear copias de seguridad y restaurar bases de datos, con cifrado de datos transparentes, en varias cuentas con Amazon RDS para SQL Server

Por Alvaro Costa-Neto, Jeril Jose y Gopakumar Gopalakrishna Pillai

El servicio de Amazon Relational Database Service (Amazon RDS) para SQL Server es una base de datos administrada por AWS que simplifica la operación y administración de bases de datos de Microsoft SQL Server. Este proporciona valor al gestionar el aprovisionamiento, la administración y la supervisión de las bases de datos de SQL Server. Si bien esta agilidad operativa es valiosa, la protección y la seguridad de datos se vuelven aún más críticas al considerar los riesgos de migrar bases de datos fuera de los centros de datos físicos. Aquí Amazon RDS le permite emplear la función de cifrado transparente de datos (TDE) de SQL Server, que protege sus datos en reposo y limita el acceso a usuarios autorizados; sin embargo, no cifra los datos en tránsito o en uso.

Cabe resaltar que el uso de varias cuentas de AWS es una práctica recomendada común que permite separar entornos lógicamente. Al administrar bases de datos SQL Server habilitadas para TDE en cuentas de AWS, se tienen varios pasos clave que mejoran la postura de seguridad en cuanto a la protección de datos. En esta publicación se proporcionan los pasos para migrar bases de datos habilitadas para TDE entre instancias de Amazon RDS para SQL Server a través de cuentas de AWS.

Requisitos

Para llevar a cabo lo siguiente se recomienda tener conocimiento previo de Amazon RDS para SQL Server y TDE en SQL Server. En este ejemplo se usa SQL Server 2019 Enterprise Edition.

Aquí se expanden los requisitos necesarios para llevar la sesión:

  • Amazon RDS para SQL Server con el grupo de opciones TDE habilitado en las cuentas A y B Cuentas de AWS y permisos adecuados para interactuar con los recursos de su cuenta de AWS
  • Accesos con AWS KMS Key
  • Buckets de S3 en la cuenta A y la cuenta B

Descripción general de la solución

En esta solución se representa la necesidad de realizar una copia de seguridad de una base de datos habilitada con TDE en Amazon RDS para SQL Server en la cuenta A de AWS y para posteriormente restaurarla a otra instancia en la cuenta B. El certificado para TDE debe ser cifrado con una llave del servicio AWS KMS, en inglés AWS Key Management Service, este certificado también se debe restaurar en la instancia de destino. El texto cifrado de la llave privada, utilizada para hacer una copia de seguridad del certificado TDE de la base de datos de origen, es descifrado por una llave KMS en la cuenta A y se vuelve a cifrar con una llave KMS en la cuenta B.

Para implementar la solución, debe completar los siguientes pasos en la cuenta A:

  1. Si no existe, cree una nueva llave simétrica de AWS KMS.
  2. Haga una copia de seguridad del certificado TDE utilizando la llave de AWS KMS en un bucket de Amazon Simple Storage Service (Amazon S3).
  3. Haga una copia de seguridad de la base de datos RDS para SQL Server en el bucket S3.
  4. Extraiga el ciphertext-blob de los metadatos del archivo de la llave privada que está en el bucket de S3.
  5. Comparta la llave de AWS KMS.

Por otra parte, en la cuenta B, complete los siguientes pasos:

  1. Debe descifrar el texto cifrado de la cuenta A y extraer la contraseña, que está en texto plano.
  2. Cree una nueva llave simétrica de AWS KMS en la cuenta B y cifre la clave con la contraseña, que está en texto plano.
  3. Debe tener en cuenta que antes de restaurar la base de datos, el certificado TDE tiene que ser restaurado en la instancia de destino, la que está en la cuenta B.
  4. Restaure la base de datos y cifre la llave de AWS KMS en Amazon RDS para SQL Server en la cuenta B.

El siguiente diagrama ilustra la arquitectura de la solución para migrar bases de datos SQL Server habilitadas para TDE entre cuentas.

Hacer una copia de seguridad del certificado TDE y la base de datos RDS para SQL Server desde la cuenta A a un bucket S3

Haga una copia de seguridad del certificado TDE en la cuenta A utilizando el procedimiento almacenado rds_backup_tde_certificate en la instancia de RDS utilizando una llave de AWS KMS. Puede ejecutar el siguiente código de ejemplo en Amazon RDS para SQL Server en la cuenta A.

A continuación se muestra un ejemplo de estados a ejecutar en la cuenta A.

Primero, consultamos la vista del sistema sys.certificate para obtener el nombre del certificado TDE,:

USE [master]
GO
SELECT * FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%'
GO

Luego se hace una copia de seguridad del Certificado TDE de Amazon RDS usando una clave KMS:

EXECUTE msdb.dbo.rds_b ackup_tde_certificate
    @certificate_name='RDSTDECertificate20230323T215533',
    @certificate_file_s3_arn='arn:aws:s3:::<BUCKET-NAME-ACCOUNTA>/mssql-inst02.cer’,
    @private_key_file_s3_arn=’arn:aws:s3:::<BUCKET-NAME-ACCOUNTA>/mssql-inst02.pvk',
    @kms_password_key_arn='arn:aws:kms:us-east-1:<ACCOUNTA-ID>:key/mrk-<Key ID>',
    @overwrite_s3_files=1;

Finalmente, hacemos una copia de seguridad de la base de datos cifrada de forma nativa en Amazon S3:

exec msdb.dbo.rds_backup_database
    @source_db_name='tpcc',
    @s3_arn_to_backup_to='arn:aws:s3:::<BUCKET-NAME-ACCOUNTA>/tpcc-native-backup.bak',    
     @overwrite_s3_backup_file=1,
     @type='FULL',
     @number_of_files=4; 

Para mayor información, consulte Soporte para TDE en SQL Server

Extraiga el ciphertext-blob de los metadatos del archivo de llave privada del S3

Complete los siguientes pasos:

  1. Navegue al bucket S3 del paso anterior y copie el ciphertext-blob de los metadatos del archivo de llave privada. Esto se puede encontrar bajo la etiqueta x-amz-meta-rds-tde-pwd.
  2. Compartir la llave de KMS (que se utiliza para hacer una copia de seguridad del certificado TDE) al usuario root o a cualquier otro usuario o rol en la cuenta B que vaya a realizar las operaciones criptográficas.

A continuación se muestra un ejemplo de una política de IAM que utiliza el usuario raíz:

{
    "Sid": "Allow an external account to use this KMS key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
        "arn:aws:iam::444455556666:root"
        ]
    },
    "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
    ],
    "Resource": “<ARN-FOR-KMS-KEY>”
}

A continuación se muestra un ejemplo de una política de IAM que utiliza un rol:

{
    "Sid": "Allow an external account to use this KMS key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/ExampleRole"
    },
    "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
    ],
    "Resource": “<ARN-FOR-KMS-KEY>”
}

3. Ahora puede copiar los archivos que hacen referencia a la copia de seguridad del certificado TDE (*.cer) y a la llave privada (*.pvk) de la cuenta a un bucket de S3 en la cuenta B.

Descifrar el texto cifrado de la cuenta A y extraer la contraseña de texto plano.

Aquí se debe descifrar el texto recibido de la cuenta A utilizando el ID de la llave de AWS KMS que se utilizó previamente para hacer una copia de seguridad del certificado TDE. A continuación se muestra un comando de AWS Command Line Interface (AWS CLI) que sirve como ejemplo para descifrar el texto cifrado y obtener la contraseña en texto plano:

AWS kms decrypt —key-id  —ciphertext-blob   —output text —query Plaintext —region

Para obtener más información sobre el descifrado, consulte como descifrar.

Cree una nueva llave de AWS KMS en la cuenta B y cífrela con la contraseña de texto plano

El siguiente paso es crear una nueva llave simétrica de AWS KMS en la cuenta B y cifrar la contraseña de texto plano, que se descifró en el paso anterior mediante el uso de la clave de AWS KMS en la cuenta B. Aquí debe utilizar las credenciales que tengan permisos en la clave de AWS KMS. El siguiente comando encripta la contraseña de texto plano que desciframos previamente:

aws kms encrypt —key-id <Provide KMS KeyID from Account-B> —plaintext "The output from the decrypt step" —output text —region <AWS Region>

Para obtener más información, consulte Creación de CMK simétrica

A continuación, se navega hasta el bucket S3 en la cuenta B donde se guarda el certificado y la llave privada. Seleccionamos el archivo de clave privada (.pvk) y se de click sobre el botón de las acciones del objeto y se editamos los metadatos. También se debe actualiza el campo de valor de tipo User Defined con el texto cifrado y la llave x-amz-meta-rds-tde-pwd.

Como restaurar la base de datos y cifrar la llave de AWS KMS en Amazon RDS para SQL Server en la cuenta B

Antes de restaurar la base de datos, debe verificar que la instancia de RDS para SQL Server en la cuenta B tenga un grupo de opciones con TDE con respaldo nativo y restauración habilitados.

Restaure el certificado TDE actualizado en Amazon RDS para SQL Server en la cuenta B utilizando la llave de AWS KMS recién creada con el siguiente código de ejemplo:

EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_FromAcct1',
    @certificate_file_s3_arn='arn:aws:s3:::<BUCKET-NAME-ACCOUNTB>/mssql-inst02.cer',
    @private_key_file_s3_arn='arn:aws:s3::: <BUCKET-NAME-ACCOUNTB>/mssql-inst02.pvk',
    @kms_password_key_arn='arn:aws:kms:us-east-1:<ACCOUNTB-ID>:key/mrk-<Key ID>'; 

Revise si el certificado de usuario está habilitado con el siguiente código:

SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();

Después de restaurar y verificar correctamente el certificado TDE en Amazon RDS para SQL Server, se puede continuar restaurando la copia de seguridad de la base de datos. El siguiente es un ejemplo para restaurar la copia de seguridad de TDE habilitada desde el bucket S3 en la cuenta B.

exec msdb.dbo.rds_ restore_database
    @ restore_db_name='tpcc',
    @s3_arn_to_restore_from='arn:aws:s3:::<BUCKET-NAME-ACCOUNTB>/tpcc',
    @with_norecovery=0,
    @type='FULL';

Limpiar

Se recomienda realizar esta operación para evitar costos adicionales. Para eliminar los recursos de AWS creados durante las pruebas, complete los siguientes pasos:

  1. Inicie sesión en la consola de administración de AWS.
  2. Elija la región donde residen las instancias de RDS para SQL Server.
  3. En la consola de Amazon RDS, elija Bases de datos en el panel de navegación.
  4. Seleccione la instancia de RDS que se creó.
  5. En el menú Acciones, elija Eliminar.
  6. En la consola de Amazon S3, seleccione el bucket que se creó.
  7. En el menú Acciones, elija Eliminar.
  8. En la consola de AWS KMS, seleccione la clave KMS que creó.
  9. Elija Programar eliminación de claves, ingrese un período entre 7 y 30 días y luego elija Programar eliminación.

Conclusión

El cifrado transparente de datos es un mecanismo de cifrado incorporado que se usa frecuentemente en SQL Server para proteger los datos. Esta publicación presentó una solución para restaurar una base de datos habilitada para TDE de una instancia de RDS para SQL Server a otra instancia que reside en una cuenta diferente.

Recomendamos probar esta solución y dejar cualquier comentario o pregunta en la sección de comentarios. Estén atentos para más publicaciones que cubren soluciones adicionales de migración de SQL Server.

Este blog es una traducción del blog en ingles.

Acerca de los Autores

Alvaro Costa-Neto es un Arquitecto de Soluciones Especialista en Bases de Datos para AWS, donde ayuda a los clientes a diseñar e implementar soluciones de bases de datos en la nube. Le apasionan las tecnologías de bases de datos y lleva más de 19 años trabajando con ellas, principalmente con Microsoft SQL Server. Reside en Clermont, FL con su esposa y sus dos hijos, quienes comparten su amor por la aviación y los viajes. Cuando no está trabajando, le gusta organizar parrilladas con su familia y amigos y explorar nuevos lugares.

 

Gopakumar Gopalakrishna Pillai es Ingeniero de Bases de Datos en Amazon Web Services. Ha trabajado en múltiples tecnologías de bases de datos y ha proporcionado soluciones en diversos problemas de clientes dentro de sus 16 años de viaje a la base de datos hasta el momento. Se está enfocando en proporcionar soluciones óptimas de bases de datos para clientes de servidores RDS SQL y aprovecha su experiencia para ayudar a los clientes a crear aplicaciones sin servidor. En el tiempo libre le encanta explorar nuevos lugares.

 

Jeril Jose es Consultor Especialista en Bases de Datos con más de 14 años de experiencia en Microsoft SQL Server y otras tecnologías de bases de datos. Ayuda a los clientes a diseñar, migrar y optimizar sus soluciones de base de datos a AWS. Antes de unirse a AWS, apoyó la producción y la implementación de bases de datos de misión crítica en los segmentos financieros y minoristas.

 

Traductores y Revisores

Luiz Rampanelli es arquitecto de soluciones en el equipo de AWS Latam. Cuenta con más de 10 años de experiencia con cargas de trabajo de Microsoft en entornos híbridos y de nube. Trabaja diseñando soluciones siguiendo las mejores prácticas para que los clientes puedan aprovechar al máximo los beneficios de la nube de AWS.
Pilar Pinto Arquitecta de soluciones, apoya a SMB con entendimiento y formación bajo buenas prácticas arquitectónicas con foco en seguridad