Tutorial: Introducción al uso de Always Encrypted con enclaves de Intel SGX en Azure SQL Database
Se aplica a: Azure SQL Database
En este tutorial se explica cómo empezar a trabajar con Always Encrypted con enclaves seguros en Azure SQL Database. Usará enclaves de Intel Software Guard Extensions (Intel SGX). En él encontrará:
- Cómo crear un entorno para probar y evaluar Always Encrypted con enclaves de Intel SGX.
- Cómo cifrar datos en contexto y emitir consultas confidenciales enriquecidas en columnas cifradas mediante SQL Server Management Studio (SSMS).
Prerrequisitos
- Una suscripción de Azure activa. En caso de no tener ninguna, cree una cuenta gratuita. Debe ser miembro del rol Colaborador o del rol Propietario de la suscripción para poder crear recursos y configurar una directiva de atestación.
- Aunque es opcional, se recomienda para almacenar la clave maestra de columna para Always Encrypted: un almacén de claves en Azure Key Vault. Para información sobre cómo crear un almacén de claves, consulte Inicio rápido: Creación de un almacén de claves mediante Azure Portal.
- Si el almacén de claves usa el modelo de permisos de directiva de acceso, asegúrese de que tiene los siguientes permisos de clave en el almacén de claves:
get
,list
,create
,unwrap key
,wrap key
,verify
ysign
. Para más información, consulte Asignación de una directiva de acceso de Key Vault. - Si usa el modelo de permisos de control de acceso basado en rol (RBAC) de Azure, asegúrese de que es miembro del rol Agente criptográfico de Key Vault en el almacén de claves. Consulte Acceso a las claves, los certificados y los secretos de Key Vault con un control de acceso basado en rol de Azure.
- Si el almacén de claves usa el modelo de permisos de directiva de acceso, asegúrese de que tiene los siguientes permisos de clave en el almacén de claves:
- La versión más reciente de SQL Server Management Studio (SSMS).
Requisitos de PowerShell
Nota:
Los requisitos previos enumerados en esta sección solo se aplican si decide usar PowerShell para algunos de los pasos de este tutorial. Si tiene previsto usar Azure Portal en su lugar, puede omitir esta sección.
Se necesita el módulo Az de PowerShell versión 9.3.0 o posterior. Para detalles sobre cómo instalar el módulo Az PowerShell, consulte Instalación del módulo Azure Az PowerShell. Para determinar la versión del módulo Az de PowerShell que está instalado en la máquina, ejecute el siguiente comando desde PowerShell.
Get-InstalledModule -Name Az
Paso 1: Creación y configuración de un servidor y una base de datos de la serie DC
En este paso, creará un nuevo servidor lógico y una nueva base de datos de Azure SQL Database con el hardware de la serie DC, requerido para Always Encrypted con enclaves seguros. Para obtener más información, vea Serie DC.
Vaya a la página Seleccione una opción de implementación de SQL.
Si aún no ha iniciado sesión en Azure Portal, hágalo cuando se le solicite.
En Bases de datos SQL, deje Tipo de recurso establecido en Base de datos única y seleccione Crear.
En la pestaña Básico del formulario Create SQL Database, en Detalles del proyecto, seleccione la suscripción de Azure correcta.
En Grupo de recursos, seleccione Crear nuevo, especifique un nombre válido para el grupo de recursos y seleccione Aceptar.
En Nombre de la base de datos, escriba ContosoHR.
En Servidor, seleccione Crear nuevo y rellene el formulario Nuevo servidor con los valores siguientes:
- Nombre del servidor: Escriba miServidorSql y agregue algunos caracteres para que el nombre sea único. No se puede proporcionar un nombre de servidor exacto para usar porque los nombres de los servidores deben ser globalmente únicos para todos los servidores en Azure, no solo únicos dentro de una suscripción. Por lo tanto, escriba algo como mysqlserver135; el portal le permitirá saber si está o no disponible.
- Ubicación: Seleccione una ubicación en la lista desplegable.
Importante
Debe seleccionar una ubicación (una región de Azure) que admita el hardware de la serie DC y Microsoft Azure Attestation. Para obtener la lista de regiones que admiten la serie DC, consulte Disponibilidad de la serie DC. Esta es la disponibilidad regional de Microsoft Azure Attestation.
- Método de autenticación: seleccione Usar autenticación de SQL.
- Inicio de sesión del administrador del servidor: escriba un nombre de inicio de sesión de administrador, por ejemplo,azureuser.
- Contraseña: escriba una contraseña que cumpla los requisitos y escríbala de nuevo en el campo Confirmar contraseña.
- Seleccione Aceptar.
Deje ¿Quiere usar un grupo elástico de SQL? establecido en No.
En Proceso y almacenamiento, seleccione Configurar base de datos y elija Cambiar configuración.
Seleccione la configuración de hardware Serie DC y seleccione Aceptar.
Seleccione Aplicar.
De nuevo en la pestaña Aspectos básicos, compruebe que Proceso y almacenamiento está establecido en Uso general, DC, 2 núcleos virtuales y 32 GB de almacenamiento.
Para Redundancia de almacenamiento de Backup, seleccione Almacenamiento de copia de seguridad con redundancia local.
Seleccione Siguiente: Redes en la parte inferior de la página.
En la pestaña Redes, en Método de conectividad, seleccione Punto de conexión público.
En Reglas de firewall, establezca Agregar dirección IP del cliente actual en Sí. Deje la opción Permitir que los servicios y recursos de Azure accedan a este grupo de servidores establecida en No.
Para Directiva de conexión, deje Directiva de conexión en Predeterminado: usa la directiva Redirigir para todas las conexiones de cliente que se originan dentro de Azure y Proxy para todas las conexiones de cliente que se originan fuera de Azure.
En Conexiones cifradas, deje la opción Versión de TLS mínima establecida en TLS 1.2.
En la parte inferior de la página, seleccione Revisar y crear.
En la página Revisar y crear, después de revisar, seleccione Crear.
Paso 2: Configuración de un proveedor de atestación
En este paso, creará y configurará un proveedor de atestación en Microsoft Azure Attestation. Esto es necesario para la atestación del enclave seguro que utiliza la base de datos.
Vaya a la página Create attestation provider (Crear proveedor de atestación).
En la página Create attestation provider (Crear proveedor de atestación), proporcione las siguientes entradas:
- Suscripción: elija la misma suscripción en la que creó el servidor lógico de Azure SQL.
- Grupo de recursos: elija el mismo grupo de recursos en el que creó el servidor lógico de Azure SQL.
- Nombre: escriba myattestprovider y agregue algunos caracteres para que el nombre sea único. No podemos proporcionar un nombre de proveedor de atestación exacto para usar porque los nombres deben ser globalmente únicos. Por lo tanto, escriba algo como myattestprovider12345; el portal le permitirá saber si está o no disponible.
- Ubicación: elija la misma ubicación que el servidor lógico de Azure SQL.
- Archivo de firmante de directivas de atestación: deje este campo vacío, ya que configurará una directiva sin firmar.
Después de proporcionar las entradas necesarias, seleccione Revisar y crear.
Seleccione Crear.
Cuando cree el proveedor de atestación, seleccione Ir al recurso.
En la pestaña Información general del proveedor de atestación, copie el valor de la propiedad Attest URI (URI de atestación) en el Portapapeles y guárdelo en un archivo. Esta es la dirección URL de atestación, que necesitará en pasos posteriores.
Seleccione Directiva en el menú de recursos del lado izquierdo de la ventana o en el panel inferior.
Establezca Tipo de atestaciónen SGX-IntelSDK.
En el menú superior, seleccione Configurar.
Establezca Formato de directiva en Texto. Deje la opción Opciones de directiva establecida en Enter policy (Escribir directiva).
En el campo Policy text (Texto de la directiva), reemplace la directiva predeterminada por la directiva siguiente. Para más información sobre la directiva siguiente, vea Creación y configuración de un proveedor de atestación.
version= 1.0;
authorizationrules
{
[ type=="x-ms-sgx-is-debuggable", value==false ]
&& [ type=="x-ms-sgx-product-id", value==4639 ]
&& [ type=="x-ms-sgx-svn", value>= 2 ]
&& [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"]
=> permit();
};
Seleccione Guardar.
Seleccione Actualizar en el menú superior para ver la directiva configurada.
Paso 3: Relleno de la base de datos
En este paso, creará una tabla y la rellenará con algunos datos que más adelante cifrará y consultará.
Abra SSMS y conéctese a la base de datos ContosoHR en el servidor lógico de Azure SQL que creó sin Always Encrypted habilitado en la conexión de base de datos.
En el cuadro de diálogo Conectar con el servidor, especifique el nombre completo del servidor (por ejemplo, myserver135.database.windows.net) y escriba el nombre de usuario del administrador y la contraseña que especificó al crear el servidor.
Seleccione Opciones>> y elija la pestaña Propiedades de conexión. Asegúrese de seleccionar la base de datos ContosoHR (no la base de datos
master
predeterminada).Seleccione la pestaña Always Encrypted.
Asegúrese de que la casilla Habilitar Always Encrypted (cifrado de columna)no esté activada.
Seleccione Conectar.
Cree una tabla denominada Empleados.
CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY]; GO
Agregue a esta tabla algunos registros de empleados.
INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
Paso 4: Aprovisionar claves habilitadas para el enclave
En este paso, creará una clave de columna maestra y una clave de cifrado de columna que admiten los cálculos de enclave.
Con la instancia de SSMS del paso anterior, en el Explorador de objetos, expanda la base de datos y vaya a Seguridad>Claves de Always Encrypted.
Aprovisione una nueva clave maestra de columna habilitada para el enclave:
- Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna… .
- Escriba un nombre para la nueva clave maestra de columna: CMK1.
- Compruebe que la opción Permitir cálculos de enclave está seleccionada. (Se selecciona de forma predeterminada si un enclave seguro está habilitado para la base de datos. Debe habilitarse, ya que la base de datos usa la configuración de hardware de la serie DC).
- Seleccione Azure Key Vault (recomendado) o Almacén de certificados de Windows (Usuario actual o Máquina local).
- Si selecciona Azure Key Vault, inicie sesión en Azure, seleccione una suscripción de Azure que contenga un almacén de claves que quiera usar y seleccione el almacén de claves. Seleccione Generar clave para crear una nueva clave.
- Si selecciona Almacén de certificados de Windows, seleccione el botón Generar certificado para crear un nuevo certificado.
- Seleccione Aceptar.
Cree una nueva clave de cifrado de columnas habilitada para el enclave:
- Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna.
- Escriba un nombre para la nueva clave de cifrado de columnas: CEK1.
- En la lista desplegable Clave maestra de columna, seleccione la clave maestra de columna que creó en los pasos anteriores.
- Seleccione Aceptar.
Paso 5: Cifrar algunas columnas en contexto
En este paso, va a cifrar los datos almacenados en las columnas SSN y Salario dentro del enclave del lado servidor y después podrá probar una consulta SELECT de los datos.
Abra una nueva instancia de SSMS y conéctese a la base de datos con Always Encrypted habilitado para la conexión de base de datos.
Inicie una nueva instancia de SSMS.
En el cuadro de diálogo Conectar con el servidor, especifique el nombre completo del servidor (por ejemplo, myserver135.database.windows.net) y escriba el nombre de usuario del administrador y la contraseña que especificó al crear el servidor.
Seleccione Opciones>> y elija la pestaña Propiedades de conexión. Asegúrese de seleccionar la base de datos ContosoHR (no la base de datos
master
predeterminada).Seleccione la pestaña Always Encrypted.
Active la casilla Habilitar Always Encrypted (cifrado de columna).
Seleccione Habilitar enclaves seguros. (Este paso se aplica a SSMS 19 o posterior).
Establezca Protocolo en Microsoft Azure Attestation. (Este paso se aplica a SSMS 19 o posterior).
Especifique la dirección URL de atestación de enclave que ha obtenido siguiendo los pasos descritos en Paso 2: Configuración de un proveedor de atestación. Vea la siguiente captura de pantalla.
Seleccione Conectar.
Si se le pide que habilite la parametrización para las consultas Always Encrypted, haga clic en Habilitar.
Con la misma instancia de SSMS (con Always Encrypted habilitado), abra una nueva ventana de consulta y cifre las columnas SSN y Salario mediante la ejecución de las instrucciones siguientes.
ALTER TABLE [HR].[Employees] ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Nota:
Observe la instrucción ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE para borrar la memoria caché del plan de consulta para la base de datos en el script anterior. Después de modificar la tabla, deberá borrar los planes de todos los lotes y procedimientos almacenados que tengan acceso a la tabla con el fin de actualizar la información de cifrado de los parámetros.
Para comprobar que las columnas SSN y Salario ahora están cifradas, abra una nueva ventana de consulta en la instancia de SSMS sin Always Encrypted habilitado para la conexión de base de datos y ejecute la siguiente instrucción. La ventana de consulta debe devolver valores cifrados de las columnas SSN y Salario. Si ejecuta la misma consulta mediante la instancia SSMS con Always Encrypted habilitado, verá los datos descifrados.
SELECT * FROM [HR].[Employees];
Paso 6: Ejecutar consultas completas sobre columnas cifradas
Puede ejecutar consultas completas sobre columnas cifradas. Se realizará algún procesamiento de consulta dentro del enclave del lado del servidor.
En la instancia de SSMS con Always Encrypted habilitado, asegúrese de que también está habilitada la parametrización para Always Encrypted.
- Seleccione Herramientas en el menú principal de SSMS.
- Seleccione Opciones... .
- Vaya a Ejecución de consulta>SQL Server>Avanzadas.
- Asegúrese de que la opción Habilitar parametrización para Always Encrypted esté activada.
- Seleccione Aceptar.
Abra una nueva ventana de consulta y pegue y ejecute la siguiente consulta. La consulta debe devolver los valores de texto no cifrado y las filas que cumplan los criterios de búsqueda especificados.
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Pruebe de nuevo la misma consulta en la instancia de SSMS que no tiene habilitado Always Encrypted. Debe producirse un error.
Pasos siguientes
Después de completar este tutorial, puede ir a uno de los siguientes tutoriales:
- Tutorial: Desarrollo de una aplicación de .NET mediante Always Encrypted con enclaves seguros
- Tutorial: Desarrollo de una aplicación de .NET Framework mediante Always Encrypted con enclaves seguros
- Tutorial: Creación y uso de índices en columnas basadas en enclave mediante cifrado aleatorio