Rotación de claves de Always Encrypted mediante SQL Server Management Studio

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

En este artículo se describen las tareas para rotar claves maestras de columna y claves de cifrado de columna de Always Encrypted mediante SQL Server Management Studio (SSMS).

Para obtener información general sobre la administración de claves de Always Encrypted, incluidos algunos procedimientos recomendados y consideraciones de seguridad importantes, vea Información general de administración de claves de Always Encrypted.

Nota:

El uso de claves maestras de columna almacenadas en un HSM administrado en Azure Key Vault requiere SSMS 18.9 o versiones posteriores.

Rotación de claves maestras de columna

La rotación de una clave maestra de columna es el proceso por el cual se reemplaza una clave maestra de columna existente por otra nueva. Puede que necesite rotar una clave si está en peligro, o bien para cumplir las directivas o los reglamentos de la organización que exigen que se roten las claves criptográficas de forma regular. La rotación de claves maestras de columna implica descifrar las claves de cifrado de columnas que están protegidas con la clave maestra de columna actual, volver a cifrarlas con la nueva clave maestra de columna y actualizar los metadatos de clave.

Paso 1: aprovisionamiento de una nueva clave maestra de columna

Siga los pasos descritos en Aprovisionamiento de claves maestras de columna con el cuadro de diálogo Nueva clave maestra de columna.

Paso 2: cifrado de las claves de cifrado de columna con la nueva clave maestra de columna

Por lo general, una clave maestra de columna protege una o más claves de cifrado de columnas. Cada clave de cifrado de columnas tiene un valor cifrado, almacenado en la base de datos, que es el resultado de haber cifrado la clave de cifrado de columnas con la clave maestra de columna. En este paso, todas las claves de cifrado de columna, que están protegidas con la clave maestra de columna que se va a rotar, se cifrarán con la nueva clave maestra de columna, y el nuevo valor cifrado se almacenará en la base de datos. Como resultado, cada clave de cifrado de columnas afectada por la rotación tendrá dos valores cifrados: uno cifrado con la clave maestra de columna antigua y otro reciente, cifrado con la nueva.

  1. En el Explorador de objetos, vaya a la carpeta Seguridad>Claves de Always Encrypted>Claves maestras de columna y encuentre la clave maestra de columna que va a rotar.
  2. Haga clic con el botón derecho en ella y seleccione Rotar.
  3. En el cuadro de diálogo Rotación de clave maestra de columna , seleccione el nombre de la nueva clave maestra de columna que creó en el paso 1 en el campo Destino .
  4. Revise la lista de claves de cifrado de columna, protegidas por las claves maestras de columna existentes. Estas claves se verán afectadas por la rotación.
  5. Haga clic en Aceptar.

SQL Server Management Studio obtendrá los metadatos de las claves de cifrado de columnas que están protegidas con la clave maestra de columna antigua y los metadatos de las claves maestras de columna antigua y nueva. Después, SSMS usará los metadatos de la clave maestra de columna para tener acceso al almacén de claves que contiene la clave maestra de columna antigua y descifrar las claves de cifrado de columnas. Posteriormente, SSMS obtendrá acceso al almacén de claves que contiene la nueva clave maestra de columna para generar un conjunto de valores cifrados de las claves de cifrado de columnas y, después, agregará los valores nuevos a los metadatos, para lo que generará y emitirá instrucciones ALTER COLUMN ENCRYPTION KEY (Transact-SQL) .

Nota:

Asegúrese de que ninguna de las claves de cifrado de columnas, cifradas con la clave maestra de columna antigua, esté cifrada con otra clave maestra de columna. Dicho de otro modo, cada clave cifrada de columna afectada por la rotación debe tener exactamente un valor cifrado en la base de datos. Si alguna de las claves de cifrado de columnas afectadas tiene más de un valor cifrado, tendrá que quitarlo para poder continuar con la rotación (consulte el paso 4 , en el que se explica cómo quitar un valor cifrado de una clave de cifrado de columna).

Paso 3: configuración de sus aplicaciones con la nueva clave maestra de columna

En este paso, debe asegurarse de que todas sus aplicaciones cliente que consultan columnas de la base de datos protegidas con la clave maestra de columna que va a rotar puedan acceder a la nueva clave maestra de columna (es decir, las columnas de la base de datos cifradas con una clave de cifrado de columna que, a su vez, está cifrada con la clave maestra de columna, que se va a rotar). Este paso depende del tipo de almacén de claves en el que se encuentre la nueva clave maestra de columna. Por ejemplo:

  • Si la nueva clave maestra de columna es un certificado guardado en el Almacén de certificados de Windows, tendrá que implementarlo en la misma ubicación del almacén de certificados (Usuario actual o Equipo local) que la especificada en la ruta de acceso de la clave de su clave maestra de columna en la base de datos. La aplicación debe poder acceder al certificado:
    • Si el certificado se guarda en la ubicación del almacén de certificados Usuario actual, será necesario importarlo en el almacén Usuario actual de la identidad de Windows (el usuario) de la aplicación.
    • Si el certificado se guarda en la ubicación del almacén de certificados Equipo local, la identidad de Windows de la aplicación deberá tener permiso para acceder al certificado.
  • Si la nueva clave maestra de columna se guarda en el Almacén de claves de Microsoft Azure, la aplicación se debe implementar de forma que se pueda autenticar en Azure y tenga permiso para obtener acceso a la clave.

Para más información, vea Creación y almacenamiento de claves maestras de columna para Always Encrypted.

Nota:

En este momento de la rotación, tanto la clave maestra de columna antigua como la nueva son válidas y se pueden usar para obtener acceso a los datos.

Paso 4: limpieza de los valores de clave de cifrado de columna cifrados con la clave maestra de columna antigua

Una vez que haya configurado todas las aplicaciones para que usen la nueva clave maestra de columna, quite de la base de datos los valores de las claves de cifrado de columnas que estén cifradas con la clave maestra de columna antigua . Al quitar los valores antiguos, garantizará que está preparado para la siguiente rotación (recuerde que cada clave de cifrado de columna protegida con una clave maestra de columna que se vaya a rotar debe tener exactamente un único valor cifrado).

Existe otro motivo para limpiar el valor antiguo antes de archivar o quitar la clave maestra de columna antigua, y está relacionado con el rendimiento: al realizar una consulta en una columna cifrada, es posible que un controlador cliente habilitado para Always Encrypted intente descifrar dos valores (el antiguo y el nuevo). El controlador no sabe cuál de las dos claves maestras de columna es válida en el entorno de la aplicación, por lo que recuperará los dos valores cifrados del servidor. Si no se puede descifrar uno de los valores, porque está protegido con la clave maestra de columna que no está disponible (por ejemplo, se trata de la clave maestra de columna que se ha quitado del almacén), el controlador tratará de descifrar otro valor con la clave nueva.

Advertencia

Si quita el valor de una clave de cifrado de columnas antes de que su clave maestra de columna correspondiente se haya puesto a disposición de una aplicación, esta última no podrá descifrar la columna de la base de datos.

  1. En el Explorador de objetos, vaya a la carpeta Seguridad>Claves de Always Encrypted y encuentre la clave maestra de columna existente que quiere reemplazar.
  2. Haga clic con el botón derecho en la clave maestra de columna existente y seleccione Limpieza.
  3. Revise la lista de valores de claves de cifrado de columna que se van a quitar.
  4. Haga clic en Aceptar.

SQL Server Management Studio emitirá instrucciones ALTER COLUMN ENCRYPTION KEY (Transact-SQL) para quitar los valores cifrados de las claves de cifrado de columnas que están cifradas con la clave maestra de columna antigua.

Paso 5: eliminación de metadatos de la clave maestra de columna antigua

Si decide quitar la definición de la clave maestra de columna antigua de la base de datos, siga los pasos que se indican a continuación.

  1. En el Explorador de objetos, vaya a la carpeta Seguridad>Claves de Always Encrypted>Claves maestras de columna y encuentre la clave maestra de columna antigua que quiere quitar de la base de datos.
  2. Haga clic con el botón derecho en la clave maestra de columna antigua y seleccione Eliminar. De este modo, se generará y emitirá una instrucción DROP COLUMN MASTER KEY (Transact-SQL) para quitar los metadatos de la clave maestra de columna.
  3. Haga clic en Aceptar.

Nota:

Es muy recomendable no eliminar permanentemente la antigua clave maestra de columna después de la rotación. Debería conservarla en su almacén de claves actual o archivarla en otra ubicación segura. Si restaura la base de datos desde un archivo de copia de seguridad a un punto en el tiempo anterior a la configuración de la nueva clave maestra de columna, necesitará la clave antigua para acceder a los datos.

Permisos para la rotación de la clave maestra de columna

La rotación de una clave maestra de columna requiere los siguientes permisos de base de datos:

  • ALTER ANY COLUMN MASTER KEY: es necesario para crear los metadatos de la nueva clave maestra de columna y eliminar los metadatos de la clave maestra de columna antigua.
  • ALTER ANY COLUMN ENCRYPTION KEY: es necesario para modificar los metadatos de la clave de cifrado de columnas (agregar nuevos valores cifrados).

También necesita permisos de almacén de claves para poder acceder a las claves maestras de columna antigua y nueva en sus respectivos almacenes de claves. Para obtener información detallada sobre los permisos de almacén de claves necesarios para las operaciones de administración de claves, vaya a Creación y almacenamiento de claves maestras de columna para Always Encrypted y busque la sección correspondiente a su almacén de claves.

Rotación de claves de cifrado de columna

La rotación de una clave de cifrado de columnas implica descifrar los datos de todas las columnas cifrados con la clave que se va a rotar y volver a cifrarlos con la nueva clave de cifrado de columnas.

Nota:

La rotación de una clave de cifrado de columnas puede tardar mucho tiempo si las tablas que contienen columnas cifradas con la clave que se va a rotar son grandes. Mientras se vuelven a cifrar los datos, las aplicaciones no pueden escribir en las tablas afectadas. Por lo tanto, la organización tiene que planear muy cuidadosamente cualquier rotación de claves de cifrado de columnas. Para realizar la rotación de una clave de cifrado de columnas, use el Asistente para Always Encrypted.

  1. Para abrir el asistente para la base de datos, haga clic con el botón derecho en la base de datos, seleccione Tareasy, después, haga clic en Cifrar columnas.
  2. Revise la página Introduction y haga clic en Next.
  3. En la página Selección de columna , expanda las tablas y busque todas las columnas que quiera reemplazar que actualmente estén cifradas con la clave de cifrado de columnas antigua.
  4. Para cada columna cifrada con la clave de cifrado de columna antigua, establezca Clave de cifrado en una nueva clave generada automáticamente. Nota: También puede crear una clave de cifrado de columnas antes de ejecutar el asistente. Consulte Aprovisionamiento de claves de cifrado de columnas con el cuadro de diálogo Nueva clave de cifrado de columnas.
  5. En la página Configuración de la clave maestra , seleccione una ubicación para almacenar la clave nueva y seleccione un origen de clave maestra. Después, haga clic en Siguiente. Nota: Si usa una clave de cifrado de columna existente (no una clave generada automáticamente), no debe realizar ninguna acción en esta página.
  6. En la página Validation , elija si desea ejecutar inmediatamente el script o crear un script de PowerShell y, después, haga clic en Next.
  7. En la página Resumen, revise las opciones que ha seleccionado, haga clic en Finalizar y cierre el asistente cuando acabe.
  8. En el Explorador de objetos, vaya a la carpeta Seguridad > Siempre claves cifradas> Claves de cifrado de columna y encuentre la clave de cifrado de columnas antigua que quiere quitar de la base de datos. Haga clic con el botón derecho en la clave y seleccione Eliminar.

Permisos para la rotación de las claves de cifrado de columna

La rotación de una clave de cifrado de columnas requiere los siguientes permisos de base de datos: ALTER ANY COLUMN MASTER KEY: es obligatorio si se usa una nueva clave de cifrado de columnas generada de forma automática (también se generará una nueva clave maestra de columna y sus metadatos nuevos). ALTER ANY COLUMN ENCRYPTION KEY: es necesario para agregar metadatos a la nueva clave de cifrado de columnas.

También necesita permisos de almacén de claves para poder acceder a las claves maestras de columna de las claves de cifrado de columna antigua y nueva. Para obtener información detallada sobre los permisos de almacén de claves necesarios para las operaciones de administración de claves, vaya a Creación y almacenamiento de claves maestras de columna para Always Encrypted y busque la sección correspondiente a su almacén de claves.

Pasos siguientes

Consulte también