Administración extensible de claves con el Almacén de claves de Azure (SQL Server)

El Conector de SQL Server para el Almacén de claves de Microsoft Azure habilita el cifrado de SQL Server para aprovechar el servicio Almacén de claves de Azure como si fuera un proveedor de Administración extensible de claves (EKM) para proteger sus claves de cifrado.

Se incluye en este tema:

  • Usos de EKM

  • Paso 1: Configurar el Almacén de claves para que lo use SQL Server

  • Paso 2: Instalar el Conector de SQL Server

  • Paso 3: Configurar SQL Server para que use un proveedor de EKM para el Almacén de claves

  • Ejemplo A: Cifrado de datos transparente mediante una clave asimétrica del Almacén de claves

  • Ejemplo B: Cifrado de copias de seguridad mediante una clave asimétrica del Almacén de claves

  • Ejemplo C: Cifrado de nivel de columna mediante una clave asimétrica del Almacén de claves

Usos de EKM

Una organización puede usar el cifrado de SQL Server para proteger información confidencial. El cifrado de SQL Server incluye el Cifrado de datos transparente (TDE), el Cifrado de nivel de columna (CLE) y el Backup Encryption. En todos estos casos, los datos se cifran mediante una clave de cifrado de datos simétrica. La clave de cifrado de datos simétrica se protege aún más si se cifra con una jerarquía de claves almacenadas en SQL Server. Otra posibilidad es que la arquitectura del proveedor de EKM habilite SQL Server para proteger las claves de cifrado de datos mediante una clave asimétrica almacenada fuera de SQL Server en un proveedor criptográfico externo. Al usar la arquitectura de proveedor de EKM se agrega una capa de seguridad adicional que permite a las organizaciones separar la administración de claves y los datos.

El Conector de SQL Server para el Almacén de claves de Azure permite a SQL Server aprovechar el servicio del Almacén de claves escalable, de alto rendimiento y alta disponibilidad como proveedor de EKM para la protección de claves de cifrado. El servicio del Almacén de claves puede usarse con instalaciones de SQL Server en máquinas virtuales de Microsoft Azure y para servidores locales. El servicio del Almacén de claves también ofrece la opción de usar módulos de seguridad de hardware (HSM) muy controlados y supervisados para un mayor nivel de protección de las claves de cifrado asimétricas. Para más información sobre el Almacén de claves, vea Almacén de claves de Azure.

Arriba

En esta imagen se resume el flujo de procesos de EKM cuando usa el Almacén de claves. Los números de los pasos del proceso de la imagen no tienen por qué corresponderse con los números de los pasos de configuración que se explican después de la imagen.

SQL Server EKM con el Almacén de claves de Azure

Paso 1: Configurar el Almacén de claves para usarlo con SQL Server

Siga estos pasos para configurar un Almacén de claves para usarlo con Motor de base de datos de SQL Server para la protección de claves cifradas. Es posible que ya se esté usando un almacén en la organización. Cuando no exista un almacén, el administrador de Azure de la organización que se encargue de gestionar las claves de cifrado puede crear un almacén, generar una clave asimétrica en el almacén y autorizar SQL Server para que use la clave. Para familiarizarse con el servicio del Almacén de claves, vea Introducción al Almacén de claves de Azure y la referencia de PowerShell Cmdlets del Almacén de claves de Azure.

Nota importanteImportante

Si tiene varias suscripciones a Azure, debe usar la suscripción que contenga SQL Server.

  1. Crear un almacén: Cree un almacén siguiendo las instrucciones de la sección Creación de un Almacén de claves de Introducción al Almacén de claves de Azure. Registre el nombre del almacén. En este tema usamos ContosoKeyVault como nombre para el Almacén de claves.

  2. Genere una clave asimétrica en el almacén: La clave asimétrica en el Almacén de claves se usa para proteger las claves de cifrado de SQL Server. Solamente la parte pública de la clave asimétrica abandona el almacén; el almacén nunca exporta la parte privada. Todas las operaciones criptográficas que usan la clave asimétrica se delegan al Almacén de claves de Azure y están protegidas por la seguridad del Almacén de claves.

    Hay varias maneras de geenrar una clave asimétrica y guardarla en el almacén. Puede generar externamente una clave e importarla al almacén como archivo .pfx. O bien crear la clave directamente en el almacén usando las API del Almacén de claves.

    El Conector de SQL Server requiere que las claves asimétricas sean RSA de 2.048 bits; el nombre de la clave solo puede usar los caracteres "a-z", "A-Z", "0-9" y "-". En este documento, el nombre de la clave asimétrica es ContosoMasterKey. Reemplácelo por el nombre único que use para la clave.

    Nota de seguridadNota de seguridad

    Le recomendamos que importe la clave asimétrica para escenarios de producción porque así permite que el administrador custodie la clave en un sistema de custodia de claves. Si la clave asimétrica se crea en el almacén, no puede custodiarse porque la clave privada nunca puede salir del almacén. Las claves usadas para proteger los datos críticos deberían ser custodiadas. La pérdida de una clave asimétrica provocará que los datos sean irrecuperables permanentemente.

    Nota de seguridadNota de seguridad

    El Almacén de claves admite varias versiones de una clave con el mismo nombre. Las claves usadas por el Conector de SQL Server no deberían versionarse o distribuirse. Si el administrador quiere distribuir la clave usada para el cifrado de SQL Server, debería crear una nueva clave con un nombre diferente en el almacén y usarla para cifrar la DEK.

    Para más información sobre cómo importar una clave al Almacén de claves o crear una clave en el Almacén de claves (no recomendado para un entorno de producción) vea la sección Adición de una clave o un secreto al Almacén de claves en Introducción al Almacén de claves de Azure.

    Nota importanteImportante

    Los usuarios deben tener al menos las operaciones wrapKey y unwrapKey para el Almacén de claves.

  3. Obtenga entidades de seguridad de servicio de Azure Active Directory para usarlas con SQL Server: Cuando la organización se suscribe a un servicio de nube de Microsoft, obtiene un Azure Active Directory. Cree entidades de seguridad de servicio en Azure Active Directory para que las use SQL Server (para autenticarse en Azure Active Directory) cuando acceda al Almacén de claves.

    • Un administrador de SQL Server necesitará una entidad de servicio para acceder al almacén cuando configure SQL Server para que use cifrado.

    • Motor de base de datos de SQL Server necesitará otra entidad de servicio para acceder al almacén para desencapsular claves usadas en el cifrado de SQL Server.

    Para más información sobre cómo registrar una aplicación y generar una entidad de servicio, vea Registro de una aplicación con Azure Active Directory en Introducción al Almacén de claves de Azure. El proceso de registro devuelve un id. de aplicación (también conocido como id. de cliente) y una clave de autenticación (también conocida como secreto) para cada entidad de servicio de Azure Active Directory. Cuando se usa en la instrucción CREATE CREDENTIAL, el guión debe eliminarse a partir del id. de cliente. Registre estos datos para usarlos en estos scripts:

    • Entidad de servicio para un inicio de sesión sysadmin: CLIENTID_sysadmin_login y SECRET_sysadmin_login

    • Entidad de servicio para Motor de base de datos de SQL Server: CLIENTID_DBEngine y SECRET_DBEngine.

  4. Conceda permisos a la entidad de servicio para que acceda al Almacén de claves: Las entidades de servicio CLIENTID_sysadmin_login y CLIENTID_DBEngine requieren los permisos get, list, wrapKey y unwrapKey en el Almacén de claves. Si desea crear claves mediante SQL Server, también necesita conceder el permiso create en el Almacén de claves.

    Para más información sobre la concesión de permisos al almacén, vea la sección Autorización de la aplicación para que use la clave o el secreto en Introducción al Almacén de claves de Azure.

    Enlaces a documentación sobre el Almacén de claves de Azure

Arriba

Paso 2: Instalar el Conector de SQL Server

El administrador del equipo con SQL Server es el encargado de descargar e instalar el Conector de SQL Server. El Conector de SQL Server se puede descargar del Centro de descargas de Microsoft. Busque Conector de SQL Server para el Almacén de claves Microsoft Azure, revise los detalles, los requisitos de sistema y las instrucciones de instalación y elija descargar el Conector. Para comenzar la instalación, haga clic en Ejecutar. Lea la licencia, acéptela y continúe.

El Conector se instala de manera predeterminada en C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault. Esta ubicación puede modificarse durante el proceso de instalación. (En caso de cambiarla ajuste los scripts que aparecen más adelante).

Al completar la instalación, se instala lo siguiente en el equipo:

  • Microsoft.AzureKeyVaultService.EKM.dll: Este es el DLL del proveedor de EKM criptográfico que debe registrarse con SQL Server mediante la instrucción CREATE CRYPTOGRAPHIC PROVIDER.

  • Conector de SQL Server para el Almacén de claves de Azure: Este es un servicio de Windows que permite al proveedor de EKM criptográfico comunicarse con el Almacén de claves.

Al instalar el Conector de SQL Server, también puede elegir descargar scripts de ejemplo para el cifrado de SQL Server.

Arriba

Paso 3: Configurar SQL Server para que use un proveedor de EKM para el Almacén de claves

Permisos

Para completar el proceso completo, necesita el permiso CONTROL SERVER o pertenecer al rol de servidor fijo sysadmin. Para cada acción específica se requieren estos permisos:

  • Para crear un proveedor criptográfico, debe tener el permiso CONTROL SERVER o pertenecer al rol de servidor fijo sysadmin.

  • Para cambiar una opción de configuración y ejecutar la instrucción RECONFIGURE, debe tener el permiso ALTER SETTINGS de nivel de servidor. Los roles fijos de servidor sysadmin y serveradmin tienen el permiso ALTER SETTINGS de forma implícita.

  • Para crear una credencial, debe tener el permiso ALTER ANY CREDENTIAL.

  • Para agregar una credencial a un inicio de sesión, debe tener el permiso ALTER ANY LOGIN.

  • Para crear una clave asimétrica, debe tener el permiso CREATE ASYMMETRIC KEY.

Icono de flecha usado con el vínculo Volver al principio[Top]

Para configurar SQL Server para que use un proveedor criptográfico

  1. Configure el Motor de base de datos para que use EKM y registre (cree) el proveedor criptográfico con SQL Server.

    -- Enable advanced options.
    USE master;
    GO
    
    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    -- Enable EKM provider
    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO 
    
  2. Configure una credencial de SQL Server para un inicio de sesión del administrador de SQL Server para que use el Almacén de claves para la configuración y la administración de los escenarios de cifrado de SQL Server.

    Nota importanteImportante

    El argumento IDENTITY de CREATE CREDENTIAL requiere el nombre del Almacén de claves. El argumento SECRET de CREATE CREDENTIAL requiere el <id. de cliente> (sin guiones) y el <secreto> escritos juntos sin espacio entre ellos.

    En este ejemplo, el id. de cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) aparece sin guiones y se ha escrito como la cadena EF5C8E094D2A4A769998D93440D8115D, y el secreto está representado por la cadena SECRET_sysadmin_login.

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    Para ver un ejemplo de cómo usar variables para los argumentos CREATE CREDENTIAL y cómo eliminar mediante programación los guiones del id. de cliente, vea CREATE CREDENTIAL (Transact-SQL).

  3. Si importó una clave asimétrica tal y como se describió anteriormente en el paso 1, en la sección 3, abra la clave proporcionando su nombre de clave en el siguiente ejemplo.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    Aunque no se recomienda usarla para producción (porque la clave no puede exportarse), puede crear una clave asimétrica directamente en el almacén desde SQL Server. Si antes no importó una clave, cree una clave asimétrica en el Almacén de claves para prueba mediante este script. Ejecute el script, usando un inicio de sesión suministrado con la credencial sysadmin_ekm_cred.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

Para obtener más información, vea:

Icono de flecha usado con el vínculo Volver al principio[Top]

Ejemplos

Ejemplo A: cifrado de datos transparente mediante una clave asimétrica del Almacén de claves

Tras completar los pasos anteriores, cree una credencial y un inicio de sesión, cree una clave de cifrado de base de datos protegida por la clave asimétrica en el Almacén de claves. Use la clave de cifrado de base de datos para cifrar una base de datos con TDE.

Para cifrar una base de datos, se requiere el permiso CONTROL en la base de datos.

Para habilitar TDE usando EKM y el Almacén de claves

  1. Cree una credencial de SQL Server para que Motor de base de datos la use al acceder al EKM del Almacén de claves durante la carga de la base de datos.

    Nota importanteImportante

    El argumento IDENTITY de CREATE CREDENTIAL requiere el nombre del Almacén de claves. El argumento SECRET de CREATE CREDENTIAL requiere el <id. de cliente> (sin guiones) y el <secreto> escritos juntos sin espacio entre ellos.

    En el siguiente ejemplo, se han quitado los guiones del id. de cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) y se ha escrito como la cadena EF5C8E094D2A4A769998D93440D8115D, y el secreto está representado por la cadena SECRET_DBEngine.

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. Cree un inicio de sesión de SQL Server para que lo use Motor de base de datos para TDE, y agréguele la credencial. En este ejemplo se usa la clave asimétrica CONTOSO_KEY almacenada en el Almacén de claves, que se importó o se creó anteriormente para la base de datos maestra, tal y como se describe en el paso 3, en la sección 3 anterior.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key 
    -- for the Database engine to use when it loads a database 
    -- encrypted by TDE.
    CREATE LOGIN TDE_Login 
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO 
    
    -- Alter the TDE Login to add the credential for use by the 
    -- Database Engine to access the key vault
    ALTER LOGIN TDE_Login 
    ADD CREDENTIAL Azure_EKM_TDE_cred ;
    GO
    
  3. Cree la clave de cifrado de la base de datos (DEK) que se usará para TDE. La DEK puede crearse usando cualquier algoritmo o longitud de clave compatibles con SQL Server. La DEK estará protegida por la clave asimétrica en el Almacén de claves.

    En este ejemplo se usa la clave asimétrica CONTOSO_KEY almacenada en el Almacén de claves, que se importó o se creó anteriormente, tal y como se describe en el paso 3 de la sección 3 anterior.

    USE ContosoDatabase;
    GO
    
    
    
    
    
    
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase 
    SET ENCRYPTION ON ;
    GO
    

    Para obtener más información, vea:

Arriba

Ejemplo B: cifrado de copias de seguridad mediante una clave asimétrica del Almacén de claves

Las copias de seguridad cifradas se admiten a partir de . En este ejemplo se crea y se restaura una copia de seguridad de una clave de cifrado de datos protegida por la clave asimétrica en el Almacén de claves.

USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]' 
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, 
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO

Código de restauración de ejemplo.

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

Para más información sobre las opciones de copia de seguridad, vea BACKUP (Transact-SQL).

Ejemplo C: cifrado de nivel de columna mediante una clave asimétrica del Almacén de claves

En este ejemplo se crea una clave simétrica protegida por la clave asimétrica en el Almacén de claves. La clave simétrica se usa para cifrar datos en la base de datos.

En este ejemplo se usa la clave asimétrica CONTOSO_KEY almacenada en el Almacén de claves, que se importó o se creó anteriormente, tal y como se describe en el paso 3 de la sección 3 anterior. Si quiere usar esta clave asimétrica en la base de datos de ContosoDatabase, debe ejecutar la instrucción CREATE ASYMMETRIC KEY de nuevo y así poder proporcionar una referencia a la clave en la base de datos ContosoDatabase.

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
    WITH ALGORITHM=AES_256
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY 
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

Vea también

Referencia

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)

CREATE CREDENTIAL (Transact-SQL)

CREATE ASYMMETRIC KEY (Transact-SQL)

CREATE SYMMETRIC KEY (Transact-SQL)

Conceptos

Administración extensible de claves (EKM)

Habilitar TDE con EKM

Otros recursos

Backup Encryption

Create an Encrypted Backup