Compartir a través de


Protección de acceso saliente del área de trabajo para cargas de trabajo de ingeniería de datos

La protección de acceso saliente del área de trabajo permite un control preciso sobre las comunicaciones externas de las áreas de trabajo de Microsoft Fabric. Cuando esta característica está habilitada, los elementos del área de trabajo de ingeniería de datos, como cuadernos, definiciones de trabajos de Spark y lakehouses, están restringidos a realizar conexiones salientes a puntos de conexión públicos a menos que el acceso se conceda explícitamente a través de puntos de conexión privados administrados aprobados. Esta funcionalidad es fundamental para las organizaciones en entornos seguros o regulados, ya que ayuda a evitar la filtración de datos y a aplicar límites de red de la organización.

Comprender la protección del acceso de salida con ingeniería de datos

Cuando la protección de acceso saliente está habilitada, todas las conexiones salientes del área de trabajo se bloquean de forma predeterminada. Los administradores del área de trabajo pueden crear excepciones para conceder acceso solo a destinos aprobados mediante la configuración de puntos de conexión privados administrados:

Diagrama de la protección de acceso saliente del área de trabajo en un escenario de ingeniería de datos.

Configuración de la protección de acceso saliente para la ingeniería de datos

Para configurar la protección de acceso saliente para la ingeniería de datos:

  1. Siga los pasos para habilitar la protección de acceso saliente.

  2. Después de habilitar la protección de acceso saliente, puede configurar puntos de conexión privados administrados para permitir el acceso saliente a otras áreas de trabajo o recursos externos según sea necesario.

Una vez configurado, los elementos de ingeniería de datos solo se pueden conectar a los puntos de conexión privados administrados aprobados, mientras que todas las demás conexiones salientes permanecen bloqueadas.

Tipos de elementos de ingeniería de datos admitidos

Los siguientes tipos de componentes de ingeniería de datos son compatibles con la protección de acceso externo.

  • Casas junto al lago
  • Blocs de notas
  • Definiciones de trabajos de Spark
  • Environments

En las secciones siguientes se explica cómo la protección de acceso saliente afecta a los tipos de elementos de ingeniería de datos específicos del área de trabajo.

Blocs de notas

Cuando la protección de acceso saliente está habilitada en un área de trabajo, los cuadernos pueden hacer referencia a un destino solo si se configura un punto de conexión privado administrado desde el área de trabajo hasta el destino.

Fuente Destino ¿Está configurado un punto de conexión privado administrado? ¿Puede el cuaderno o el trabajo de Spark conectarse al destino?
Cuaderno (área de trabajo A) Lakehouse (área de trabajo B) Sí, se configura un punto de conexión privado administrado entre áreas de trabajo de A a B en A.
Cuaderno (área de trabajo A) Lakehouse (área de trabajo B) No No
Cuaderno (área de trabajo A) Azure Data Lake Storage externo (ADLS) G2/otro origen de datos Sí, se configura un punto de conexión privado administrado desde A al origen de datos externo.
Cuaderno (área de trabajo A) Fuente de datos externa de ADLS G2/u otra fuente de datos No No

Comprensión del comportamiento de la ruta de acceso de archivos en cuadernos de Fabric

Al acceder a los datos de Lakehouse desde un cuaderno de Fabric, puede hacer referencia a archivos mediante rutas de acceso relativas o completas (absolutas). Comprender las diferencias es importante para el acceso correcto a los datos, especialmente cuando se trabaja entre áreas de trabajo.

Caminos relativos

Las rutas de acceso relativas son la manera más sencilla y común de hacer referencia a archivos dentro de su Lakehouse actual. Al arrastrar y colocar un archivo desde el explorador de Lakehouse en una celda del cuaderno, se usa automáticamente una ruta de acceso relativa.

Example:
Files/people.csv

Código de Spark:

df = spark.read.format("csv").option("header", "true").load("Files/people.csv")

Las rutas de acceso relativas funcionan de forma predeterminada y no requieren ninguna configuración adicional.

Rutas de acceso completas (absolutas)

Las rutas de acceso completamente cualificadas especifican la ubicación completa de un archivo, incluyendo la información del espacio de trabajo y de Lakehouse. Sin embargo, el uso de nombres para mostrar en estas rutas de acceso puede provocar errores, como tiempos de espera de socket, ya que la sesión de Spark no puede resolverlos de forma predeterminada.

Ejemplo incorrecto (producirá un error):
abfss://your_workspace@onelake.dfs.fabric.microsoft.com/your_lakehouse.Lakehouse/Files/people.csv

Acceso a datos entre áreas de trabajo

Para acceder a los archivos en un Lakehouse ubicado en otro área de trabajo, use una ruta de acceso completa que incluya el ID del área de trabajo y el ID de Lakehouse (no sus nombres para mostrar). Esto garantiza que Spark pueda resolver la ruta de acceso y acceder a los datos.

Formato de URI correcto:
abfss://<workspace_id>@onelake.dfs.fabric.microsoft.com/<lakehouse_id>/Files/people.csv

Código de Spark de ejemplo:

df = spark.read.format("csv").option("header", "true").load("abfss://4c8efb42-7d2a-4a87-b1b1-e7e98bea053d@onelake.dfs.fabric.microsoft.com/5a0ffa3d-80b9-49ce-acd2-2c9302cce6b8/Files/people.csv")

Cómo encontrar los identificadores de Área de trabajo y Lakehouse

  • ID del área de trabajo: El GUID después /groups/ en la dirección URL de tu área de trabajo de Fabric.
  • Identificador de Lakehouse: El GUID después de /lakehouses/ en la URL.

Dirección URL de ejemplo:
https://app.fabric.microsoft.com/groups/4c8efb42-7d2a-4a87-b1b1-e7e98bea053d/lakehouses/5a0ffa3d-80b9-49ce-acd2-2c9302cce6b8/...

Nota:

Use siempre el identificador del área de trabajo y el identificador de Lakehouse en el URI al acceder a los datos entre áreas de trabajo.

Trabajos de Spark

Cuando la protección de acceso saliente del área de trabajo está habilitada, se impide que los clústeres de Spark realicen conexiones salientes a la red pública de Internet. Esto incluye:

  • Instalación de paquetes de Python directamente desde PyPI mediante pip install
  • Acceso a dominios públicos, como https://login.microsoftonline.com
  • Conexión a cualquier API o sitios web externos

Microsoft Fabric aplica esta restricción a través de Redes Virtuales Administradas (Managed VNETs), que aíslan los clústeres de Spark de redes externas a menos que se conceda acceso explícito.

Protección de la conectividad con puntos de conexión privados administrados

Para permitir que los clústeres de Spark se conecten a recursos externos mientras mantiene la seguridad, debe usar puntos de conexión privados administrados. Estos puntos de conexión permiten conexiones seguras y aprobadas a:

  • Servicios externos (por ejemplo, Azure SQL Database, Azure Blob Storage)
  • Otras áreas de trabajo de Fabric dentro del mismo inquilino

Solo se permiten las conexiones establecidas a través de puntos de conexión privados administrados aprobados. El resto de intentos de acceso salientes están bloqueados de forma predeterminada.

Instalación de bibliotecas de forma segura en áreas de trabajo protegidas con acceso saliente

Dado que Fabric bloquea el tráfico público de Internet, los clústeres de Spark no pueden instalar directamente paquetes desde PyPI mediante pip install.

Tiene dos opciones seguras para instalar bibliotecas en un área de trabajo con la protección de acceso saliente habilitada:

  1. Carga y uso de archivos de rueda: Prepare manualmente los archivos de rueda del paquete de Python necesarios en un recurso de proceso de confianza y cárguelos en el entorno de Fabric. Este método garantiza que solo se instalen paquetes aprobados y evite el acceso público a Internet.

  2. Hospedar un reflejo privado de PyPI: Configure un repositorio de PyPI privado en Azure Storage y sincroníquelo con los paquetes seleccionados del índice público de PyPI. Configure el entorno de Fabric para instalar paquetes desde este reflejo privado mediante puntos de conexión privados administrados y mantener el cumplimiento de las directivas de seguridad de red.

Elija el enfoque que mejor se adapte a los requisitos de su organización para la administración y seguridad de paquetes.

Opción 1: Cargar y usar archivos de rueda

  1. Identifique los paquetes que faltan no incluidos en el entorno de ejecución de Spark de Fabric.

  2. Ejecute el siguiente script en el recurso de proceso para configurar un entorno de Python local que sea el mismo que el entorno de ejecución de Spark de Microsoft Fabric 1.3. Este script requiere un archivo YAML que contenga una lista de todas las bibliotecas incluidas en el entorno prebaked.

  3. Asegúrese de que las bibliotecas privadas hospedadas por Microsoft se quitan de este YAML.

    wget https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    chmod 755 -R /usr/lib/miniforge3/ 
    export PATH="/usr/lib/miniforge3/bin:$PATH" 
    sudo apt-get update 
    sudo apt-get -yq install gcc g++ 
    conda env create -n <custom-env-name> -f Python<version>-CPU.yml 
    source activate <custom-env-name> 
    
  4. El script se puede usar para pasar el archivo de requirements.txt, que tiene todos los paquetes y versiones que pretende instalar en el entorno de ejecución de Spark. Imprime los nombres de los nuevos archivos de rueda o dependencias para los requisitos de la biblioteca de entrada.

    pip install -r <input-user-req.txt> > pip_output.txt 
    cat pip_output.txt | grep "Using cached *" 
    
  5. Descargue .whl los archivos manualmente.

  6. Use Artefacto de entorno para cargar todas las ruedas necesarias.

  7. Adjunte el entorno a cuadernos o trabajos.

Opción 2: Hospedar un reflejo privado de PyPI en Azure Storage

Prerrequisitos
Sincronización inicial del repositorio pyPI

Como paso inicial, debe realizar una sincronización del repositorio pyPI. El repositorio pyPI completo contiene un gran número de paquetes y se expande continuamente, por lo que la descarga inicial puede tardar de 8 a 48 horas, dependiendo del hardware y la red. Para conocer el tamaño actual del repositorio y los recuentos de paquetes, consulte Estadísticas · PyPI.

Maintenance

Se requiere supervisión y actualizaciones periódicas para mantener sincronizado el reflejo. Los siguientes factores afectan a la velocidad de sincronización:

  • Velocidad de red.
  • Recursos de servidor como CPU, memoria y E/S de disco en el recurso de proceso que ejecuta Bandersnatch.
  • La velocidad del disco (SSD frente a HDD) afecta a la rapidez con la que Bandersnatch escribe datos.
  • Configuración inicial frente a sincronización de mantenimiento: la sincronización inicial descarga todo el repositorio y puede tardar de 8 a 48 horas, pero las sincronizaciones posteriores son más rápidas porque solo actualizan paquetes nuevos o modificados.
Pasos de configuración
  1. Configure una máquina virtual Linux o un subsistema de Windows para la máquina de desarrollo de Linux (WSL).

    wget https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    chmod 755 -R /usr/lib/miniforge3/ 
    
    # Add Python executable to PATH 
    export PATH="/usr/lib/miniforge3/bin:$PATH" 
    
  2. Instale Bandersnatch para reflejar PyPI. Bandersnatch es una herramienta de creación de reflejo de PyPI que descarga todo el repositorio pyPI y los archivos de índice asociados en el sistema de archivos local.

    # Install Bandersnatch 
    pip install bandersnatch
    
  3. Configurar Bandersnatch: cree un archivo bandersnatch.conf con las configuraciones especificadas en el ejemplo de GitHub en bandersnatch/src/bandersnatch/example.conf.

  4. Ejecute un comando reflejado para realizar una sincronización única con el servidor principal de PyPI.

    bandersnatch --config <path-to-bandersnatch.conf> mirror

    Este comando crea los siguientes subdirectorios en el directorio reflejado en el sistema de archivos local.

    Nota:

    La sincronización inicial tarda tiempo en ejecutarse (consulte Estadísticas · PyPI). Bandersnatch también admite el reflejo selectivo mediante complementos de lista de permitidos y lista de bloqueados, lo que permite una administración más eficaz de las dependencias. Al filtrar paquetes innecesarios, puede reducir el tamaño del reflejo, lo que minimiza tanto el costo como el esfuerzo de mantenimiento. Por ejemplo, si el reflejo está diseñado únicamente para Fabric, puede excluir archivos binarios de Windows para optimizar el almacenamiento. Se recomienda evaluar estas opciones de filtrado en función del caso de uso.

    Consulte también Filtrado de reflejo: documentación de Bandersnatch.

  5. Para comprobar la configuración del reflejo, puede usar un servidor HTTP para atender el reflejo local de PyPI. Este comando inicia un servidor HTTP simple en el puerto 8000 que sirve el contenido del directorio reflejado:

    cd <directory-to-mirror>
    python -m http.server 8000
    
  6. Configure pip para usar el reflejo local de PyPI:

    pip install <package> -index-url http://localhost:8000/simple 
    
  7. Cargue Mirror en la cuenta de almacenamiento y seleccione Habilitar sitio web estático en la cuenta de Azure Storage. Esta configuración permite hospedar contenido estático como PyPI en la página de índice. Al habilitar esta configuración, se genera automáticamente un contenedor denominado $web.

    Puede usar la CLI de Azure o AzCopy de blobfuse2 para cargar el reflejo local desde la máquina de desarrollo a la cuenta de Azure Storage.

    • Cargue la carpeta packages en el contenedor elegido en el contenedor de la cuenta de almacenamiento.
    • Cargue carpetas simples, PyPI, estadísticas locales y JSON en $web contenedor de la cuenta de almacenamiento.
  8. Para usar este reflejo en el elemento de entorno de Fabric, cree dos puntos de conexión privados administrados en Fabric:

    • Uno para el contenedor de blobs (paquetes)
    • Uno para el sitio web estático (índice)
  9. Use El artefacto de entorno para especificar un archivo yml para instalar la administración de bibliotecas en entornos de Fabric.

    dependencies: 
      - pip 
      - pip: 
        - pytest==8.2.2 
        - --index-url https://<storage-account-name>.z5.web.core.windows.net/simple 
    
  10. O bien, puede instalar paquetes directamente dentro de un cuaderno mediante el %pip install comando :

   %pip install pytest --index-url https://<storage-account-name>.z5.web.core.windows.net/simple

Esquemas de Lakehouse y protección de acceso saliente

Lakehouses que usan esquemas son totalmente compatibles cuando se accede desde elementos dentro de la misma área de trabajo, incluido cuando está habilitada la protección de acceso saliente.

En escenarios de acceso entre áreas de trabajo, el comportamiento difiere según cómo se accede a Lakehouse cuando se habilita la protección de acceso saliente en el espacio de trabajo consumidor.

Escenarios admitidos

  • Los elementos de productor y consumidor se encuentran en la misma área de trabajo
  • Lakehouse usa esquemas
  • El acceso se realiza mediante las API basadas en DataFrame de Spark

En estos escenarios, las operaciones de esquema de Lakehouse funcionan según lo previsto.

Comportamiento entre áreas de trabajo con la protección de acceso saliente habilitada

Cuando se habilita la protección de acceso de salida en un área de trabajo y se accede a una instancia de Lakehouse habilitada para el esquema desde otra área de trabajo, se aplica el siguiente comportamiento:

  • ✅ El acceso mediante las API de DataFrame de Spark (por ejemplo, la lectura de tablas en DataFrames) sigue funcionando.
  • ❌ Es posible que se produzca un error en el acceso mediante instrucciones SQL de Spark .

Por ejemplo, spark.read.table() tiene éxito, mientras que SELECT * FROM table puede fallar en escenarios de trabajo cruzado cuando está habilitada la protección de acceso saliente.

Descripción del comportamiento de las rutas de acceso de archivo

Al trabajar con datos en Lakehouse mediante un cuaderno de Fabric, puede hacer referencia a archivos de dos maneras principales:

  • Si el área de trabajo tiene habilitada la protección de acceso saliente, usa redes virtuales administradas (VNET) para Spark. En el caso de que se desactiven los grupos de inicio, puedes esperar que las sesiones de Spark tomen entre 3 y 5 minutos en iniciarse.

  • Con la protección de acceso saliente, se bloquea todo el acceso público desde Spark. Esta restricción impide que los usuarios descarguen bibliotecas directamente desde canales públicos como PyPI mediante pip. Para instalar bibliotecas para sus trabajos de ingeniería de datos, los usuarios tienen dos opciones (para obtener más información, consulte Instalación de bibliotecas de forma segura en áreas de trabajo protegidas con acceso saliente):

    • Paquetes de bibliotecas de referencia de un origen de datos conectado al espacio de trabajo de Fabric a través de un punto de conexión privado administrado.

    • Cargue archivos wheel para las bibliotecas y dependencias necesarias (que aún no se incluyen en el entorno de ejecución preempaquetado).

  • Al habilitar la protección de acceso saliente, se bloquea todo el acceso público desde el área de trabajo. Por lo tanto, para consultar un Lakehouse desde otro workspace, debe crear un punto de conexión privado administrado entre workspaces para permitir que los trabajos de Spark establezcan una conexión.

  • El uso de rutas de acceso completas con nombres de espacio de trabajo y "lakehouse" puede provocar una excepción de tiempo de espera de socket. Para acceder a los archivos, use rutas relativas para el Lakehouse actual o use una ruta completa que incluya el ID del área de trabajo y el ID del Lakehouse (no el nombre mostrado). Este enfoque garantiza que la sesión de Spark pueda resolver la ruta de acceso correctamente y evitar errores de tiempo de espera de socket. Más información.