Protección de un entorno de entrenamiento de Azure Machine Learning con redes virtuales (SDKv1)

SE APLICA A:Azure ML del SDK de Python v1

En este artículo, aprenderá a proteger entornos de entrenamiento con una red virtual en Azure Machine Learning mediante el SDK de Python v1.

La instancia de proceso y el clúster de proceso de Azure Machine Learning pueden usarse para entrenar modelos en una red virtual con seguridad. Al planificar su entorno, puede configurar la instancia o el clúster de proceso con o sin una dirección IP pública. Las diferencias generales entre las dos son:

  • Sin IP pública: reduce gastos al no tener los mismos requisitos de recursos de red. Mejora la seguridad al eliminar el requisito del tráfico de entrada procedente de internet. Pero deben hacerse cambios adicionales en la configuración para habilitar el acceso de salida a los recursos necesarios (Microsoft Entra ID, Azure Resource Manager, etc.).
  • IP pública: viene de manera predeterminada. Cuesta más debido a los recursos de red de Azure adicionales. Requiere comunicación de entrada desde el servicio Azure Machine Learning a través del internet público.

La siguiente tabla presenta las diferencias entre estas configuraciones:

Configuración Con IP pública Sin IP pública
Tráfico entrante AzureMachineLearning etiqueta de servicio. Ninguno
Tráfico saliente Puede acceder al internet público sin restricciones de manera predeterminada.
Puede restringir a qué accede mediante un grupo de seguridad de red o un firewall.
De forma predeterminada, no puede acceder a Internet. Si todavía puede enviar tráfico saliente a Internet, se debe al acceso saliente predeterminado de Azure y tiene un grupo de seguridad de red que permite la salida a Internet. No se recomienda usar el acceso saliente predeterminado.
Si necesita acceso saliente a Internet, se recomienda usar una puerta de enlace Virtual Network NAT o un firewall en su lugar si necesita enrutar el tráfico saliente a los recursos necesarios en Internet.
Recursos de red de Azure Dirección IP pública, equilibrador de carga, interfaz de red Ninguno

También puede usar Azure Databricks o HDInsight para entrenar modelos en una red virtual.

Sugerencia

Microsoft recomienda usar las redes virtuales administradas de Azure Machine Learning en lugar de seguir los pasos de este artículo. Con una red virtual administrada, Azure Machine Learning se hace cargo del trabajo de aislamiento de red para el área de trabajo y los procesos administrados. También puede agregar puntos de conexión privados para los recursos necesarios para el área de trabajo, como la cuenta de Azure Storage. Para obtener más información, consulte Aislamiento de red gestionada del área de trabajo.

Nota:

Para información sobre el uso del Estudio de Azure Machine Learning y el SDK de Python v2, consulte Protección de entornos de entrenamiento (v2).

Para ver un tutorial sobre cómo crear áreas de trabajo seguras, consulte Tutorial: Creación de un área de trabajo seguro en Azure Portal o Tutorial: Creación de un área de trabajo seguro mediante una plantilla.

En este artículo aprenderá a proteger los siguientes recursos de proceso de entrenamiento en una red virtual:

  • Clúster de proceso de Azure Machine Learning
  • Instancia de proceso de Azure Machine Learning
  • Azure Databricks
  • Máquina virtual
  • Clúster de HDInsight

Importante

Los elementos en este artículo marcados como "versión preliminar" se encuentran actualmente en una versión preliminar pública. Se ofrece la versión preliminar sin Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Requisitos previos

  • Lea el artículo Introducción a la seguridad de red para comprender los escenarios comunes de redes virtuales y la arquitectura de red virtual general.

  • Una red virtual y una subred existentes que se usarán con los recursos de proceso. Esta VNet debe ser parte de la misma suscripción que su área de trabajo de Azure Machine Learning.

    • Recomendamos poner las cuentas de almacenamiento que se utilizan en su área de trabajo y trabajos de entrenamiento en la misma región de Azure que piensa usar para las instancias o los clústeres de proceso. Puede conllevar costes de transferencia de datos y una latencia de red mayor si no están en la misma región de Azure.
    • Asegúrese de que la comunicación WebSocket permita *.instances.azureml.net y *.instances.azureml.ms en su VNet. Jupyter usa WebSockets en las instancias de proceso.
  • Una subred existente en la red virtual. Esta subred se usa al crear instancias y clústeres de proceso.

    • Asegúrese de que la subred no está delegada a otros servicios de Azure.
    • Asegúrese de que la subred contiene suficientes direcciones IP libres. Cada instancia de proceso requiere una dirección IP. Cada nodo de un clúster de proceso requiere una dirección IP.
  • Si tiene su propio servidor DNS, recomendamos usar el reenvío DNS para resolver los nombres de dominio completos (FQDN) de las instancias y los clústeres de proceso. Para más información, consulte Uso de un DNS personalizado con Azure Machine Learning.

  • Para implementar recursos en una red virtual o subred, la cuenta de usuario debe tener permisos para realizar las siguientes acciones en los controles de acceso basados en roles de Azure (Azure RBAC):

    • "Microsoft.Network/*/read" en el recurso de red virtual. Este permiso no es necesario para las implementaciones de plantillas de Azure Resource Manager (ARM).
    • "Microsoft.Network/virtualNetworks/join/action" en el recurso de red virtual.
    • "Microsoft.Network/virtualNetworks/subnets/join/action" en el recurso de subred.

    Para obtener más información sobre Azure RBAC con redes, consulte los roles integrados de redes.

Limitaciones

Clúster o instancia de proceso de Azure Machine Learning

  • Los clústeres de proceso se pueden crear en una red virtual y región diferentes a la del área de trabajo. Sin embargo, esta funcionalidad solo está disponible mediante el SDK v2, la CLI v2 o Studio. Para obtener más información, consulte la versión v2 de entornos de entrenamiento seguros.

  • Azure Lighthouse no admite la implementación de clústeres o instancias de proceso en una red virtual.

  • El puerto 445 debe estar abierto para las comunicaciones de red privadas entre las instancias de proceso y la cuenta de almacenamiento predeterminada durante el entrenamiento. Por ejemplo, si los procesos están en una red virtual y la cuenta de almacenamiento está en otra, no bloquee el puerto 445 para la red virtual de la cuenta de almacenamiento.

Azure Databricks

  • La red virtual debe estar en la misma suscripción y región que el área de trabajo de Azure Machine Learning.
  • Si las cuentas de Azure Storage del área de trabajo también están protegidas en una red virtual, deben estar en la misma red virtual que el clúster de proceso de Azure Databricks.
  • Además de las subredes databricks-private y databricks-public utilizadas por Azure Databricks, también se requiere la subred predeterminada creada para la red virtual.
  • Azure Databricks no usa un punto de conexión privado para comunicarse con la red virtual.

Para obtener más información sobre el uso de Azure Databricks en una red virtual, vea Implementación de Azure Databricks en la red virtual de Azure.

Azure HDInsight o máquina virtual

  • Azure Machine Learning solo admite máquinas virtuales que ejecuten Ubuntu.

Clúster o instancia de proceso sin IP pública

Importante

Si ha estado usando instancias de proceso o clústeres de proceso configurados para no tener una IP pública sin participar en la versión preliminar, necesitará eliminarlos y volver a crearlos después del 20 de enero de 2023, cuando la característica esté disponible de forma general.

Si estuvo usando la versión preliminar de ninguna IP pública, quizá necesite modificar qué tráfico de entrada y de salida permite, ya que los requisitos han cambiado para la versión con disponibilidad general:

  • Requisitos de salida: dos salientes más que solo se usan para la administración de las instancias y los clústeres de proceso. Microsoft posee el destino de estas etiquetas de servicio:
    • Etiqueta de servicio AzureMachineLearning en el puerto UDP 5831.
    • Etiqueta de servicio BatchNodeManagement en el puerto TCP 443.

Las siguientes configuraciones son adicionales a las indicadas en la sección Requisitos Previos y son específicas para la creación de instancias o clústeres de proceso configurados para no tener IP pública:

  • Debe usar un punto de conexión privado del área de trabajo para que el recurso de proceso se comunique con los servicios de Azure Machine Learning desde la red virtual. Para obtener más información, consulte Configuración de un punto de conexión privado para un área de trabajo de Azure Machine Learning.

  • En su VNet, permita el tráfico de salida a estas etiquetas de servicio o nombres de dominio completo (FQDN):

    Etiqueta de servicio Protocolo Port Notas
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Comunicación con el servicio de Azure Machine Learning.
    BatchNodeManagement.<region> ANY 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Comunicación con Azure Batch. La instancia de proceso y el clúster de proceso se implementan con el servicio de Azure Batch.
    Storage.<region> TCP 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Esta etiqueta de servicio se usa para comunicarse con la cuenta de Azure Storage que Azure Batch usa.

    Importante

    El acceso de salida a Storage.<region> podría usarse potencialmente para filtrar datos de su área de trabajo. Puede mitigar esta vulnerabilidad mediante una directiva de punto de conexión de servicio. Para obtener más información, consulte el artículo Prevención de filtración de datos de Azure Machine Learning.

    FQDN Protocolo Port Notas
    <region>.tundra.azureml.ms UDP 5831 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning.
    graph.windows.net TCP 443 Comunicación con la API de Microsoft Graph.
    *.instances.azureml.ms TCP 443/8787/18881 Comunicación con Azure Machine Learning.
    *.<region>.batch.azure.com ANY 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Comunicación con Azure Batch.
    *.<region>.service.batch.azure.com ANY 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Comunicación con Azure Batch.
    *.blob.core.windows.net TCP 443 Comunicación con almacenamiento de blobs de Azure.
    *.queue.core.windows.net TCP 443 Comunicación con el almacenamiento de Azure Queue.
    *.table.core.windows.net TCP 443 Comunicación con el almacenamiento de Azure Table.
  • Cree un firewall y reglas de salida o una puerta de enlace NAT y grupos de servicios de red para permitir el tráfico de salida. El proceso no puede comunicarse con los recursos del internet público sin esta configuración ya que no tiene una dirección IP pública. Por ejemplo, no podría comunicarse con Microsoft Entra ID o Azure Resource Manager. La instalación de paquetes Python desde fuentes públicas también necesitaría esta configuración.

    Para más información sobre el tráfico de salida que Azure Machine Learning usa, consulte los siguientes artículos:

Use la información siguiente para crear una instancia o un clúster de proceso sin una dirección IP pública:

Para crear una instancia de proceso o un clúster de proceso sin una dirección IP pública, use la interfaz de usuario de Estudio de Azure Machine Learning para crear el recurso:

  1. Inicie sesión en Estudio de Azure Machine Learning y seleccione su suscripción y área de trabajo.

  2. Seleccione la página Proceso desde la barra de navegación izquierda.

  3. Seleccione + Nuevo desde la barra de navegación de instancia de proceso o clúster de proceso.

  4. Configure el tamaño y configuración de la VM que necesite y seleccione Siguiente.

  5. Desde las Opciones Avanzadas, seleccione Habilitar red virtual, su red virtual y su subred, y seleccione la opción Sin IP Pública en la sección VNet/subred.

    A screenshot of how to configure no public IP for compute instance and compute cluster.

Sugerencia

También puede usar la extensión del SDK v2 de Azure Machine Learning o la CLI de Azure para ML v2. Para obtener información sobre cómo crear una instancia o clúster de proceso sin una dirección IP pública, consulte la versión v2 del artículo Protección de un entorno de entrenamiento de Azure Machine Learning con redes virtuales.

Instancia o clúster de proceso con IP pública

Las siguientes configuraciones son adicionales a las indicadas en la sección Requisitos Previos y son específicas para la creación de instancias o clústeres de proceso que tienen una IP pública:

  • Si pone múltiples instancias o clústeres de proceso en una red virtual, podría necesitar una subida de cuota para uno o más de sus recursos. El clúster o la instancia de proceso de Machine Learning asigna automáticamente recursos de red al grupo de recursos que contiene la red virtual. Para cada clúster o instancia de proceso, el servicio asigna los recursos siguientes:

    • Un grupo de seguridad de red (NSG) se genera automáticamente. Este NSG permite el tráfico TCP de entrada en el puerto 44224 proveniente de la etiqueta de servicio AzureMachineLearning.

      Importante

      La instancia de proceso y el clúster de proceso crean automáticamente un grupo de seguridad de red con las reglas necesarias.

      Si tiene otro grupo de seguridad de red en el nivel de subred, las reglas del grupo de seguridad de red de nivel de subred no deben entrar en conflicto con las reglas del grupo de seguridad de red creado automáticamente.

      Para obtener información sobre cómo los grupos de seguridad de red filtran el tráfico de red, consulte Cómo filtran el tráfico de red los grupos de seguridad de red.

    • Un equilibrador de carga

    En el caso de los clústeres de proceso, estos recursos se eliminan cada vez que se reduce el clúster verticalmente hasta 0 nodos y se crean al escalar verticalmente.

    En el caso de una instancia de proceso, estos recursos se mantienen hasta que se elimina la instancia. Detener la instancia no hace que se quiten los recursos.

    Importante

    Estos recursos están limitados por las cuotas de recursos de la suscripción. Si el grupo de recursos de red virtual está bloqueado, se producirá un error en la eliminación de la instancia o el clúster de proceso. No se puede eliminar el equilibrador de carga hasta que se elimine la instancia o el clúster de proceso. Asegúrese también de que no haya ninguna asignación de Azure Policy que prohíba la creación de grupos de seguridad de red.

  • En su VNet, permita el tráfico TCP de entrada en el puerto 44224 proveniente de la etiqueta de servicio AzureMachineLearning.

    Importante

    Al clúster o a la instancia de proceso se le asigna dinámicamente una dirección IP en el momento de su creación. No puede asignarlo estáticamente a su firewall ya que la dirección es desconocida antes de crearse y el acceso de entrada es una parte necesaria del proceso de creación. No obstante, debe crear una ruta definida por el usuario si usa un firewall con la VNet para permitir este tráfico de entrada.

  • En su VNet, permita el tráfico de salida para las siguientes etiquetas de servicio:

    Etiqueta de servicio Protocolo Port Notas
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Comunicación con el servicio de Azure Machine Learning.
    BatchNodeManagement.<region> ANY 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Comunicación con Azure Batch. La instancia de proceso y el clúster de proceso se implementan con el servicio de Azure Batch.
    Storage.<region> TCP 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Esta etiqueta de servicio se usa para comunicarse con la cuenta de Azure Storage que Azure Batch usa.

    Importante

    El acceso de salida a Storage.<region> podría usarse potencialmente para filtrar datos de su área de trabajo. Puede mitigar esta vulnerabilidad mediante una directiva de punto de conexión de servicio. Para obtener más información, consulte el artículo Prevención de filtración de datos de Azure Machine Learning.

    FQDN Protocolo Port Notas
    <region>.tundra.azureml.ms UDP 5831 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning.
    graph.windows.net TCP 443 Comunicación con la API de Microsoft Graph.
    *.instances.azureml.ms TCP 443/8787/18881 Comunicación con Azure Machine Learning.
    *.<region>.batch.azure.com ANY 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Comunicación con Azure Batch.
    *.<region>.service.batch.azure.com ANY 443 Reemplace <region> por la región de Azure que contiene su área de trabajo de Azure Machine Learning. Comunicación con Azure Batch.
    *.blob.core.windows.net TCP 443 Comunicación con almacenamiento de blobs de Azure.
    *.queue.core.windows.net TCP 443 Comunicación con el almacenamiento de Azure Queue.
    *.table.core.windows.net TCP 443 Comunicación con Azure Table Storage.

SE APLICA A:Azure ML del SDK de Python v1

import datetime
import time

from azureml.core.compute import ComputeTarget, ComputeInstance
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your instance
# Compute instance name should be unique across the azure region
compute_name = "ci{}".format(ws._workspace_id)[:10]

# Verify that instance does not exist already
try:
    instance = ComputeInstance(workspace=ws, name=compute_name)
    print('Found existing instance, use it.')
except ComputeTargetException:
    compute_config = ComputeInstance.provisioning_configuration(
        vm_size='STANDARD_D3_V2',
        ssh_public_access=False,
        vnet_resourcegroup_name='vnet_resourcegroup_name',
        vnet_name='vnet_name',
        subnet_name='subnet_name',
        # admin_user_ssh_public_key='<my-sshkey>'
    )
    instance = ComputeInstance.create(ws, compute_name, compute_config)
    instance.wait_for_completion(show_output=True)

Cuando finalice el proceso de creación, entrene el modelo. Para más información, consulte Selección y uso de un destino de proceso para entrenamiento.

Azure Databricks

  • La red virtual debe estar en la misma suscripción y región que el área de trabajo de Azure Machine Learning.
  • Si las cuentas de Azure Storage del área de trabajo también están protegidas en una red virtual, deben estar en la misma red virtual que el clúster de proceso de Azure Databricks.
  • Además de las subredes databricks-private y databricks-public utilizadas por Azure Databricks, también se requiere la subred predeterminada creada para la red virtual.
  • Azure Databricks no usa un punto de conexión privado para comunicarse con la red virtual.

Para obtener información específica sobre el uso de Azure Databricks con una red virtual, consulte Implementar Azure Databricks en su red virtual de Azure.

Acceso a la red pública de Internet necesario para entrenar modelos

Importante

Las secciones anteriores de este artículo muestran las configuraciones necesarias para crear recursos de procesos. Esta sección muestra la información de configuración necesaria para usar estos recursos para entrenar modelos.

Azure Machine Learning requiere acceso entrante y saliente a la red pública de Internet. En las tablas siguientes se proporciona información general sobre el acceso necesario y para qué sirve. En el caso de las etiquetas de servicio que terminan en .region, reemplace region por la región de Azure que contiene el área de trabajo. Por ejemplo, Storage.westus:

Sugerencia

En la pestaña requerida se enumera la configuración necesaria de entrada y de salida. La pestaña situacional muestra configuraciones opcionales de entrada y de salida que necesitan algunas configuraciones específicas que quizás quiera habilitar.

Dirección Protocolo y
ports
Etiqueta de servicio Propósito
Salida TCP: 80, 443 AzureActiveDirectory Autenticación mediante Microsoft Entra ID.
Salida TCP: 443, 18881
UDP: 5831
AzureMachineLearning Usar los servicios de Azure Machine Learning.
IntelliSense de Python en cuadernos usa el puerto 18881.
La creación, actualización y eliminación de una instancia de proceso de Azure Machine Learning usa el puerto 5831.
Salida ANY: 443 BatchNodeManagement.region Comunicación con el back-end de Azure Batch para las instancias o clústeres de proceso de Azure Machine Learning.
Salida TCP: 443 AzureResourceManager Creación de recursos de Azure con Azure Machine Learning, CLI de Azure y el SDK de Azure Machine Learning.
Salida TCP: 443 Storage.region Acceda a los datos almacenados en la cuenta de Azure Storage para el clúster de proceso y la instancia de proceso. Para obtener información sobre cómo evitar la filtración de datos en esta salida, consulte Protección contra la filtración de datos.
Salida TCP: 443 AzureFrontDoor.FrontEnd
* No es necesario en Microsoft Azure operado por 21Vianet.
Establecer un punto de entrada global para Estudio de Azure Machine Learning. Almacene imágenes y entornos para AutoML. Para obtener información sobre cómo evitar la filtración de datos en esta salida, consulte Protección contra la filtración de datos.
Salida TCP: 443 MicrosoftContainerRegistry.region
Sepa que esta etiqueta tiene una dependencia en la etiqueta AzureFrontDoor.FirstParty
Acceder a las imágenes de Docker proporcionadas por Microsoft. Configurar el enrutador de Azure Machine Learning para Azure Kubernetes Service.

Sugerencia

Si necesita las direcciones IP, en lugar de etiquetas de servicio, use una de las siguientes opciones:

Las direcciones IP pueden cambiar periódicamente.

También es posible que tenga que permitir el tráfico saliente a Visual Studio Code y a sitios que no son de Microsoft para la instalación de los paquetes requeridos por el proyecto de aprendizaje automático. En la tabla siguiente se enumeran los repositorios usados habitualmente para el aprendizaje automático:

Nombre de host Propósito
anaconda.com
*.anaconda.com
Se usa para instalar paquetes predeterminados.
*.anaconda.org Se usa para obtener datos del repositorio.
pypi.org Se usa para enumerar las dependencias del índice predeterminado, si hay alguna, y el índice no se sobrescribe con la configuración del usuario. Si el índice se sobrescribe, también debe permitir *.pythonhosted.org.
cloud.r-project.org Se usar al instalar paquetes CRAN para el desarrollo en R.
*.pytorch.org Se usa en algunos ejemplos basados en PyTorch.
*.tensorflow.org Se usa en algunos ejemplos basados en TensorFlow.
code.visualstudio.com Necesario para descargar e instalar el escritorio de Visual Studio Code. Esto no es necesario para la versión web de Visual Studio Code.
update.code.visualstudio.com
*.vo.msecnd.net
Se usa para recuperar bits de servidor de Visual Studio Code que se instalan en la instancia de proceso por medio de un script de instalación.
marketplace.visualstudio.com
vscode.blob.core.windows.net
*.gallerycdn.vsassets.io
Necesario para descargar e instalar extensiones de Visual Studio Code. Estos hosts habilitan la conexión remota con instancias de proceso proporcionadas mediante la extensión de Azure Machine Learning para Visual Studio Code. Para más información, consulte Conexión a una instancia de proceso de Azure Machine Learning en Visual Studio Code.
raw.githubusercontent.com/microsoft/vscode-tools-for-ai/master/azureml_remote_websocket_server/* Se usa para recuperar bits de servidor de WebSocket que se instalan en la instancia de proceso. El servidor de WebSocket se usa para transmitir solicitudes desde el cliente de Visual Studio Code (aplicación de escritorio) al servidor de Visual Studio Code que se ejecuta en la instancia de proceso.

Nota

Al usar la extensión de VS Code de Azure Machine Learning, la instancia de proceso remota requerirá un acceso a los repositorios públicos para instalar los paquetes requeridos por la extensión. Si la instancia de proceso requiere un proxy para acceder a estos repositorios públicos o a Internet, deberá establecer y exportar las variables de entorno HTTP_PROXY y HTTPS_PROXY en el archivo ~/.bashrc de la instancia de proceso. Este proceso se puede automatizar en el momento del aprovisionamiento mediante un script personalizado.

Al usar Azure Kubernetes Service (AKS) con Azure Machine Learning, habilite el tráfico siguiente a la red virtual de AKS:

Para obtener información sobre el uso de una solución de firewall, vea Uso de un firewall con Azure Machine Learning.

Pasos siguientes

Este artículo forma parte de una serie sobre la protección de un flujo de trabajo de Azure Machine Learning. Consulte los demás artículos de esta serie: