Habilitación de claves administradas por el cliente para servicios administrados

Nota:

Esta característica requiere el plan Premium.

Para disponer de un mayor control sobre los datos, puede agregar su propia clave para proteger y controlar el acceso a ciertos tipos de datos. Azure Databricks tiene varias características clave administradas por el cliente. Para comparar las características relacionadas, consulte Claves administradas por el cliente para el cifrado.

Sugerencia

En este artículo se describe cómo configurar su propia clave desde almacenes de Azure Key Vault para servicios administrados. Para obtener instrucciones sobre cómo utilizar una clave de los almacenes de Azure Key Vault HSM administradoHabilitar claves administradas por el cliente HSM para servicios administrados: Azure Databricks.

Los datos de servicios administrados en el plano de control de Azure Databricks se cifran en reposo. Puede agregar una clave administrada por el cliente para los servicios administrados para ayudar a proteger y controlar el acceso a los siguientes tipos de datos cifrados:

Después de agregar un cifrado de clave administrada por el cliente para un área de trabajo, Azure Databricks usa la clave para controlar el acceso a la clave que cifra las operaciones de escritura futuras en los datos de servicios administrados del área de trabajo. Los datos ya existentes no se volverán a cifrar. La clave de cifrado de datos se almacena en caché en memoria para varias operaciones de lectura y escritura y se expulsa de la memoria a intervalos regulares. Las nuevas solicitudes de esos datos requieren otra solicitud al sistema de administración de claves del servicio en la nube. Si elimina o revoca la clave, se produce un error al leer o escribir en los datos protegidos al final del intervalo de tiempo de caché.

Puede rotar (actualizar) la clave administrada por el cliente más adelante. Consulte Rotación de la clave en un momento posterior.

Esta característica no cifra los datos almacenados fuera del plano de control. Para ver otras características de clave administradas por el cliente, consulte Claves administradas por el cliente para el cifrado.

Requisitos

Paso 1: configurar un Key Vault

Debe crear una instancia de Azure Key Vault y establecer sus permisos. Puedes hacerlo a través de Azure Portal, la CLI o las API.

Importante

La instancia de Key Vault debe estar en el mismo inquilino de Azure que el área de trabajo de Azure Databricks.

Estas instrucciones ofrecen detalles para varias opciones de implementación:

Uso de Azure Portal

  1. Crea o selecciona un Key Vault:
    • Para crear un Key Vault, ve a la página de Azure Portal para crear un Key Vault. Haz clic en + Crear. Escribe el nombre del grupo de recursos, el nombre de Key Vault, la región y el plan de tarifa. Haga clic en Revisar y crear y, a continuación, en Crear.
    • Para usar un Key Vault existente, copia el nombre de Key Vault para el siguiente paso.
  2. Obtenga el identificador de objeto de la aplicación AzureDatabricks:
    1. En el Azure Portal, vaya a Microsoft Entra ID.
    2. Seleccione Aplicaciones empresariales en el menú de la barra lateral.
    3. Busca AzureDatabricks y haz clic en Aplicación empresarial en los resultados.
    4. Copie el identificador de objeto de Propiedades.
  3. Agregue una directiva de acceso a Key Vault mediante Azure Portal:
    1. Ve a Azure Key Vault que usarás para configurar las claves administradas por el cliente para los servicios administrados del área de trabajo.

    2. Haz clic en la pestaña Directivas de acceso en el panel izquierdo.

    3. Selecciona el botón Crear que se encuentra en la parte superior de la página.

    4. En la sección Permisos de clave de la pestaña Permisos, habilite Obtener, Desencapsular clave y Encapsular clave.

    5. Haga clic en Next.

    6. En la pestaña Entidad de seguridad, escribeAzureDatabricks y desplázate hasta el primer resultado de la aplicación empresarial que tenga un identificador de aplicación de 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d y selecciónalo.

      Selecciona la aplicación AzureDatabricks con id. 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d

    7. Ve a la pestaña Revisar y crear y haz clic en b.

Uso de la CLI de Azure

Usa la CLI de Azure para completar las instrucciones siguientes.

  1. Cree una instancia de Key Vault o seleccione una existente:

    • Para crear una instancia de Key Vault, use el comando de la CLI de Azure a continuación y reemplace los elementos entre paréntesis con su región, nombre de instancia de Key Vault, nombre del grupo de recursos y ubicación:

      az keyvault create --location <region> \
                         --name <key-vault-name> \
                         --resource-group <resource-group-name> \
                         --location <location> \
                         --enable-purge-protection
      
    • Para usar un Key Vault existente, copia el nombre para el paso siguiente.

  2. Obtenga el identificador de objeto de la aplicación AzureDatabricks con la CLI de Azure.

    az ad sp show --id "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d" \
                  --query "id" \
                  --output tsv
    
  3. Confirma que está utilizando la suscripción de Azure correcta:

    az account set --subscription {subscription_id}
    

Uso de Azure PowerShell

Puede crear una nueva instancia de Key Vault o usar una existente.

Crear un almacén de claves:

$keyVault = New-AzKeyVault -Name <key-vault-name> \
-ResourceGroupName <resource-group-name> \
-Location <location> \
-sku <sku> \
-EnablePurgeProtection

Uso de una instancia existente de Key Vault:

$keyVault = Get-AzKeyVault -VaultName <key-vault-name>

Paso 2: Preparar una clave

Puede crear una clave o usar una existente. Use las herramientas que prefiera: Azure Portal, la CLI de Azure u otras opciones.

Uso de CLI de Azure

Crea una clave en el Key Vault. El tipo de clave debe ser RSA.

Para crear la clave en la CLI, ejecute este comando:

az keyvault key create --name <key-name> \
                       --vault-name <key-vault-name> \
                       --protection software

Anote los siguientes valores, que puede obtener del identificador de clave en la propiedad kid de la respuesta. Los usará en pasos posteriores:

  • Dirección URL del almacén de claves: parte inicial del identificador de clave que incluye el nombre de Key Vault. Tiene el formato https://<key-vault-name>.vault.azure.net.
  • Nombre de clave: nombre de su clave.
  • Versión de clave: versión de la clave.

El identificador de clave completo tiene el formato https://<key-vault-name>.vault.azure.net/keys/<key-name>/<key-version>. Las claves de Azure Key Vault que se encuentran en una nube no pública tienen un formato diferente.

Para usar una clave existente en lugar de crear una, obtenga y copie estos valores para la clave a fin de poder usarlos en los pasos siguientes. Compruebe que la clave existente está habilitada antes de continuar.

Uso de Azure PowerShell

  1. Si tiene previsto crear una clave, es posible que tenga que establecer la directiva de acceso, en función de cómo y cuándo la haya creado. Por ejemplo, si creó recientemente la instancia de Key Vault mediante PowerShell, es posible que la nueva instancia de Key Vault no tenga la directiva de acceso necesaria para crear una clave. En el ejemplo siguiente se usa el parámetro EmailAddress para establecer la directiva. Para obtener más información, consulte el artículo de Microsoft sobre Set-AzKeyVaultAccessPolicy.

    Establezca la directiva de acceso en una nueva instancia de Key Vault:

    Set-AzKeyVaultAccessPolicy \
    -VaultName $keyVault.VaultName \
    -PermissionsToKeys all \
    -EmailAddress <email-address>
    
  2. Puede crear una clave o recuperar una existente:

    • Crear una clave:

      $key = Add-AzKeyVaultKey \
      -VaultName $keyVault.VaultName \
      -Name <key-name> \
      -Destination 'Software'
      
    • Recuperar una clave existente:

      $key = Get-AzKeyVaultKey \
      -VaultName $keyVault.VaultName \
      -Name <key-name>
      
  3. Agregue una directiva de acceso con permisos a la instancia de Key Vault:

    $managedService = Get-AzureADServicePrincipal \
    -Filter "appId eq '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d'"
    
    Set-AzKeyVaultAccessPolicy -VaultName $keyVault.VaultName \
    -ObjectId $managedService.ObjectId \
    -PermissionsToKeys wrapkey,unwrapkey,get
    

Paso 3: agregar una clave a un área de trabajo

Puede implementar una nueva área de trabajo con una clave administrada por el cliente para servicios administrados o agregar una clave a un área de trabajo existente. Puede hacerlo con la CLI de Azure, PowerShell, plantillas de ARM, Azure Portal u otras herramientas. En esta sección se incluyen detalles de las distintas opciones de implementación:

Uso de Azure Portal sin ninguna plantilla

  1. Ve a la página de inicio de Azure Portal.

  2. Haz clic en Crear un recurso en la esquina superior izquierda.

  3. En la barra de búsqueda, escribe Azure Databricks y haz clic en la opción Azure Databricks .

  4. Haz clic en Crear en el widget de Azure Databricks.

  5. Introduce valores para los campos de entrada en las pestañas Básico y Redes.

  6. Después de llegar a la pestaña Cifrado:

    • Para crear un área de trabajo, habilita Usa tu propia clave en la sección Servicios administrados.
    • Para actualizar un área de trabajo, habilita los Servicios administrados.
  7. Establece los campos de cifrado.

    Mostrar los campos en la sección Discos administrados de la hoja Azure Databricks

    • En el campo Identificador de clave, pega el identificador de clave de la clave de Azure Key Vault.
    • En la lista desplegable Suscripción, escribe el nombre de la suscripción de la clave de Azure Key Vault.
  8. Completa las pestañas restantes y haz clic en Revisar y crear (para una nueva área de trabajo) o Guardar (para actualizar un área de trabajo).

Importante

Si rota la clave, debe mantener la clave antigua disponible durante 24 horas.

Uso de la CLI de Azure sin ninguna plantilla

  1. Agrega una directiva de acceso a Key Vault con el siguiente comando. Reemplaza <key-vault-name> por el nombre del almacén que usaste en el paso anterior y <object-id> por el identificador de objeto de la aplicación AzureDatabricks.

    az keyvault set-policy -n <key-vault-name> \
                           --key-permissions get wrapKey unwrapKey  \
                           --object-id <object-id>
    
  2. Cree o actualice un área de trabajo:

    Para crear y actualizar, agregue estos campos al comando:

    • managed-services-key-name: nombre de la clave
    • managed-services-key-vault: URI del almacén de claves
    • managed-services-key-version: versión de la clave

    Ejemplo de creación de un área de trabajo con estos campos:

    az databricks workspace create --name <workspace-name> \
    --resource-group <resource-group-name> \
    --location <location> \
    --sku premium \
    --managed-services-key-name <key-name> \
    --managed-services-key-vault <key-vault-uri> \
    --managed-services-key-version <key-version>
    

    Ejemplo de actualización de un área de trabajo con estos campos:

    az databricks workspace update --name <workspace-name> \
    --resource-group <resource-group-name> \
    --managed-services-key-name <key-name> \
    --managed-services-key-vault <key-vault-uri> \
    --managed-services-key-version <key-version>
    

Importante

Si rota la clave, debe mantener la clave antigua disponible durante 24 horas.

Uso de Powershell sin ninguna plantilla

Para crear o actualizar un área de trabajo, agregue los parámetros siguientes al comando para la nueva clave:

  • ManagedServicesKeyVaultPropertiesKeyName: nombre de la clave
  • ManagedServicesKeyVaultPropertiesKeyVaultUri: URI de la clave
  • ManagedServicesKeyVaultPropertiesKeyVersion: versión de la clave

Ejemplo de creación de un área de trabajo con estos campos:

New-AzDatabricksWorkspace -Name <workspace-name> \
-ResourceGroupName <resource-group-name> \
-location $keyVault.Location \
-sku premium \
-ManagedServicesKeyVaultPropertiesKeyName $key.Name \
-ManagedServicesKeyVaultPropertiesKeyVaultUri $keyVault.VaultUri \
-ManagedServicesKeyVaultPropertiesKeyVersion $key.Version

Ejemplo de actualización de un área de trabajo con estos campos:

Update-AzDatabricksWorkspace -Name <workspace-name> \
-ResourceGroupName <resource-group-name> \
-sku premium \
-ManagedServicesKeyVaultPropertiesKeyName $key.Name \
-ManagedServicesKeyVaultPropertiesKeyVaultUri $keyVault.VaultUri \
-ManagedServicesKeyVaultPropertiesKeyVersion $key.Version

Importante

Si rota la clave, debe mantener la clave antigua disponible durante 24 horas.

Aplicación de cambios con una plantilla de ARM

La siguiente plantilla de ARM crea una nueva área de trabajo con una clave administrada por el cliente, usando la versión 2023-02-01 de API para el recurso Microsoft.Databricks/workspaces . Guarde este texto localmente en un archivo denominado databricks-cmk-template.json.

Esta plantilla de ejemplo no incluye todas las características posibles de Azure Databricks, como proporcionar tu propia red virtual en la que implementar el área de trabajo.

Importante

Si ya usas una plantilla, combina los parámetros, recursos y salidas adicionales de esta plantilla en la plantilla existente.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "workspaceName": {
      "type": "string",
      "metadata": {
        "description": "The name of the Azure Databricks workspace to create."
      }
    },
    "pricingTier": {
      "type": "string",
      "defaultValue": "premium",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "The pricing tier of workspace."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "apiVersion": {
      "type": "string",
      "defaultValue": "2023-02-01",
      "allowedValues":[
        "2023-02-01",
        "2021-04-01-preview"
      ],
      "metadata": {
        "description": "The api version to create the workspace resources"
      }
    },
    "keyvaultUri": {
      "type": "string",
      "metadata": {
        "description": "The Key Vault URI for customer-managed key for managed services"
      }
    },
    "keyName": {
      "type": "string",
      "metadata": {
        "description": "The key name used for customer-managed key for managed services"
      }
    },
    "keyVersion": {
      "type": "string",
      "metadata": {
        "description": "The key version used for customer-managed key for managed services"
      }
    }
  },
  "variables": {
    "managedResourceGroupName": "[concat('databricks-rg-', parameters('workspaceName'), '-', uniqueString(parameters('workspaceName'), resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Databricks/workspaces",
      "name": "[parameters('workspaceName')]",
      "location": "[parameters('location')]",
      "apiVersion": "[parameters('apiVersion')]",
      "sku": {
        "name": "[parameters('pricingTier')]"
      },
      "properties": {
        "ManagedResourceGroupId": "[concat(subscription().id, '/resourceGroups/', variables('managedResourceGroupName'))]",
        "encryption": {
          "entities": {
             "managedServices": {
                "keySource": "Microsoft.Keyvault",
                "keyVaultProperties": {
                   "keyVaultUri": "[parameters('keyvaultUri')]",
                   "keyName": "[parameters('keyName')]",
                   "keyVersion": "[parameters('keyVersion')]"
                }
             }
          }
        }
      }
    }
  ],
  "outputs": {
    "workspace": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Databricks/workspaces', parameters('workspaceName')))]"
    }
  }
}

Si ya usa otra plantilla, puede combinar los parámetros, los recursos y las salidas de esta plantilla en la suya.

Para usar esta plantilla para crear o actualizar un área de trabajo, elige una de estas opciones de implementación:

Aplicación de una plantilla con la CLI de Azure

Para crear un área de trabajo con la CLI de Azure, ejecute el siguiente comando:

az deployment group create --resource-group <resource-group-name>  \
                           --template-file <file-name>.json \
                           --parameters workspaceName=<new-workspace-name> \
                           keyvaultUri=<keyvaultUrl> \
                           keyName=<keyName> keyVersion=<keyVersion>

Para actualizar un área de trabajo existente para usar un área de trabajo de clave administrada por el cliente (o para rotar la clave existente) mediante la CLI de Azure:

  1. Si la plantilla de ARM que implementó el área de trabajo nunca agregó claves administradas por el cliente, agregue la sección resources.properties.encryption y sus parámetros relacionados. Consulte la plantilla que hemos visto anteriormente en este artículo.

    1. Agregue la sección resources.properties.encryption de la plantilla.
    2. En la sección parameters, agregue tres nuevos parámetros keyvaultUri, keyNamey keyVersion de la plantilla.
  2. Ejecute el mismo comando que para crear una nueva área de trabajo. Siempre que el nombre del grupo de recursos y el nombre del área de trabajo sean idénticos al área de trabajo existente, este comando actualiza el área de trabajo existente en lugar de crear una nueva área de trabajo.

    az deployment group create --resource-group <existing-resource-group-name>  \
                               --template-file <file-name>.json \
                               --parameters workspaceName=<existing-workspace-name> \
                               keyvaultUri=<keyvaultUrl> \
                               keyName=<keyName> keyVersion=<keyVersion>
    

    Aparte de los cambios en los parámetros relacionados con claves, use los mismos parámetros que se usaron para crear el área de trabajo.

    Importante

    Si rota la clave, debe mantener la clave antigua disponible durante 24 horas.

Aplicación de una plantilla con Azure Portal

Para usar la plantilla en Azure Portal para crear o actualizar un área de trabajo:

  1. Vaya a la página Implementación personalizada.

  2. Haga clic en Cree su propia plantilla en el editor.

  3. Pegue el código JSON.

  4. Haga clic en Save(Guardar).

  5. Rellene los parámetros.

    Para actualizar un área de trabajo existente, use los mismos parámetros que usó para crear el área de trabajo. Para agregar una clave por primera vez, agregue los tres parámetros relacionados con la clave. Para rotar la clave, cambie todos o algunos de los parámetros relacionados con la clave. Asegúrese de que el nombre del grupo de recursos y el nombre del área de trabajo son idénticos al área de trabajo existente. Si son iguales, este comando actualiza el área de trabajo existente en lugar de crear una nueva área de trabajo.

    Aparte de los cambios en los parámetros relacionados con claves, use los mismos parámetros que se usaron para crear el área de trabajo.

  6. Haga clic en Revisar y crear.

  7. Si no hay ningún problema de validación, haga clic en Crear.

    Importante

    Si rota la clave, debe mantener la clave antigua disponible durante 24 horas.

Para más información, consulte el artículo de Azure Inicio rápido: Creación e implementación de plantillas de Azure Resource Manager mediante Azure Portal.

Paso 4 (opcional): Volver a importar cuadernos

Después de agregar inicialmente una clave para servicios administrados para un área de trabajo existente, solo las operaciones de escritura futuras usan la clave. Los datos ya existentes no se volverán a cifrar.

Puede exportar todos los cuadernos y volver a importarlos para que la clave que cifre los datos esté protegida y controlada por la clave. Puede usar las API de exportación e importación del área de trabajo.

Rotación de la clave en un momento posterior

Si ya usa una clave administrada por el cliente para los servicios administrados, puede actualizar el área de trabajo con una nueva versión de clave o una clave completamente nueva. Esto se denomina rotación de claves.

  1. Cree una nueva clave o rote la clave existente en Key Vault. Ver Paso 1: configurar un Key Vault.

    Asegúrese de que la nueva clave tenga los permisos adecuados.

  2. Confirma que la plantilla tiene la versión de API correcta. Debe ser igual o mayor que 2021-04-01-preview.

  3. Actualice el área de trabajo con la nueva clave mediante el portal, la CLI o PowerShell. Consulte Paso 3: Agregar una clave a un área de trabajo y siga las instrucciones para actualizar el área de trabajo. Asegúrese de usar los mismos valores para el nombre del grupo de recursos y el nombre del área de trabajo para que se actualice el área de trabajo existente, en lugar de crear una nueva área de trabajo. Aparte de los cambios en los parámetros relacionados con claves, use los mismos parámetros que se usaron para crear el área de trabajo.

    Importante

    Si rota la clave, debe mantener la clave antigua disponible durante 24 horas.

  4. De manera opcional, exporte y vuelva a importar los cuadernos existentes para asegurarse de que todos los cuadernos existentes usen la nueva clave.

Solución de problemas

Eliminación accidental de una clave

Si elimina la clave en Azure Key Vault, el inicio de sesión del área de trabajo comenzará a generar errores y Azure Databricks no podrá leer ningún cuaderno. Para evitarlo, se recomienda habilitar las eliminaciones temporales. Esta opción garantiza que, si se elimina una clave, se pueda recuperar en un período de 30 días. Si la eliminación temporal está habilitada, simplemente puede volver a habilitar la clave para resolver el problema.

Error de actualización de claves debido a permisos de Key Vault

Si tienes problemas para crear el área de trabajo, comprueba si el Key Vault tiene permisos correctos. Es posible que el error que devuelve Azure no indique correctamente esta causa como la principal. Además, los permisos necesarios son get, wrapKey y unwrapKey. Ver Paso 1: configurar un Key Vault.

Las claves perdidas son irrecuperables

Si pierde la clave y no puede recuperarla, no podrá recuperar ninguno de los datos del cuaderno cifrados por la clave.