Compatibilidad con el Cifrado de datos transparente en SQL Server - Amazon Relational Database Service

Compatibilidad con el Cifrado de datos transparente en SQL Server

Amazon RDS admite el Cifrado de datos transparente (TDE) para cifrar los datos almacenados en las instancias de base de datos en las que se ejecuta Microsoft SQL Server. La característica TDE cifra automáticamente los datos antes de que se escriban en el sistema de almacenamiento y los descifra también automáticamente cuando se leen.

Amazon RDS admite TDE para las siguientes versiones y ediciones de SQL Server:

  • SQL Server 2019: Standard y Enterprise Editions

  • SQL Server 2017 Enterprise Edition

  • SQL Server 2016 Enterprise Edition

  • SQL Server 2014 Enterprise Edition

Con el cifrado de datos transparente para SQL Server se ofrece administración de claves de cifrado mediante el uso de una arquitectura de claves de dos niveles. Para proteger las claves de cifrado de datos se usa un certificado generado desde la clave maestra de la base de datos. La clave de cifrado de base de datos efectúa el cifrado y descifrado real de los datos en la base de datos del usuario. Amazon RDS crea copias de seguridad y administra la clave maestra de la base de datos y el certificado de TDE

El cifrado de datos transparente se usa en situaciones en las que es necesario cifrar información confidencial. Por ejemplo, es posible que desee proporcionar archivos de datos y copias de seguridad a un tercero, o bien solucionar problemas de cumplimiento normativo relacionados con la seguridad. No puede cifrar las bases de datos del sistema para SQL Server, por ejemplo las bases de datos model o master.

Ofrece una descripción detallada del cifrado de datos transparente va más allá del alcance de esta guía, pero asegúrese de conocer los puntos fuertes y débiles de cada algoritmo y cada clave de cifrado. Para obtener información sobre el cifrado transparente de datos para SQL Server, consulte Transparent Data Encryption (TDE) (Cifrado transparente de datos) en la documentación de Microsoft.

Activación de TDE en RDS para SQL Server

A fin de activar el cifrado de datos transparente para una instancia de base de datos de SQL Server de RDS, especifique la opción de TDE en un grupo de opciones de RDS que esté asociado con esa instancia de base de datos:

  1. Determine si la instancia de base de datos ya está asociada con un grupo de opciones que tiene la opción TDE. Para ver el grupo de opciones al que está asociada una instancia de base de datos, utilice la consola de RDS, el comando describe-db-instance de la AWS CLI o la operación DescribeDBInstances de la API.

  2. Si la instancia de base de datos no está asociada a un grupo de opciones con TDE activado, dispone de dos alternativas: Puede crear un grupo de opciones o añadir la opción TDE, o bien modificar el grupo de opciones asociado para añadirla.

    nota

    En la consola de RDS, la opción se denomina TRANSPARENT_DATA_ENCRYPTION. En la AWS CLI y la API de RDS, se denomina TDE.

    Para obtener información acerca de cómo crear o modificar un grupo de opciones, consulte Trabajo con grupos de opciones. Para obtener información acerca de cómo añadir una opción a un grupo de opciones, consulte Agregar una opción a un grupo de opciones.

  3. Asocie la instancia de base de datos al grupo de opciones que tiene la opción TDE. Para obtener información acerca de cómo asociar una instancia de base de datos a un grupo de opciones, consulte Modificación de una instancia de base de datos de Amazon RDS.

Consideraciones relativas al grupo de opciones

La opción TDE es persistente. No se puede eliminar de un grupo de opciones a menos que todas las instancias de base de datos y las copias de seguridad dejen de estar asociadas al grupo de opciones. Una vez que la opción TDE se agrega a un grupo de opciones, este solo se puede asociar a instancias de base de datos que usan TDE. Para obtener más información acerca de las opciones persistentes de un grupo de opciones, use Información general sobre grupos de opciones.

Como TDE es una opción persistente, puede producirse un conflicto entre el grupo de opciones y una instancia de base de datos asociada. Puede tener un conflicto en las siguientes situaciones:

  • El grupo de opciones actual tiene la opción TDE y lo reemplaza por un grupo de opciones que no la tiene.

  • Restaura desde una instantánea de base de datos a una nueva instancia de base de datos que no tiene un grupo de opciones que contenga la opción TDE. Para obtener más información acerca de esta situación, consulte Consideraciones relativas al grupo de opciones.

Consideraciones sobre el rendimiento de SQL Server

El uso del cifrado de datos transparente puede afectar al rendimiento de una instancia de base de datos de SQL Server.

El desempeño de las bases de datos sin cifrar puede reducirse también si están en una instancia de base de datos que tenga al menos una base de datos cifrada. Como resultado, es recomendable mantener las bases de datos cifradas y sin cifrar en instancias de base de datos diferentes.

Cifrado de datos en RDS para SQL Server

Cuando la opción TDE se agrega a un grupo de opciones, Amazon RDS genera un certificado que se usa en el proceso de cifrado. A continuación puede usar el certificado para ejecutar instrucciones SQL que cifren los datos de una base de datos de la instancia de base de datos.

En el siguiente ejemplo se usa un certificado creado por RDS llamado RDSTDECertificateName para cifrar una base de datos denominada myDatabase.

---------- Turning on TDE ------------- -- Find an RDS TDE certificate to use USE [master] GO SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%' GO USE [myDatabase] GO -- Create a database encryption key (DEK) using one of the certificates from the previous step CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName] GO -- Turn on encryption for the database ALTER DATABASE [myDatabase] SET ENCRYPTION ON GO -- Verify that the database is encrypted USE [master] GO SELECT name FROM sys.databases WHERE is_encrypted = 1 GO SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO

El tiempo que tarda en cifrarse una base de datos de SQL Server con TDE depende de varios factores. Estos incluyen el tamaño de la instancia de base de datos, si la instancia usa el almacenamiento de IOPS aprovisionadas, la cantidad de datos y otros factores.

Copia de seguridad y restauración de certificados TDE en RDS para SQL Server

RDS para SQL Server proporciona procedimientos almacenados para realizar copias de seguridad de los certificados TDE, restaurarlos y eliminarlos. RDS para SQL Server también proporciona una función para ver los certificados TDE de usuario restaurados.

Los certificados TDE de usuario se utilizan para restaurar las bases de datos en RDS para SQL Server que están en las instalaciones y tienen TDE activado. Estos certificados tienen el prefijo UserTDECertificate_. Después de restaurar las bases de datos, y antes de hacer que estén disponibles para usarlas, RDS modifica las bases de datos que tienen TDE activado a fin de utilizar los certificados TDE generados por RDS. Estos certificados tienen el prefijo RDSTDECertificate.

Los certificados TDE de usuario permanecen en la instancia de base de datos de RDS para SQL Server, a menos que los elimine mediante el procedimiento almacenado rds_drop_tde_certificate. Para obtener más información, consulte Eliminación de certificados TDE restaurados .

Puede utilizar un certificado TDE de usuario para restaurar otras bases de datos desde la instancia de base de datos de origen. Las bases de datos que se van a restaurar deben utilizar el mismo certificado TDE y tener TDE activado. No tiene que volver a importar (restaurar) el mismo certificado.

Requisitos previos

Para poder hacer una copia de seguridad de los certificados TDE o restaurarlos en RDS para SQL Server, asegúrese de realizar las siguientes tareas. Las tres primeras se describen en Configuración de la copia de seguridad y la restauración nativas.

  1. Cree buckets de Amazon S3 a fin de almacenar archivos para copia de seguridad y restauración.

    Le recomendamos que utilice buckets distintos para las copias de seguridad de la base de datos y para las copias de seguridad de los certificados TDE.

  2. Cree un rol de IAM para hacer copias de seguridad de los archivos y restaurarlos.

    El rol de IAM debe ser tanto un usuario como un administrador para la AWS KMS key.

    Además de los permisos necesarios para la copia de seguridad y restauración nativas de SQL Server, el rol de IAM también requiere los siguientes permisos:

    • s3:GetBucketACL, s3:GetBucketLocation y s3:ListBucket en el recurso de bucket de S3

    • s3:ListAllMyBuckets en el recurso *

  3. Agregue la opción SQLSERVER_BACKUP_RESTORE a un grupo de opciones en su instancia de base de datos.

    Esto se agrega a la opción TRANSPARENT_DATA_ENCRYPTION (TDE).

  4. Asegúrese de que tiene una clave de KMS de cifrado simétrica. Dispone de las opciones siguientes:

    • Si ya dispone de una clave de KMS en la cuenta, puede utilizarla. No hay que hacer nada más.

    • Si no tiene una clave de cifrado KMS simétrica existente en su cuenta, cree una clave KMS mediante las instrucciones de Creating keys (Crear claves) en la AWS Key Management ServiceDeveloper Guide (Guía para desarrolladores).

Limitaciones

El uso de procedimientos almacenados para hacer copias de seguridad de certificados TDE y restaurarlos tiene las siguientes limitaciones:

  • Las opciones SQLSERVER_BACKUP_RESTORE y TRANSPARENT_DATA_ENCRYPTION (TDE) deben agregarse al grupo de opciones que haya asociado a su instancia de base de datos.

  • Las copias de seguridad y la restauración de los certificados TDE no son compatibles con las instancias de base de datos Multi-AZ.

  • No se admite la cancelación de tareas de copia de seguridad y restauración de certificados TDE.

  • No puede utilizar un certificado TDE de usuario para el cifrado TDE de otra base de datos en su instancia de base de datos RDS para SQL Server. Puede utilizarlo para restaurar solo otras bases de datos de la instancia de base de datos de origen que tengan TDE activado y que utilicen el mismo certificado TDE.

  • Solo puede eliminar certificados TDE de usuario.

  • El número máximo de certificados TDE de usuario admitidos en RDS es 10. Si el número es superior a diez, elimine los certificados TDE no utilizados y vuelva a intentarlo.

  • El nombre del certificado no puede estar vacío ni ser nulo.

  • Al restaurar un certificado, su nombre no puede incluir la palabra clave RDSTDECERTIFICATE y debe comenzar por el prefijo UserTDECertificate_.

  • El parámetro @certificate_name solo puede incluir los siguientes caracteres: a-z, 0-9, @, $, # y guion bajo (_).

  • La extensión del archivo para @certificate_file_s3_arn debe ser .cer (no se distingue entre mayúsculas y minúsculas).

  • La extensión del archivo para @private_key_file_s3_arn debe ser .pvk (no se distingue entre mayúsculas y minúsculas).

  • Los metadatos S3 del archivo de clave privada deben incluir la etiqueta x-amz-meta-rds-tde-pwd. Para obtener más información, consulte Copia de seguridad y restauración de certificados TDE para bases de datos en las instalaciones .

Copia de seguridad de un certificado TDE

Para hacer copias de seguridad de los certificados TDE, utilice el procedimiento almacenado rds_backup_tde_certificate. Tiene la siguiente sintaxis.

EXECUTE msdb.dbo.rds_backup_tde_certificate @certificate_name='UserTDECertificate_certificate_name | RDSTDECertificatetimestamp', @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer', @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk', @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id', [@overwrite_s3_files=0|1];

Se requieren los siguientes parámetros:

  • @certificate_name: nombre del certificado TDE del que se hará una copia de seguridad.

  • @certificate_file_s3_arn: nombre de recurso de Amazon (ARN) de destino para el archivo de copia de seguridad de certificados en Amazon S3.

  • @private_key_file_s3_arn: ARN de S3 de destino del archivo de clave privada que protege el certificado TDE.

  • @kms_password_key_arn: ARN de la clave de KMS simétrica utilizada para cifrar la contraseña de clave privada.

El siguiente parámetro es opcional:

  • @overwrite_s3_files: indica si se deben sobrescribir los archivos de certificado y de clave privada existentes en S3:

    • 0: no se sobrescriben los archivos existentes. Este valor es el valor predeterminado.

      Al establecer @overwrite_s3_files en 0, se devuelve un error si ya existe un archivo.

    • 1: se sobrescribe un archivo existente que tenga el nombre especificado, aunque no sea un archivo de copia de seguridad.

ejemplo de copia de seguridad de un certificado TDE

EXECUTE msdb.dbo.rds_backup_tde_certificate @certificate_name='RDSTDECertificate20211115T185333', @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer', @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE', @overwrite_s3_files=1;

Restauración de un certificado TDE

Use el procedimiento almacenado rds_restore_tde_certificate para restaurar (importar) certificados TDE de usuario. Tiene la siguiente sintaxis.

EXECUTE msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_certificate_name', @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer', @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk', @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id';

Se requieren los siguientes parámetros:

  • @certificate_name: nombre del certificado TDE que se va a restaurar. El nombre debe comenzar por el prefijo UserTDECertificate_.

  • @certificate_file_s3_arn: ARN de S3 del archivo de copia de seguridad que se usa para restaurar el certificado TDE.

  • @private_key_file_s3_arn: ARN de S3 del archivo de copia de seguridad de clave privada del certificado TDE que se va a restaurar.

  • @kms_password_key_arn: ARN de la clave de KMS simétrica utilizada para cifrar la contraseña de clave privada.

ejemplo de restauración de un certificado TDE

EXECUTE msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate', @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer', @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE';

Visualización de certificados TDE

Use la función rds_fn_list_user_tde_certificates para ver los certificados TDE de usuario restaurados (importados). Tiene la siguiente sintaxis.

SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();

La salida se parece a la siguiente. Aquí no se muestran todas las columnas.

name certificate_id principal_id pvt_key_encryption_type_desc issuer_name cert_serial_number thumbprint subject start_date expiry_date pvt_key_last_backup_date
UserTDECertificate_tde_cert 343 1 ENCRYPTED_BY_MASTER_KEY AnyCompany Shipping 79 3e 57 a3 69 fd 1d 9e 47 2c 32 67 1d 9c ca af 0x6BB218B34110388680B FE1BA2D86C695096485B5 AnyCompany Shipping 2022-04-05 19:49:45.0000000 2023-04-05 19:49:45.0000000 NULL

Eliminación de certificados TDE restaurados

Para eliminar los certificados TDE de usuario restaurados (importados) que no esté utilizando, utilice el procedimiento almacenado rds_drop_tde_certificate. Tiene la siguiente sintaxis.

EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';

El siguiente parámetro es obligatorio:

  • @certificate_name: el nombre del certificado TDE que se va a eliminar.

Solo puede eliminar los certificados TDE restaurados (importados). No se pueden eliminar los certificados creados por RDS.

ejemplo de eliminación de un certificado TDE

EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate';

Copia de seguridad y restauración de certificados TDE para bases de datos en las instalaciones

Puede realizar una copia de seguridad de los certificados TDE para las bases de datos en las instalaciones y, posteriormente, restaurarlos en RDS para SQL Server. También puede restaurar un certificado TDE de RDS para SQL Server en una instancia de base de datos en las instalaciones.

El siguiente procedimiento hace una copia de seguridad de un certificado TDE y una clave privada. La clave privada se cifra mediante una clave de datos generada a partir de su clave de KMS de cifrado simétrico.

Para hacer una copia de seguridad de un certificado TDE en las instalaciones

  1. Genere la clave de datos mediante el comando generate-data-key de AWS CLI.

    aws kms generate-data-key \ --key-id my_KMS_key_ID \ --key-spec AES_256

    La salida se parece a la siguiente.

    { "CiphertextBlob": "AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ 2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==", "Plaintext": "U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=", "KeyId": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-00ee-99ff-88dd-aa11bb22cc33" }

    La salida de texto sin formato se utiliza en el siguiente paso como contraseña de la clave privada.

  2. Haga una copia de seguridad de su certificado TDE como se muestra en el siguiente ejemplo.

    BACKUP CERTIFICATE myOnPremTDEcertificate TO FILE = 'D:\tde-cert-backup.cer' WITH PRIVATE KEY ( FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\cert-backup-key.pvk', ENCRYPTION BY PASSWORD = 'U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=');
  3. Guarde el archivo de copia de seguridad de certificados en el bucket de certificados de Amazon S3.

  4. Guarde el archivo de copia de seguridad de clave privada en su bucket de certificados de S3, con la siguiente etiqueta en los metadatos del archivo:

    • Clave: x-amz-meta-rds-tde-pwd

    • Valor: el valor de CiphertextBlob de la generación de la clave de datos, como en el siguiente ejemplo.

      AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ 2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==

El siguiente procedimiento restaura un certificado TDE de RDS para SQL Server en una instancia de base de datos en las instalaciones. Copie y restaure el certificado TDE en su instancia de base de datos de destino mediante la copia de seguridad del certificado, el archivo de clave privada correspondiente y la clave de datos. El certificado restaurado está cifrado con la clave maestra de base de datos del nuevo servidor.

Para restaurar un certificado TDE

  1. Copie el archivo de copia de seguridad del certificado TDE y el archivo de clave privada de Amazon S3 en la instancia de destino.

  2. Utilice la clave de KMS para descifrar el texto de cifrado de salida y recuperar el texto sin formato de la clave de datos. El texto de cifrado se encuentra en los metadatos de S3 del archivo de copia de seguridad de la clave privada.

    aws kms decrypt \ --key-id my_KMS_key_ID \ --ciphertext-blob fileb://exampleCiphertextFile | base64 -d \ --output text \ --query Plaintext

    La salida de texto sin formato se utiliza en el siguiente paso como contraseña de la clave privada.

  3. Utilice el siguiente comando SQL para restaurar su certificado TDE.

    CREATE CERTIFICATE myOnPremTDEcertificate FROM FILE='D:\tde-cert-backup.cer' WITH PRIVATE KEY (FILE = N'D:\tde-cert-key.pvk', DECRYPTION BY PASSWORD = 'plain_text_output');

Para obtener más información sobre el descifrado de KMS, consulte decrypt en la sección KMS de la referencia de comandos de AWS CLI.

Una vez restaurado el certificado TDE en la instancia de base de datos de destino, podrá restaurar las bases de datos cifradas con ese certificado.

nota

Puede utilizar el mismo certificado TDE para cifrar varias bases de datos de SQL Server en la instancia de base de datos de origen. Para migrar varias bases de datos a una instancia de destino, copie el certificado TDE asociado a ellas en la instancia de destino solo una vez.

Desactivación de TDE en RDS para SQL Server

Para desactivar TDE en una instancia de base de datos de RDS para SQL Server, asegúrese primero de que no quedan objetos cifrados en la instancia de base de datos. Para ello, descifre los objetos o elimínelos. Si existe algún objeto cifrado en la instancia de base de datos, no podrá desactivar TDE para la instancia de base de datos. Al usar la consola para eliminar la opción TDE de un grupo de opciones, la consola indica que se está procesando. Además, se creará un evento de error si el grupo de opciones se asocia a una instantánea de base de datos o una instancia de base de datos cifrada.

En el siguiente ejemplo se elimina el cifrado de TDE de una base de datos llamada customerDatabase.

------------- Removing TDE ---------------- USE [customerDatabase] GO -- Turn off encryption of the database ALTER DATABASE [customerDatabase] SET ENCRYPTION OFF GO -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO -- Drop the DEK used for encryption DROP DATABASE ENCRYPTION KEY GO -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated USE [master] GO ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE GO

Cuando todos los objetos estén descifrados, tendrá a su disposición dos opciones:

  1. Puede modificar la instancia de base de datos para asociarla a un grupo de opciones sin la opción TDE.

  2. Puede quitar la opción TDE del grupo de opciones.