Administración extensible de claves con Azure Key Vault (SQL Server)

El Conector de SQL Server para Microsoft Azure Key Vault permite que el cifrado de SQL Server aproveche el servicio Azure Key Vault como proveedor de administración extensible de claves (EKM) para proteger sus claves de cifrado.

Este tema incluye:

Usos de EKM

Una organización puede usar SQL Server cifrado para proteger los datos confidenciales. SQL Server cifrado incluye cifrado de datos transparente (TDE),cifrado de nivel de columna (CLE) y cifrado de copia de seguridad. En todos estos casos, los datos se cifran con una clave de cifrado de datos simétrica. La clave de cifrado de datos simétrica se protege, además, cifrándose con una jerarquía de claves almacenadas en SQL Server. Como alternativa, la arquitectura del proveedor EKM permite SQL Server proteger las claves de cifrado de datos mediante una clave asimétrica almacenada fuera de SQL Server en un proveedor criptográfico externo. El uso de la arquitectura de proveedor de EKM agrega un nivel de seguridad adicional y permite a las organizaciones separar la administración de claves y datos.

El conector de SQL Server para Azure Key Vault permite SQL Server aprovechar el servicio escalable, de alto rendimiento y de almacén de claves de alta disponibilidad como proveedor EKM para la protección de claves de cifrado. El servicio key vault se puede usar con instalaciones de SQL Server en Microsoft Azure Virtual Machines y para servidores locales. El servicio Almacén de claves también permite usar módulos de seguridad de hardware (HSM) supervisados y controlados estrechamente. Así, se obtiene un mayor grado de protección para las claves de cifrado asimétricas. Para obtener más información sobre el Almacén de claves, consulte el tema sobre el Almacén de claves de Azure.

En la siguiente imagen se resume el flujo de procesos de EKM usando el almacén de claves. Los números de pasos del proceso de la imagen no de proceso de la imagen no se ofrecen con el fin de que coincidan con los números de los pasos de configuración que siguen a la imagen.

SQL Server EKM mediante Azure Key Vault

Paso 1: Configuración del almacén de claves para su uso con SQL Server

Siga estos pasos para configurar un almacén de claves para usarlo con el motor de base de datos de SQL Server para la protección de claves de cifrado. Puede que la organización ya use un almacén. Cuando no existe un almacén, el administrador de Azure de su organización designado para administrar las claves de cifrado puede crear un almacén, generar una clave asimétrica en el almacén y, a continuación, autorizar a SQL Server usar la clave. Para familiarizarse con la revisión del servicio de almacén de claves, consulte Introducción a Azure Key Vault y la referencia sobre cmdlets de Azure Key Vault de PowerShell.

Importante

Si tiene varias suscripciones de Azure, debe usar la suscripción que contiene 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 a Azure Key Vault. Registre el nombre del almacén. En este tema, se usa ContosoKeyVault como nombre del Almacén de claves.

  2. Genere una clave asimétrica en el almacén: La clave asimétrica del almacén de claves se usa para proteger SQL Server claves de cifrado. La parte pública de la clave asimétrica es la única que sale del almacén: el almacén no exporta nunca la parte privada. Todas las operaciones de cifrado en las que se usa 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 distintas de generar una clave asimétrica y almacenarla en el almacén. Puede crear una clave de forma externa e importarla al almacén como un archivo.pfx. También puede crear la clave directamente en el almacén mediante las API de almacén de claves.

    El conector de SQL Server requiere que las claves asimétricas sean RSA de 2048 bits y el nombre de 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. Reemplace este nombre por el nombre único que utilice para la clave.

    Importante

    En los escenarios de producción, le recomendamos encarecidamente que importe la clave asimétrica, porque permite al administrador custodiar la clave en un sistema de custodia de clave. Si la clave asimétrica se crea en el almacén, no se puede custodiar, porque la clave privada no puede salir nunca del almacén. Las claves que se usen para proteger datos críticos se deben custodiar. Si se pierde una clave asimétrica, los datos no podrán recuperarse nunca más.

    Importante

    El Almacén de claves admite varias versiones de la clave que tengan el mismo nombre. Las claves que va a usar SQL Server Connector no deben tener versiones ni inscribirse. Si el administrador quiere revertir la clave usada para SQL Server cifrado, se debe crear una nueva clave con un nombre diferente en el almacén y usarse para cifrar la DEK.

    Para más información sobre cómo importar una clave en el Almacén de claves o crear una clave en el Almacén de claves (no recomendado en entornos de producción), consulte la sección sobre cómo agregar una clave o un secreto al Almacén de claves de la introducción al Almacén de claves de Azure.

  3. Obtener entidades de servicio de Azure Active Directory para usar con SQL Server: Cuando la organización se suscribe a un servicio en la nube de Microsoft, obtiene un Azure Active Directory. Cree entidades de servicio en Azure Active Directory para SQL Server usar (para autenticarse en Azure Active Directory) al acceder al almacén de claves.

    • Un administrador de SQL Server necesitará una entidad de servicio para acceder al almacén mientras configura SQL Server para usar el cifrado.

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

    Para más información sobre cómo registrar una aplicación y generar una entidad de servicio, consulte la sección sobre cómo registrar una aplicación con Azure Active Directory en la introducción a Azure Key Vault. El proceso de registro devuelve un Id. de aplicación (también llamado Id. de cliente) y una clave de autenticación (también llamada secreto) para cada entidad de serviciode Azure Active Directory. Cuando se usa en la CREATE CREDENTIAL instrucción , el guión debe quitarse del identificador de cliente. Regístrelos para usarlos en los siguientes scripts:

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

    • Entidad de servicio del motor de base de datos de SQL Server: CLIENTID_DBEngine y SECRET_DBEngine.

  4. Conceder permiso para que las entidades de servicio accedan al Key Vault: tanto los CLIENTID_sysadmin_login como CLIENTID_DBEngineService entidades de seguridad requieren los permisos get, list, wrapKey y unwrapKey en el almacén de claves. Si tiene previsto crear claves a través de SQL Server también debe conceder el permiso de creación en el almacén de claves.

    Importante

    Los usuarios deben habilitar, al menos, las operaciones wrapKey y unwrapKey para el almacén de claves.

    Para más información sobre cómo conceder permisos en el almacén, consulte la sección sobre cómo autorizar a la aplicación para que use la clave o el secreto de la introducción a Azure Key Vault.

    Vínculos a documentación del Almacén de claves de Azure

Paso 2: Instalar el conector de SQL Server

El administrador del equipo SQL Server descarga e instala el conector de SQL Server. El conector de SQL Server está disponible como descarga desde el Centro de descarga de Microsoft. Busque el conector de SQL Server para Microsoft Azure Key Vault, revise los detalles, los requisitos del sistema y las instrucciones de instalación y elija la opción de descargar el conector e iniciar la instalación con Ejecutar. Revise la licencia, acéptela y continúe.

De forma predeterminada, el conector se instala en C:\Archivos de programa\Conector de SQL Server para Microsoft Azure Key Vault. Esta ubicación se puede cambiar durante la instalación. (Si la cambia, ajuste los siguientes scripts).

Al finalizar la instalación, estarán instalados en el equipo:

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

  • Conector de SQL Server de Azure Key Vault: es un servicio de Windows que permite al proveedor de servicios criptográficos EKM comunicarse con Key Vault.

La instalación del conector de SQL Server también le permite descargar, si quiere, los scripts de muestra del cifrado de SQL Server.

Paso 3: configuración de SQL Server para usar un proveedor EKM para el Almacén de claves

Permisos

Para completar este proceso, son necesarios el permiso CONTROL SERVER o la pertenencia al rol fijo de servidor sysadmin . Los siguientes permisos son necesarios para realizar acciones concretas:

  • Para crear un proveedor de servicios criptográficos, son necesarios el permiso CONTROL SERVER o la pertenencia al rol fijo de servidor 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, es necesario el permiso ALTER ANY CREDENTIAL.

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

  • Para crear una clave asimétrica, es necesario el permiso CREATE ASYMMETRIC KEY.

Para configurar SQL Server para usar un proveedor de servicios criptográficos

  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 de administrador de SQL Server para usar el almacén de claves con el fin de configurar y administrar escenarios de cifrado SQL Server.

    Importante

    El argumento IDENTITY de CREATE CREDENTIAL requiere el nombre del almacén de claves. El argumento SECRET de CREATE CREDENTIAL requiere que el <identificador> de cliente (sin guiones) y <secret> se pasen juntos sin un espacio entre ellos.

    En el ejemplo siguiente, el identificador de cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) se quita de los guiones y se escribe como la cadena EF5C8E094D2A4A769998D93440D8115D y el secreto se representa mediante 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 obtener un ejemplo de uso de variables para los CREATE CREDENTIAL argumentos y quitar mediante programación los guiones del identificador de cliente, vea CREATE CREDENTIAL (Transact-SQL).

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

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

    Aunque no se recomienda para producción (porque no se puede exportar la clave), es posible crear una clave asimétrica directamente en el almacén desde SQL Server. Si no importó una clave anteriormente, cree una clave asimétrica en el Almacén de claves para realizar pruebas con el siguiente script. Ejecute el script con un inicio de sesión aprovisionado con la credencial sysadmin_ekm_cred .

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

Sugerencia

Los usuarios que reciben el error No se puede exportar la clave pública del proveedor. Código de error del proveedor: 2053. debe comprobar sus permisos get, list, wrapKey y unwrapKey en el almacén de claves.

Para obtener más información, vea lo siguiente:

Ejemplos

Ejemplo A: cifrado de datos transparente con una clave asimétrica desde el Almacén de claves

Después de completar los pasos anteriores, cree una credencial y un inicio de sesión y 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 cifrado de datos transparente (TDE).

Para cifrar una base de datos, es necesario tener el permiso CONTROL en la base de datos.

Para habilitar TDE con EKM y el Almacén de claves
  1. Cree una credencial de SQL Server para que la use el motor de base de datos al acceder al almacén de claves EKM durante la carga de la base de datos.

    Importante

    El argumento IDENTITY de requiere el nombre del almacén de CREATE CREDENTIAL claves. El argumento SECRET de CREATE CREDENTIAL requiere que el <identificador> de cliente (sin guiones) y <secret> se pasen juntos sin un espacio entre ellos.

    En el ejemplo siguiente, el Id. de cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) se deja sin guiones y se introduce como la cadena EF5C8E094D2A4A769998D93440D8115D . El secreto se representa con 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 que usará el motor de base de datos para TDE y agréguele la credencial. En este ejemplo, se utiliza 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, como se describe en el paso 3, sección 3 , más arriba.

    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 base de datos (DEK) que se utilizará para TDE. La DEK puede crearse con cualquier algoritmo compatible con SQL Server y cualquier longitud de clave. La DEK estará protegida por la clave asimétrica en el Almacén de claves.

    En este ejemplo, se utiliza la clave asimétrica CONTOSO_KEY almacenada en el Almacén de claves, que se importó o se creó anteriormente, como se describe en el paso 3, sección 3 , más arriba.

    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 lo siguiente:

Ejemplo B: cifrado de copias de seguridad con una clave asimétrica desde el Almacén de claves

Las copias de seguridad cifradas se admiten a partir de SQL Server 2014. En el ejemplo siguiente, se crea y se restaura una copia de seguridad cifrada con 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 muestra de la restauración.

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

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

Ejemplo C: cifrado de nivel de columna con una clave asimétrica desde el Almacén de claves

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

En este ejemplo, se utiliza la clave asimétrica CONTOSO_KEY almacenada en el Almacén de claves, que se importó o se creó anteriormente, como se describe en el paso 3, sección 3 , más arriba. Para utilizar esta clave asimétrica en la base de datos ContosoDatabase , debe ejecutar de nuevo la instrucción CREATE ASYMMETRIC KEY para proporcionar a la base de datos ContosoDatabase una referencia a la clave.

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;

Consulte también

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)CREATE ASYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)Administración extensible de claves (EKM)Enable TDE using EKMBackup EncryptionCreate an Encrypted Backup Backup Create an Encrypted Backup