Configuración de la integración de Azure Key Vault para SQL Server en máquinas virtuales de Azure (Resource Manager)

Se aplica a:SQL Server en VM de Azure

SQL Server tiene varias características de cifrado, como el cifrado de datos transparente (TDE), el cifrado de nivel de columna (CLE) y el cifrado de copia de seguridad. Estas formas de cifrado requieren administrar y almacenar las claves criptográficas que se usan para el cifrado. El servicio Azure Key Vault está diseñado para mejorar la seguridad y la administración de estas claves en una ubicación segura y con gran disponibilidad. El conector de SQL Server permite que SQL Server use estas claves de Azure Key Vault.

Si ejecuta SQL Server de forma local, hay una serie de pasos que puede seguir para acceder a Azure Key Vault desde la instancia de SQL Server local. Pero para SQL Server en las máquinas virtuales de Azure, puede ahorrar tiempo usando la característica Integración de Azure Key Vault.

Nota:

La integración de Azure Key Vault está disponible solo para las ediciones Enterprise, Developer y Evaluation de SQL Server. A partir de SQL Server 2019, también se admite la edición Standard.

Cuando se habilita esta característica, automáticamente se instala el conector de SQL Server, se configura el proveedor EKM para obtener acceso a Azure Key Vault y se crea la credencial para que pueda tener acceso a su almacén. Si examinamos los pasos descritos en la documentación local que se mencionó anteriormente, puede ver que esta característica automatiza los pasos 2 y 3. Lo único que aún tiene que hacer manualmente es crear el Almacén de claves y las claves. Desde allí, se automatiza toda la configuración de la máquina virtual de SQL Server. Cuando esta característica haya completado el programa de instalación, puede ejecutar instrucciones de Transact-SQL (T-SQL) para empezar a cifrar sus bases de datos o copias de seguridad como lo haría normalmente.

Nota:

También puede usar una plantilla para configurar la integración de Key Vault. Para más información, consulte la plantilla de inicio rápido de Azure para la integración de Azure Key Vault.

Preparación para la integración de AKV

Para usar la Integración de Azure Key Vault para configurar la máquina virtual de SQL Server, hay varios requisitos previos:

  1. Azure PowerShell
  2. Creación de un inquilino de Microsoft Entra
  3. Creación de un Almacén de claves

Las secciones siguientes describen estos requisitos previos y la información que necesita recopilar para ejecutar más adelante los cmdlets de PowerShell.

Nota:

En este artículo se usa el módulo Az de PowerShell, que es el módulo de PowerShell que se recomienda para interactuar con Azure. Para empezar a trabajar con el módulo Az de PowerShell, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Instalar Azure Powershell

Asegúrese de que ha instalado el módulo de Azure PowerShell más reciente. Para obtener más información, consulte Instalación y configuración de Azure PowerShell.

Registro de una aplicación en tu Microsoft Entra ID

En primer lugar, debes tener un inquilino de Microsoft Entra en tu suscripción. Entre otras muchas ventajas, esto le permite conceder permiso para Almacén de claves a determinados usuarios y aplicaciones.

Después, registra una aplicación con Microsoft Entra ID. Esto te da una cuenta de entidad de servicio que tenga acceso a tu almacén de claves, algo que la máquina virtual necesita. En el artículo sobre Azure Key Vault, puede encontrar estos pasos en la sección Registro de una aplicación con Microsoft Entra ID, o bien puede ver los pasos con capturas de pantalla en la sección en la que se indica cómo obtener una identidad para la aplicación de esta entrada de blog. Antes de completar estos pasos, durante este registro tiene que recopilar la siguiente información que necesitará más adelante cuando habilite la integración de Azure Key Vault en la máquina virtual de SQL.

  • Después de agregar la aplicación, busque el identificador de la aplicación (también conocido como ClientID o AppID) en el panel Aplicación registrada. El identificador de la aplicación se asigna posteriormente al parámetro $spName (nombre de entidad de seguridad de servicio) en el script de PowerShell para habilitar la integración de Azure Key Vault.

    Application ID

  • Durante estos pasos al crear la clave, copie el secreto de la clave tal y como se muestra en la siguiente captura de pantalla. Este secreto de clave se asigna posteriormente al parámetro $spSecret (secreto de entidad de servicio) en el script de PowerShell.

    AAD secret

  • El identificador de la aplicación y el secreto también se utilizarán para crear una credencial en SQL Server.

  • Debe autorizar este nuevo identificador de aplicación (o identificador de cliente) para tener los siguientes permisos de acceso: get, wrapKey y unwrapKey. Esto se hace con el cmdlet Set-AzKeyVaultAccessPolicy. Para obtener más información, consulte la información general de Azure Key Vault.

Creación de un Almacén de claves

Para poder usar Azure Key Vault para guardar las claves que se utilizarán para el cifrado en la máquina virtual, tienes que tener acceso a un almacén de claves. Si no ha configurado ya su almacén de claves, cree uno siguiendo los pasos que se mencionan en el artículo Introducción a Azure Key Vault. Antes de completar estos pasos, durante esta configuración tienes que recopilar cierta información que necesitarás más adelante cuando habilites la integración de Azure Key Vault en la máquina virtual de SQL.

New-AzKeyVault -VaultName 'ContosoKeyVault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East Asia'

Cuando llegue al paso Creación de un Almacén de claves, tenga en cuenta la propiedad vaultUri devuelta, que es la dirección URL del Almacén de claves. En el ejemplo que se proporciona en ese paso, que se muestra a continuación, el nombre del almacén de claves es ContosoKeyVault, por lo que tu dirección URL sería https://contosokeyvault.vault.azure.net/.

La URL de Key Vault se asigna posteriormente al parámetro $akvURL en el script de PowerShell para habilitar la integración de Azure Key Vault.

Una vez creado el almacén de claves, se debe agregar una clave para dicho almacén; esta clave se utilizará más adelante cuando se cree una clave asimétrica en SQL Server.

Nota:

La versión 1.0.4.0 del proveedor de Administración extensible de claves (EKM) se instala en la VM con SQL Server a través de la extensión de infraestructura como servicio (IaaS) de SQL. Al actualizar la extensión Agente de IaaS de SQL, no se actualizará la versión del proveedor. Considere la posibilidad de actualizar manualmente la versión del proveedor EKM si es necesario (por ejemplo, al migrar a una instancia administrada de SQL).

Habilitación y configuración de la integración de Key Vault

Puede habilitar la integración de Key Vault durante el aprovisionamiento o configurarla para las máquinas virtuales existentes.

Nuevas máquinas virtuales

Si está aprovisionando una nueva máquina virtual de SQL con Resource Manager, Azure Portal permite habilitar la integración de Azure Key Vault.

SQL Azure Key Vault Integration

Para ver un tutorial detallado del aprovisionamiento, consulte Aprovisionamiento de una máquina virtual de SQL en Azure Portal.

Máquinas virtuales existentes

En el caso de las máquinas virtuales de SQL existentes, abra su recurso de máquinas virtuales de SQL y seleccione Seguridad en Configuración. Seleccione Habilitar para habilitar la integración de Azure Key Vault.

En la captura de pantalla siguiente se muestra cómo habilitar Azure Key Vault en el portal para una máquina virtual de SQL Server existente (esta instancia de SQL Server usa un puerto 1401 no predeterminado):

SQL Key Vault integration for existing VMs

Cuando termine, seleccione el botón Aplicar en la parte inferior de la página Seguridad para guardar los cambios.

Nota:

El nombre de la credencial que se ha creado aquí se asignará más tarde a un inicio de sesión de SQL. Esto permite que el inicio de sesión de SQL tenga acceso al almacén de claves.

Después de habilitar la integración de Azure Key Vault, puede habilitar el cifrado de SQL Server en la máquina virtual de SQL. En primer lugar, tendrá que crear una clave asimétrica en el almacén de claves y una clave simétrica dentro de SQL Server en la máquina virtual. A continuación, podrá ejecutar las instrucciones de T-SQL para habilitar el cifrado de las bases de datos y las copias de seguridad.

Hay varias formas de cifrado que puede aprovechar:

Los siguientes scripts de Transact-SQL proporcionan ejemplos para cada una de estas áreas.

Requisitos previos para los ejemplos

Todos los ejemplos se basa en los dos requisitos previos: una clave asimétrica del almacén de claves denominada CONTOSO_KEY y una credencial creada por la característica de integración de AKV denominada Azure_EKM_cred. Los siguientes comandos Transact-SQL configuran estos requisitos previos para ejecutar los ejemplos.

USE master;
GO

--create credential
--The <<SECRET>> here requires the <Application ID> (without hyphens) and <Secret> to be passed together without a space between them.
CREATE CREDENTIAL Azure_EKM_cred
    WITH IDENTITY = 'keytestvault', --keyvault
    SECRET = '<<SECRET>>'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;


--Map the credential to a SQL login that has sysadmin permissions. This allows the SQL login to access the key vault when creating the asymmetric key in the next step.
ALTER LOGIN [SQL_Login]
ADD CREDENTIAL Azure_EKM_cred;


CREATE ASYMMETRIC KEY CONTOSO_KEY
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'KeyName_in_KeyVault',  --The key name here requires the key we created in the key vault
CREATION_DISPOSITION = OPEN_EXISTING;

Cifrado de datos transparente (TDE)

  1. Cree un inicio de sesión de SQL Server que el motor de base de datos usará para TDE, después agréguele la credencial.

    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 EKM_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 EKM_Login
    ADD CREDENTIAL Azure_EKM_cred;
    GO
    
  2. Cree la clave de cifrado de base de datos que se usará para TDE.

    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
    

Copias de seguridad cifradas

  1. Cree un inicio de sesión de SQL Server que el motor de base de datos usará para cifrar las copias de seguridad, después agréguele la credencial.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it is encrypting the backup.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the Encrypted Backup Login to add the credential for use by
    -- the Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred ;
    GO
    
  2. Realice una copia de seguridad de la base de datos especificando el cifrado con la clave asimétrica guardada 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
    

Cifrado de nivel de columna (CLE)

Este script crea una clave simétrica protegida por la clave asimétrica en el almacén de claves y, a continuación, usa la clave simétrica para cifrar los datos de la base de datos.

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;

Recursos adicionales

Para más información sobre cómo usar estas características de cifrado, vea Uso de la administración extensible de claves con las características de cifrado de SQL Server.

Tenga en cuenta que en los pasos descritos en este artículo se supone que ya tiene SQL Server en ejecución en una máquina virtual de Azure. De lo contrario, consulte Aprovisionamiento de una máquina virtual de SQL Server en Azure Portal. Para otros temas sobre la ejecución de SQL Server en máquinas virtuales de Azure, consulta Información general de SQL Server en Windows Virtual Machines.

Pasos siguientes

Para obtener más información de seguridad, consulte Consideraciones de seguridad para SQL Server en máquinas virtuales de Azure.