Habilitación del cifrado de datos transparente en SQL Managed Instance habilitada por Azure Arc (versión preliminar)

En este artículo se describe cómo habilitar y deshabilitar el cifrado de datos transparente (TDE) en reposo en una instancia administrada de SQL habilitada por Azure Arc. En este artículo, el término instancia administrada hace referencia a una implementación de INSTANCIA administrada de SQL habilitada por Azure Arc y la habilitación o deshabilitación de TDE se aplicará a todas las bases de datos que se ejecutan en una instancia administrada.

Para obtener más información sobre TDE, consulte Cifrado de datos transparente.

Al activar la característica TDE, se hace lo siguiente:

  • Todas las bases de datos existentes ahora se cifrarán automáticamente.
  • Todas las bases de datos recién creadas se cifrarán automáticamente.

Nota:

Como característica en versión preliminar, la tecnología que se presenta en este artículo está sujeta a los términos de uso complementarios para las versiones preliminares de Microsoft Azure.

Las actualizaciones más recientes están disponibles en las notas de la versión.

Requisitos previos

Antes de continuar con este artículo, deberá tener habilitada una instancia de SQL Managed Instance para el recurso de Azure Arc creado y conectarse a ella.

Limitaciones

Se aplican las siguientes limitaciones al habilitar el TDE automático:

  • Solo se admite el nivel de uso general.
  • No se admiten grupos de conmutación por error.

Creación de una instancia administrada con TDE habilitado (CLI de Azure)

En el ejemplo siguiente se crea una instancia administrada de SQL habilitada por Azure Arc con una réplica habilitada para TDE:

az sql mi-arc create --name sqlmi-tde --k8s-namespace arc --tde-mode ServiceManaged --use-k8s

Activar TDE en la instancia administrada

Cuando TDE está habilitado en SQL Managed Instance habilitada por Arc, el servicio de datos realiza automáticamente las siguientes tareas:

  1. Agrega la clave maestra de base de datos administrada por el servicio en la base de datos master.
  2. Agrega el protector de certificado administrado por el servicio.
  3. Agrega las claves de cifrado de base de datos (DEK) asociadas en todas las bases de datos de la instancia administrada.
  4. Habilita el cifrado en todas las bases de datos de la instancia administrada.

Puede establecer SQL Managed Instance habilitado por TDE de Azure Arc en uno de estos dos modos:

  • Administrado por el servicio
  • Administrada por el cliente

En el modo administrado por el servicio, TDE requiere que la instancia administrada use una clave maestra de base de datos administrada por el servicio, así como el certificado de servidor administrado por el servicio. Estas credenciales se crean automáticamente cuando se habilita el TDE administrado por el servicio.

En el modo administrado por el cliente, TDE usa una clave maestra de base de datos administrada por el servicio y usa claves que se proporcionan para el certificado de servidor. Para configurar el modo administrado por el cliente:

  1. Cree un certificado.
  2. Almacene el certificado como un secreto en el mismo espacio de nombres de Kubernetes que la instancia.

Habilitar

En la sección siguiente se explica cómo habilitar TDE en modo administrado por el servicio.

Para habilitar TDE en modo administrado de servicio, ejecute el siguiente comando:

az sql mi-arc update --tde-mode ServiceManaged

Desactivar TDE en la instancia administrada

Cuando TDE está deshabilitado en SQL Managed Instance habilitado para Arc, el servicio de datos realiza automáticamente las siguientes tareas:

  1. Deshabilita el cifrado en todas las bases de datos de la instancia administrada.
  2. Quita los DEK asociados en todas las bases de datos de la instancia administrada.
  3. Quita el protector de certificado administrado por el servicio.
  4. Quita la clave maestra de base de datos administrada por el servicio en la base de datos master.

Para deshabilitar TDE:

az sql mi-arc update --tde-mode Disabled

Copia de seguridad de una credencial de TDE

Al hacer una copia de seguridad de las credenciales de la instancia administrada, las credenciales se almacenan en el contenedor. Para almacenar las credenciales en un volumen persistente, especifique la ruta de acceso de montaje en el contenedor. Por ejemplo, var/opt/mssql/data. En el ejemplo siguiente se hace una copia de seguridad de un certificado de la instancia administrada:

Nota:

Si el comando kubectl cp se ejecuta desde Windows, puede producir un error al usar rutas de acceso de Windows absolutas. Use rutas de acceso relativas o los comandos especificados a continuación.

  1. Realice una copia de seguridad del certificado del contenedor en /var/opt/mssql/data.

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    Ejemplo:

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. Copie el certificado desde el contenedor al sistema de archivos.

    kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>
    

    Ejemplo:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
    

  1. Copie la clave privada desde el contenedor al sistema de archivos.

     kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>
    

    Ejemplo:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
    

  1. Elimine el certificado y la clave privada del contenedor.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Ejemplo:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Restauración de una credencial de TDE en una instancia administrada

De forma similar a la anterior, para restaurar las credenciales, cópielas en el contenedor y ejecute después el comando T-SQL correspondiente.

Nota:

Si el comando kubectl cp se ejecuta desde Windows, puede producir un error al usar rutas de acceso de Windows absolutas. Use rutas de acceso relativas o los comandos especificados a continuación. Para restaurar las copias de seguridad de base de datos que se han realizado antes de habilitar TDE, tendría que deshabilitar TDE en SQL Managed Instance, restaurar la copia de seguridad de la base de datos y volver a habilitar TDE.

  1. Copie el certificado desde el sistema de archivos al contenedor.

    type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>
    

    Ejemplo:

    type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
    

  1. Copie la clave privada desde sistema de archivos al contenedor.

    type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>
    

    Ejemplo:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. Cree el certificado mediante rutas de acceso de archivo desde /var/opt/mssql/data.

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    Ejemplo:

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  3. Elimine el certificado y la clave privada del contenedor.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Ejemplo:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Cifrado de datos transparente