Uso de identidades administradas de Azure en Unity Catalog para acceder al almacenamiento

En este artículo se describe cómo usar las identidades administradas de Azure para conectarse a contenedores de almacenamiento en nombre de los usuarios de Unity Catalog.

¿Qué son las identidades administradas de Azure?

Unity Catalog se puede configurar para usar una identidad administrada de Azure para acceder a los contenedores de almacenamiento en nombre de los usuarios de Unity Catalog. Las identidades administradas proporcionan una identidad que usan las aplicaciones al conectarse a recursos que admiten la autenticación de Microsoft Entra ID (anteriormente Azure Active Directory).

Puede usar identidades administradas en Unity Catalog para admitir dos casos de uso principales:

  • Como identidad para conectarse a las cuentas de almacenamiento administrado de metastore (donde se almacenan las tablas administradas).
  • Como identidad para conectarse a otras cuentas de almacenamiento externas (ya sea para el acceso basado en archivos o para acceder a conjuntos de datos existentes a través de tablas externas).

La configuración de Unity Catalog con una identidad administrada tiene las siguientes ventajas sobre la configuración de Unity Catalog con una entidad de servicio:

Configuración de una identidad administrada para Unity Catalog

Para configurar una identidad administrada que se usará con Unity Catalog, primero debe crear un conector de acceso para Azure Databricks en Azure. De forma predeterminada, el conector de acceso se implementará con una identidad administrada asignada por el sistema. En su lugar, puede elegir adjuntar una identidad administrada asignada por el usuario. A continuación, conceda a la identidad administrada acceso a la cuenta de Azure Data Lake Storage Gen2 y use el conector de acceso al crear una credencial de almacenamiento o metastore de Unity Catalog.

Requisitos

El usuario o la entidad de servicio de Azure que crea el conector de acceso debe:

  • Ser colaborador o propietario de un grupo de recursos de Azure.

El usuario o la entidad de servicio de Azure que concede la identidad administrada a la cuenta de almacenamiento debe:

  • Ser propietario o usuario con el rol RBAC de Administrador de acceso de usuario de Azure en la cuenta de almacenamiento.

Paso 1: Crear un conector de acceso para Azure Databricks

El conector de acceso para Azure Databricks es un recurso de Azure de primera entidad que le permite conectar identidades administradas a una cuenta de Azure Databricks.

Cada conector de acceso para Azure Databricks puede contener una identidad administrada asignada por el sistema o una identidad administrada asignada por el usuario. Si desea usar varias identidades administradas, cree un conector de acceso independiente para cada una.

Usar una identidad administrada asignada por el sistema

  1. Inicie sesión en Azure Portal como colaborador o propietario de un grupo de recursos.

  2. Haga clic en + Crear o Crear un nuevo recurso.

  3. Busque Conector de acceso para Azure Databricks y selecciónelo.

  4. Haga clic en Crear.

  5. En la pestaña Aspectos básicos, acepte, seleccione o escriba valores para los campos siguientes:

    • Suscripción: esta es la suscripción de Azure en la que se creará el conector de acceso. El valor predeterminado es la suscripción de Azure que está usando actualmente. Puede ser cualquier suscripción en el inquilino.
    • Grupo de recursos: este es el grupo de recursos de Azure en el que se creará el conector de acceso.
    • Nombre: escriba un nombre que indique el propósito del conector.
    • Región: debe ser la misma región a la que se conectará la cuenta de almacenamiento.
  6. Haga clic en Revisar + crear.

  7. Cuando reciba el mensaje Validación superada, haga clic en Crear.

    Cuando la implementación se realiza correctamente, el conector de acceso se implementa con una identidad administrada asignada por el sistema.

  8. Cuando la implementación finalice, haga clic en Ir al recurso.

  9. Anote el Id. de recurso.

    El id. de recurso tiene el formato siguiente:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Uso de una identidad administrada asignada por el usuario

  1. Si aún no tiene una identidad administrada asignada por el usuario, cree una nueva y anote su id. de recurso.

    Consulte Administración de identidades administradas asignadas por el usuario.

  2. Inicie sesión en Azure Portal como colaborador o propietario de un grupo de recursos.

    El grupo de recursos debe estar en la misma región que la cuenta de almacenamiento a la que quiere conectarse.

  3. Busque Implementar una plantilla personalizada y selecciónela.

  4. Seleccione Compilar su propia plantilla y pegue la plantilla siguiente en el editor:

    {
     "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
     "contentVersion": "1.0.0.0",
     "parameters": {
         "connectorName": {
             "defaultValue": "testConnector",
             "type": "String",
             "metadata": {
                 "description": "The name of the Azure Databricks Access Connector to create."
             }
         },
         "accessConnectorRegion": {
             "defaultValue": "[resourceGroup().location]",
             "type": "String",
             "metadata": {
                 "description": "Location for the access connector resource."
             }
         },
         "userAssignedManagedIdentiy": {
             "type": "String",
             "metadata": {
                 "description": "The resource Id of the user assigned managed identity."
             }
         }
     },
     "resources": [
         {
             "type": "Microsoft.Databricks/accessConnectors",
             "apiVersion": "2023-05-01",
             "name": "[parameters('connectorName')]",
             "location": "[parameters('accessConnectorRegion')]",
             "identity": {
                 "type": "UserAssigned",
                 "userAssignedIdentities": {
                     "[parameters('userAssignedManagedIdentiy')]": {}
                 }
              }
          }
       ]
    }
    
  5. En la pestaña Aspectos básicos, acepte, seleccione o escriba los valores para los campos siguientes:

    • Suscripción: esta es la suscripción de Azure en la que se creará el conector de acceso. El valor predeterminado es la suscripción de Azure que está usando actualmente. Puede ser cualquier suscripción en el inquilino.
    • Grupo de recursos: debe ser un grupo de recursos en la misma región que la cuenta de almacenamiento a la que se conectará.
    • Nombre: escriba un nombre que indique el propósito del conector.
    • Región: debe ser la misma región a la que se conectará la cuenta de almacenamiento. Puede elegir el valor rellenado previamente '[resourceGroup().location]' si el grupo de recursos se creó en la misma región que la cuenta de almacenamiento a la que se conectará.
    • Identidad administrada asignada por el usuario: el id. de recurso de la identidad administrada asignada por el usuario que desea usar.
  6. Haga clic en Revisar + crear.

  7. Cuando reciba el mensaje Validación superada, haga clic en Crear.

  8. Cuando la implementación finalice, haga clic en Ir al recurso.

  9. Anote el Id. de recurso.

    El id. de recurso tiene el formato siguiente:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Paso 2: Conceder a la identidad administrada el acceso a la cuenta de almacenamiento

Para conceder los permisos en este paso, debe tener el rol propietario o administrador de acceso de usuario Azure RBAC en su cuenta de almacenamiento.

  1. Inicie sesión en su cuenta de Azure Data Lake Storage Gen2.
  2. Vaya a Control de acceso (IAM), haga clic en +Agregar y seleccione Agregar asignaciones de roles.
  3. Seleccione el rol Colaborador de datos de blobs de almacenamiento y haga clic en Siguiente.
  4. En Asignar acceso a, seleccione Identidad administrada.
  5. Haga clic en +Seleccionar miembros, y seleccione Conector de acceso para Azure Databricks o Identidad administrada asignada por el usuario.
  6. Busque el nombre del conector o la identidad asignada por el usuario, selecciónelo y haga clic en Revisar y asignar.

Como alternativa, puede limitar el acceso a la cuenta de almacenamiento concediéndole acceso a la identidad administrada a un contenedor específico. Siga los mismos pasos anteriores, pero conceda el rol Delegador de blobs de almacenamiento en la cuenta de almacenamiento y el rol Colaborador de datos de blobs de almacenamiento en el contenedor.

Paso 3: Conceder a la identidad administrada que acceda a los eventos de archivo

Conceder a la identidad administrada para el acceso a eventos de archivos permite a Azure Databricks suscribirse a las notificaciones de eventos de archivo emitidas por proveedores de nube. Esto hace que el procesamiento de archivos sea más eficaz. Para conceder los permisos en este paso, debe tener el rol propietario o administrador de acceso de usuario Azure RBAC en su cuenta de almacenamiento.

  1. Inicie sesión en su cuenta de Azure Data Lake Storage Gen2.
  2. Vaya a Control de acceso (IAM), haga clic en +Agregar y seleccione Agregar asignaciones de roles.
  3. Seleccione el rol Colaborador de datos de cola de almacenamiento y haga clic en Siguiente.
  4. En Asignar acceso a, seleccione Identidad administrada.
  5. Haga clic en +Seleccionar miembros, y seleccione Conector de acceso para Azure Databricks o Identidad administrada asignada por el usuario.
  6. Busque el nombre del conector o la identidad asignada por el usuario, selecciónelo y haga clic en Revisar y asignar.

Este paso permite a Azure Databricks configurar eventos de archivo de manera automática. Si no concede a Azure Databricks acceso para configurar eventos de archivo en su nombre, debe configurar los eventos de archivo manualmente para cada ubicación. Para conceder los permisos en este paso, debe tener los roles RBAC de Azure propietario o administrador de acceso de usuario en la identidad administrada y el grupo de recursos en el que se encuentra la cuenta de Azure Data Lake Storage Gen2.

  1. Siga los pasos anteriores en Paso 3: Conceder a la identidad administrada acceso a eventos de archivo y asignar el Colaborador de la cuenta de almacenamiento, junto con el rol Colaborador de datos de cola de almacenamiento, a la identidad administrada.
  2. Vaya al grupo de recursos de Azure en el que se encuentra su cuenta Azure Data Lake Storage Gen2.
  3. Vaya a Control de acceso (IAM), haga clic en +Agregar y seleccione Agregar asignaciones de roles.
  4. Seleccione el rol Colaborador EventGrid EventSubscription y haga clic en Siguiente.
  5. En Asignar acceso a, seleccione Identidad administrada.
  6. Haga clic en +Seleccionar miembros, y seleccione Conector de acceso para Azure Databricks o Identidad administrada asignada por el usuario.
  7. Busque el nombre del conector o la identidad asignada por el usuario, selecciónelo y haga clic en Revisar y asignar.

Uso de una identidad administrada para acceder a la cuenta de almacenamiento raíz de Unity Catalog

En esta sección se describe cómo conceder a la identidad administrada acceso a la cuenta de almacenamiento raíz al crear un metastore de Unity Catalog.

Para información sobre cómo actualizar un metastore de Unity Catalog existente para usar una identidad administrada, consulte Actualización del metastore de Unity Catalog existente para usar una identidad administrada para acceder a su almacenamiento raíz.

  1. Como administrador de la cuenta de Azure Databricks, inicie sesión en la consola de la cuenta de Azure Databricks.
  2. Haga clic en el icono de CatálogoCatálogo.
  3. Haga clic en Create Metastore (Crear metastore).
  4. Escriba valores para los campos siguientes:
    • Nombre para el metastore.

    • Región en la que se implementará el metastore.

      Para obtener el mejor rendimiento posible, colocalice el conector de acceso, las áreas de trabajo, el metastore y la ubicación de almacenamiento en la nube en la misma región de nube.

    • Ruta de acceso de ADLS Gen 2: escriba la ruta de acceso al contenedor de almacenamiento que usará como almacenamiento raíz para el metastore.

      El prefijo abfss:// se agrega de manera automática.

    • Id. del conector de acceso: escriba el id. de recurso del conector de acceso de Azure Databricks en el formato:

      /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
      
    • (Opcional) Id. de identidad administrada: si creó el conector de acceso mediante una identidad administrada asignada por el usuario, escriba el id. de recurso de la identidad administrada.

  5. Haga clic en Crear.
  6. Cuando se le solicite, seleccione áreas de trabajo para vincularlas al metastore.

Uso de una identidad administrada para acceder al almacenamiento externo administrado en el Unity Catalog

Unity Catalog ofrece la posibilidad de acceder a los datos existentes en las cuentas de almacenamiento mediante credenciales de almacenamiento y ubicaciones externas. Las credenciales de almacenamiento almacenan la identidad administrada y las ubicaciones externas definen una ruta de acceso al almacenamiento junto con una referencia a la credencial de almacenamiento. Puede usar este enfoque para conceder y controlar el acceso a los datos existentes en el almacenamiento en la nube y para registrar tablas externas en Unity Catalog.

Una credencial de almacenamiento puede contener una identidad administrada o una entidad de servicio. El uso de una identidad administrada tiene la ventaja de permitir que Unity Catalog acceda a las cuentas de almacenamiento protegidas por reglas de red, lo que no es posible mediante entidades de servicio y elimina la necesidad de administrar y rotar secretos.

Para crear una credencial de almacenamiento mediante una identidad administrada y asignar esa credencial de almacenamiento a una ubicación externa, siga las instrucciones de Conexión al almacenamiento de objetos en la nube mediante Unity Catalog.

Si el área de trabajo de Azure Databricks se implementa en su propia red virtual de Azure, también conocida como “Inyección de VNet”, y usa un firewall de almacenamiento para proteger una cuenta de Azure Data Lake Storage Gen2, debe:

  1. Habilitar el área de trabajo de Azure Databricks para acceder a Azure Storage.
  2. Habilitar la identidad administrada para acceder a Azure Storage.

Paso 1. Habilitación del área de trabajo de Azure Databricks para acceder a Azure Storage

Debe configurar las opciones de red para permitir que el área de trabajo de Azure Databricks acceda a Azure Data Lake Storage Gen2. Puede configurar puntos de conexión privados o acceder desde la red virtual en Azure Data Lake Storage Gen2 para permitir conexiones desde las subredes a la cuenta de Azure Data Lake Storage Gen2.

Para obtener instrucciones, consulte Concesión de acceso al área de trabajo de Azure Databricks a Azure Data Lake Storage Gen2.

Paso 2: Habilitar la identidad administrada para acceder a Azure Storage

Este paso solo es necesario si la opción "Permitir que los servicios de Azure en la lista de servicios de confianza accedan a esta cuenta de almacenamiento" está deshabilitada para la cuenta de Azure Storage. Si esa configuración está habilitada:

  • Cualquier conector de acceso para Azure Databricks en el mismo inquilino que la cuenta de almacenamiento puede acceder a la cuenta de almacenamiento.
  • Cualquier servicio de confianza de Azure puede acceder a la cuenta de almacenamiento. Consulte Concesión de acceso a servicios de Azure de confianza.

Las instrucciones siguientes incluyen un paso en el que se deshabilita esta configuración. Puede usar Azure Portal o la CLI de Azure.

Uso de Azure Portal

  1. Inicie sesión en Azure Portal, busque y seleccione la cuenta de Azure Storage y vaya a la pestaña Redes.

  2. Establezca Acceso de red públicaen Habilitado desde redes virtuales y direcciones IP seleccionadas.

    Como opción, en su lugar puede establecer Acceso de red pública en Deshabilitado. La identidad administrada se puede usar para omitir la comprobación en el acceso de red pública.

  3. En Instancias de recursos, seleccione un Tipo de recurso de Microsoft.Databricks/accessConnectors y seleccione el conector de acceso de Azure Databricks.

  4. En Excepciones, desactive la casilla Permitir que los servicios de Azure de la lista de servicios de confianza accedan a esta cuenta de almacenamiento.

Uso de la CLI de Azure

  1. Instale la CLI de Azure e inicie sesión.

    Para iniciar sesión con entidades de servicio de Microsoft Entra ID, consulte Inicio de sesión en la CLI de Azure con entidades de servicio de Microsoft Entra ID.

    Para iniciar sesión mediante una cuenta de usuario de Azure Databricks, consulte Inicio de sesión de la CLI de Azure con una cuenta de usuario de Azure Databricks.

  2. Agregue una regla de red a la cuenta de almacenamiento:

    az storage account network-rule add \
    -–subscription <subscription id of the resource group> \
    -–resource-id <resource Id of the access connector for Azure Databricks> \
    -–tenant-id <tenant Id> \
    -g <name of the Azure Storage resource group> \
    -–account-name <name of the Azure Storage resource> \
    

    Agregue el id. de recurso con el formato siguiente:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    
  3. Después de crear la regla de red, vaya a la cuenta de Azure Storage en Azure Portal y consulte la identidad administrada en la pestaña Redes, en Instancias de recursos, tipo de recurso Microsoft.Databricks/accessConnectors.

  4. En Excepciones, desactive la casilla Permitir que los servicios de Azure de la lista de servicios de confianza accedan a esta cuenta de almacenamiento.

  5. Opcionalmente, establezca Acceso de red pública en Deshabilitado. La identidad administrada se puede usar para omitir la comprobación en el acceso de red pública.

    El enfoque estándar es mantener este valor establecido en Habilitado desde redes virtuales y direcciones IP seleccionadas.

Los almacenes de SQL sin servidor son recursos de proceso que se ejecutan en la suscripción de Azure para Azure Databricks, no en la suscripción de Azure. Si configura un firewall en Azure Data Lake Storage Gen2 y tiene previsto usar almacenes de SQL sin servidor, debe configurar el firewall para permitir el acceso desde almacenes de SQL sin servidor.

Encontrará las instrucciones en Configuración de firewalls para el acceso de proceso sin servidor.

Actualización del metastore de Unity Catalog existente para usar una identidad administrada para acceder a su almacenamiento raíz

Si tiene un metastore de Unity Catalog que se creó con una entidad de servicio y quiere actualizarlo para usar una identidad administrada, puede actualizarlo mediante una llamada API.

  1. Cree un conector de acceso para Azure Databricks y asígnele permisos para el contenedor de almacenamiento que se usa para el almacenamiento raíz del metastore de Unity Catalog, mediante las instrucciones de Configuración de una identidad administrada para Unity Catalog.

    Puede crear el conector de acceso con una identidad administrada asignada por el sistema o una identidad administrada asignada por el usuario.

    Anote el id. de recurso del conector de acceso. Si usa una identidad administrada asignada por el usuario, anote también su id. de recurso.

  2. Como administrador de la cuenta, inicie sesión en un área de trabajo de Azure Databricks asignada al metastore.

    No es necesario que sea un administrador del área de trabajo.

    Anote la dirección URL del área de trabajo, que es la primera parte de la dirección URL, después de https:// e incluido azuredatabricks.net.

  3. Genere un token de acceso personal.

  4. Agregue el token de acceso personal al archivo .netrc en el directorio principal. Al hacerlo, mejora la seguridad, ya que se impide que el token de acceso personal aparezca en el historial de comandos del shell. Consulte la API de administración.

  5. Ejecute el comando cURL siguiente para crear la credencial de almacenamiento.

    Reemplace los valores de marcador de posición:

    • <databricks-instance>: dirección URL del área de trabajo donde se generó el token de acceso personal.
    • <credential-name>: nombre de la credencial de almacenamiento.
    • <access-connector-id>: id. de recurso para el conector de acceso de Azure Databricks en el formato /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>.
    • <managed-identity-id>: si creó el conector de acceso mediante una identidad administrada asignada por el usuario, escriba el id. de recurso de la identidad administrada.
    curl -n -X POST --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/storage-credentials --data "{
      \"name\": \"<credential-name>\",
      \"azure_managed_identity\": {
        \"access_connector_id\": \"<access-connector-id>\",
        \"managed_identity_id\": \"<managed-identity-id>\"
      }
    }"
    
  6. Anote el id. de credencial de almacenamiento de la respuesta.

  7. Ejecute el siguiente comando cURL para recuperar metastore_id, donde <databricks-instance> es la dirección URL del área de trabajo donde se generó el token de acceso personal.

    curl -n GET--header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastore_summary
    
  8. Ejecute el comando cURL siguiente para actualizar el metastore con la credencial de almacenamiento raíz nueva.

    Reemplace los valores de marcador de posición:

    • <databricks-instance>: dirección URL del área de trabajo donde se generó el token de acceso personal.
    • <metastore-id>: el id. de metastore que recuperó en el paso anterior.
    • <storage-credential-id>: id. de credencial de almacenamiento.
    curl -n -X PATCH --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastores/<metastore-id> --data
    "{\"storage_root_credential_id\": \"<storage-credential-id>\"}"