PowerShell y la CLI de Azure: habilitar el Cifrado de datos transparente con una clave administrada por el cliente desde Azure Key Vault

Se aplica a: Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics

En este artículo se explica cómo usar una clave de Azure Key Vault para cifrado de datos transparente (TDE) en una instancia de Azure SQL Database o Azure Synapse Analytics. Para obtener más información sobre TDE con la integración de Azure Key Vault - compatibilidad con Traiga su propia clave (BYOK), visite TDE with customer-managed keys in Azure Key Vault (TDE con claves administradas por el cliente de Azure Key Vault). Si busca instrucciones de Azure Portal sobre cómo habilitar TDE con una clave administrada por el cliente de Azure Key Vault, consulte Creación de un servidor configurado con una identidad administrada asignada por el usuario y un TDE administrado por el cliente por el cliente.

Este artículo se aplica a Azure SQL Database, Azure SQL Managed Instance y Azure Synapse Analytics [grupos de SQL dedicados (antes conocidos como SQL DW)]. Para obtener documentación sobre el Cifrado de datos transparente para grupos de SQL dedicados en áreas de trabajo de Synapse, consulte Cifrado de Azure Synapse Analytics.

Nota:

Azure SQL admite ahora el uso de una clave RSA almacenada en un HSM administrado como protector de TDE. HSM administrado de Azure Key Vault es un servicio en la nube totalmente administrado, de alta disponibilidad y de un solo inquilino que cumple los estándares y que le permite proteger las claves criptográficas de las aplicaciones en la nube mediante HSM validados de FIPS 140-2, nivel 3. Obtenga más información sobre HSM administrados.

Nota:

Microsoft Entra ID era conocido anteriormente como Azure Active Directory (Azure AD).

Requisitos previos para PowerShell

  • Debe tener una suscripción de Azure y ser un administrador en esa suscripción.
  • [Recomendado, pero opcional] Debe tener un módulo de seguridad de hardware (HSM) o un almacén de claves locales para crear una copia local del material de claves del protector de TDE.
  • Es preciso tener instalado y en ejecución Azure PowerShell.
  • Cree una instancia de Azure Key Vault y una clave para usar para TDE.
  • La clave debe tener los siguientes atributos que se usarán para TDE:
    • La fecha de activación (si se establece) debe ser una fecha y hora del pasado
    • La fecha de expiración (si se establece) debe ser una fecha y hora del futuro
    • El estado de la clave debe ser Habilitada
    • Poder realizar las operaciones get, wrap key, unwrap key
  • Para usar una clave de HSM administro, siga las instrucciones para crear y activar un HSM administrado con la CLI de Azure

Para obtener instrucciones sobre la instalación del módulo Az, consulte Instalación de Azure PowerShell. Para los cmdlets concretos, consulte AzureRM.Sql.

Para obtener información específica sobre Key Vault, consulte las instrucciones de PowerShell de Key Vault y Uso de la eliminación temporal de Key Vault con PowerShell.

Importante

El módulo de Azure Resource Manager (RM) para PowerShell todavía es compatible, pero todo el desarrollo futuro se realizará para el módulo Az.Sql. El módulo de AzureRM continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Los argumentos para los comandos del módulo Az y los módulos AzureRm son esencialmente idénticos. Para obtener más información sobre la compatibilidad, vea Presentación del nuevo módulo Az de Azure PowerShell.

Asignación de una identidad de Microsoft Entra al servidor

Si ya tiene un servidor, use lo siguiente para agregar una identidad de Microsoft Entra al servidor:

$server = Set-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -AssignIdentity

Si va a crear un servidor, utilice el cmdlet New-AzSqlServer con la etiqueta -Identity para agregar una identidad de Microsoft Entra durante la creación del servidor:

$server = New-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -Location <RegionName> `
    -ServerName <LogicalServerName> -ServerVersion "12.0" -SqlAdministratorCredentials <PSCredential> -AssignIdentity

Conceder permisos de Key Vault al servidor

Utilice el cmdlet Set-AzKeyVaultAccessPolicy para conceder al servidor acceso al almacén de claves antes de usar una clave para TDE.

Set-AzKeyVaultAccessPolicy -VaultName <KeyVaultName> `
    -ObjectId $server.Identity.PrincipalId -PermissionsToKeys get, wrapKey, unwrapKey

Para agregar permisos al servidor en un HSM administrado, agregue el rol de RBAC local "Usuario de cifrado del servicio de criptografía de HSM administrado" al servidor. Esto permitirá que el servidor realice operaciones para obtener la clave, ajustarla y desajustarla en las claves del HSM administrado. Instrucciones para aprovisionar el acceso al servidor en HSM administrado

Agregar la clave de Key Vault al servidor y establecer el protector de TDE

Nota:

Para las claves de HSM administrado, use la versión de PowerShell de Az.Sql 2.11.1.

Nota:

La longitud combinada para el nombre del almacén de claves y el nombre de la clave no puede superar los 94 caracteres.

Sugerencia

KeyId de ejemplo desde Key Vault: https://contosokeyvault.vault.azure.net/keys/Key1/1a1a2b2b3c3c4d4d5e5e6f6f7g7g8h8h

KeyId de ejemplo desde HSM administrado:
https://contosoMHSM.managedhsm.azure.net/keys/myrsakey

# add the key from Key Vault to the server
Add-AzSqlServerKeyVaultKey -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -KeyId <KeyVaultKeyId>

# set the key as the TDE protector for all resources under the server
Set-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> `
   -Type AzureKeyVault -KeyId <KeyVaultKeyId>

# confirm the TDE protector was configured as intended
Get-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName>

Activar TDE

Utilice el cmdlet Set-AzSqlDatabaseTransparentDataEncryption para activar el TDE.

Set-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> -State "Enabled"

Ahora, la base de datos o el almacén de datos tienen TDE habilitado con una clave de cifrado en Key Vault.

Comprobar el estado de cifrado y la actividad de cifrado

Use Get-AzSqlDatabaseTransparentDataEncryption para obtener el estado de cifrado de una base de datos o almacenamiento de datos.

# get the encryption state of the database
Get-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> `

Cmdlets de PowerShell útiles

  • Utilice el cmdlet Set-AzSqlDatabaseTransparentDataEncryption para desactivar TDE.

    Set-AzSqlDatabaseTransparentDataEncryption -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName> `
        -DatabaseName <DatabaseName> -State "Disabled"
    
  • Utilice el cmdlet Get-AzSqlServerKeyVaultKey para devolver la lista de claves de Key Vault agregadas al servidor.

    # KeyId is an optional parameter, to return a specific key version
    Get-AzSqlServerKeyVaultKey -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    
  • Utilice el cmdlet Remove-AzSqlServerKeyVaultKey para quitar una clave de Key Vault del servidor.

    # the key set as the TDE Protector cannot be removed
    Remove-AzSqlServerKeyVaultKey -KeyId <KeyVaultKeyId> -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    

Solución de problemas

Compruebe lo siguiente si se produce un problema:

  • Si no se encuentra el almacén de claves, asegúrese de que está en la suscripción correcta.

    Get-AzSubscription -SubscriptionId <SubscriptionId>
    

  • Si la clave nueva no se puede agregar al servidor, o esta no se puede actualizar como protector de TDE, compruebe lo siguiente:
    • La clave no debe tener una fecha de expiración
    • La clave debe tener las operaciones get, wrap key y unwrap key.

Pasos siguientes