Compartir a través de


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

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.

  1. Vaya a la página Seleccione una opción de implementación de SQL.

  2. Si aún no ha iniciado sesión en Azure Portal, hágalo cuando se le solicite.

  3. En Bases de datos SQL, deje Tipo de recurso establecido en Base de datos única y seleccione Crear.

    Captura de pantalla de Azure Portal, en la que se muestra la opción de implementación Add to Azure SQL (Agregar a Azure SQL).

  4. En la pestaña Básico del formulario Create SQL Database, en Detalles del proyecto, seleccione la suscripción de Azure correcta.

  5. En Grupo de recursos, seleccione Crear nuevo, especifique un nombre válido para el grupo de recursos y seleccione Aceptar.

  6. En Nombre de la base de datos, escriba ContosoHR.

  7. 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.
  8. Deje ¿Quiere usar un grupo elástico de SQL? establecido en No.

  9. En Proceso y almacenamiento, seleccione Configurar base de datos y elija Cambiar configuración.

    Captura de pantalla de configuración de hardware de Azure Portal y dónde configurar la base de datos.

  10. Seleccione la configuración de hardware Serie DC y seleccione Aceptar.

    Captura de pantalla de Azure Portal, en la que se muestra la configuración de la base de datos de la serie DC.

  11. Seleccione Aplicar.

  12. 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.

  13. Para Redundancia de almacenamiento de Backup, seleccione Almacenamiento de copia de seguridad con redundancia local.

  14. Seleccione Siguiente: Redes en la parte inferior de la página.

    Captura de pantalla de Azure Portal, en la que se muestra la configuración de la base de datos de la serie DC: datos básicos.

  15. En la pestaña Redes, en Método de conectividad, seleccione Punto de conexión público.

  16. En Reglas de firewall, establezca Agregar dirección IP del cliente actual en . Deje la opción Permitir que los servicios y recursos de Azure accedan a este grupo de servidores establecida en No.

  17. 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.

  18. En Conexiones cifradas, deje la opción Versión de TLS mínima establecida en TLS 1.2.

  19. En la parte inferior de la página, seleccione Revisar y crear.

    Captura de pantalla de Crear base de datos SQL de Azure Portal, pestaña Redes.

  20. 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.

  1. Vaya a la página Create attestation provider (Crear proveedor de atestación).

  2. 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.
  3. Después de proporcionar las entradas necesarias, seleccione Revisar y crear.

    Captura de pantalla del menú Crear proveedor de atestación Azure Portal.

  4. Seleccione Crear.

  5. Cuando cree el proveedor de atestación, seleccione Ir al recurso.

  6. 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.

    Captura de pantalla de la dirección URL de atestación en Azure Portal.

  7. Seleccione Directiva en el menú de recursos del lado izquierdo de la ventana o en el panel inferior.

  8. Establezca Tipo de atestaciónen SGX-IntelSDK.

  9. En el menú superior, seleccione Configurar.

    Captura de pantalla de la configuración de la directiva de atestación en Azure Portal.

  10. Establezca Formato de directiva en Texto. Deje la opción Opciones de directiva establecida en Enter policy (Escribir directiva).

  11. 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();
};

  1. Seleccione Guardar.

    Captura de pantalla de la edición de una directiva de atestación en Azure Portal.

  2. 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á.

  1. 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.

    1. 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.

    2. 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).

    3. Seleccione la pestaña Always Encrypted.

    4. Asegúrese de que la casilla Habilitar Always Encrypted (cifrado de columna)no esté activada.

      Captura de pantalla de Conexión al servidor mediante SSMS sin Always Encrypted habilitado.

    5. Seleccione Conectar.

  2. 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
    
  3. 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.

  1. 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.

  2. Aprovisione una nueva clave maestra de columna habilitada para el enclave:

    1. Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna… .
    2. Escriba un nombre para la nueva clave maestra de columna: CMK1.
    3. 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).
    4. 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. Captura de pantalla de la selección de la opción Permitir cálculos de enclave en SSMS al crear una nueva clave maestra de columna.
    5. Seleccione Aceptar.
  3. Cree una nueva clave de cifrado de columnas habilitada para el enclave:

    1. Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna.
    2. Escriba un nombre para la nueva clave de cifrado de columnas: CEK1.
    3. En la lista desplegable Clave maestra de columna, seleccione la clave maestra de columna que creó en los pasos anteriores.
    4. 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.

  1. 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.

    1. Inicie una nueva instancia de SSMS.

    2. 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.

    3. 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).

    4. Seleccione la pestaña Always Encrypted.

    5. Active la casilla Habilitar Always Encrypted (cifrado de columna).

    6. Seleccione Habilitar enclaves seguros. (Este paso se aplica a SSMS 19 o posterior).

    7. Establezca Protocolo en Microsoft Azure Attestation. (Este paso se aplica a SSMS 19 o posterior).

    8. 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.

      Captura de pantalla del cuadro de diálogo Conectarse al servidor de SSMS, pestaña Always Encrypted, con la atestación habilitada.

    9. Seleccione Conectar.

    10. Si se le pide que habilite la parametrización para las consultas Always Encrypted, haga clic en Habilitar.

  2. 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.

  3. 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.

  1. En la instancia de SSMS con Always Encrypted habilitado, asegúrese de que también está habilitada la parametrización para Always Encrypted.

    1. Seleccione Herramientas en el menú principal de SSMS.
    2. Seleccione Opciones... .
    3. Vaya a Ejecución de consulta>SQL Server>Avanzadas.
    4. Asegúrese de que la opción Habilitar parametrización para Always Encrypted esté activada.
    5. Seleccione Aceptar.
  2. 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;
    
  3. 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:

Vea también