Protección de un entorno de inferencia de Azure Machine Learning con redes virtuales (v1)

SE APLICA A:Azure ML del SDK de Python v1

SE APLICA A:Extensión de ML de la CLI de Azure v1

En este artículo, aprenderá a proteger los entornos de inferencia con una red virtual en Azure Machine Learning. Este artículo es específico del flujo de trabajo de SDK/CLI v1 de implementación de un modelo como servicio web.

Sugerencia

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:

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

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

  • Clúster de Azure Kubernetes Service (AKS) predeterminado
  • Clúster privado de AKS
  • Clúster de AKS con Private Link

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.

  • 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/virtualNetworks/join/action" en el recurso de red virtual.
    • "Microsoft.Network/virtualNetworks/subnet/join/action" en el recurso de subred.

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

Importante

Algunos de los comandos de la CLI de Azure de este artículo usan la extensión azure-cli-ml o v1 para Azure Machine Learning. La compatibilidad con la extensión v1 finalizará el 30 de septiembre de 2025. La extensión v1 se podrá instalar y usar hasta esa fecha.

Se recomienda pasar a la extensión ml, o v2, antes del 30 de septiembre de 2025. Para más información sobre la extensión v2, consulte Extensión de la CLI de Azure ML y SDK de Python v2.

Limitaciones

Azure Container Instances

Cuando el área de trabajo de Azure Machine Learning está configurada con un punto de conexión privado, no se admite la implementación en Azure Container Instances en una red virtual. En su lugar, considere la posibilidad de usar un punto de conexión en línea administrado con aislamiento de red.

Azure Kubernetes Service

  • Si el clúster de AKS está detrás de una red virtual, el área de trabajo y sus recursos asociados (almacenamiento, almacén de claves, Azure Container Registry) deben tener puntos de conexión privados o puntos de conexión de servicio en la misma red virtual que la red virtual del clúster de AKS. Lea el tutorial de creación de un área de trabajo segura para agregar esos puntos de conexión privados o puntos de conexión de servicio a la red virtual.
  • Si el área de trabajo tiene un punto de conexión privado, el clúster de Azure Kubernetes Service debe estar en la misma región de Azure que el área de trabajo.
  • El uso de un nombre de dominio completo (FQDN) público con un clúster de AKS privadono se admite con Azure Machine Learning.

Azure Kubernetes Service

Importante

Para usar un clúster de AKS en una red virtual, primero siga los requisitos previos de Configuración de redes avanzadas en Azure Kubernetes Service (AKS).

Para agregar AKS en una red virtual a su área de trabajo, siga los pasos siguientes:

  1. Inicie sesión en Azure Machine Learning Studio y, después, seleccione la suscripción y el área de trabajo.

  2. Seleccione Proceso a la izquierda, Inference clusters (Clústeres de inferencia) en el centro y, luego, seleccione + Nuevo.

    Captura de pantalla del cuadro de diálogo de creación de clústeres de inferencia.

  3. En el cuadro de diálogo Create inference cluster (Crear clúster de inferencia), seleccione Crear nuevo y el tamaño de máquina virtual que se usará para el clúster. Por último, seleccione Siguiente.

    Captura de pantalla de la configuración de máquina virtual.

  4. En la sección Parámetros de configuración, escriba un nombre de proceso, seleccione el objetivo del clúster, el número de nodos y, luego, seleccione Avanzadas para mostrar la configuración de red. En el área Configurar red virtual, establezca los valores siguientes:

    • Establezca la red virtual que se usará.

      Sugerencia

      Si el área de trabajo usa un punto de conexión privado para conectarse a la red virtual, el campo de selección Red virtual está atenuado.

    • Establezca la subred en la que se crea el clúster.

    • En el campo Intervalo de direcciones del servicio de Kubernetes, escriba el intervalo de direcciones del servicio Kubernetes. Este intervalo de direcciones utiliza un intervalo de IP de notación CIDR (enrutamiento entre dominios sin clases) para definir las direcciones IP que están disponibles para el clúster. No debe superponerse con ningún intervalo IP de subred (por ejemplo, 10.0.0.0/16).

    • En el campo Dirección IP del servicio DNS de Kubernetes, escriba la dirección IP del servicio DNS de Kubernetes. Esta dirección IP se asigna al servicio DNS de Kubernetes. Debe estar dentro del intervalo de direcciones del servicio Kubernetes (por ejemplo, 10.0.0.10).

    • En el campo Dirección de puente de Docker, escriba la dirección del puente de Docker. Esta dirección IP se asigna al puente de Docker. No debe estar en ningún intervalo IP de subred o en el intervalo de direcciones del servicio Kubernetes (por ejemplo, 172.18.0.1/16).

    Captura de pantalla de la configuración de red.

  5. Cuando se implementa un modelo como un servicio web en AKS, se crea un punto de conexión de puntuación para controlar las solicitudes de inferencia. Asegúrese de que el grupo de seguridad de red (NSG) que controla la red virtual tenga una regla de seguridad de entrada habilitada para la dirección IP del punto de conexión de puntuación si quiere llamarlo desde fuera de la red virtual.

    Para buscar la dirección IP del punto de conexión de puntuación, examine el URI de puntuación para el servicio implementado. Para obtener información sobre cómo ver el URI de puntuación, vea Consumo de un modelo implementado como servicio web.

    Importante

    Mantenga las reglas de salida predeterminadas para el grupo de seguridad de red. Para más información, consulte las reglas de seguridad predeterminadas en Grupos de seguridad.

    Captura de pantalla que muestra una regla de seguridad de entrada.](./media/how-to-secure-inferencing-vnet/aks-vnet-inbound-nsg-scoring.png#lightbox)

    Importante

    La dirección IP que se muestra en la imagen para el punto de conexión de puntuación será diferente para sus implementaciones. Aunque todas las implementaciones comparten la misma dirección IP en un clúster de AKS, cada clúster de AKS tendrá una dirección IP diferente.

También puede usar el SDK de Azure Machine Learning para agregar Azure Kubernetes Service en una red virtual. Si ya tiene un clúster de AKS en una red virtual, asócielo al área de trabajo como se describe en el tema sobre la implementación en AKS. El código siguiente crea una instancia de Azure Kubernetes Service en la subred default de una red virtual denominada mynetwork:

SE APLICA A:Azure ML del SDK de Python v1

from azureml.core.compute import ComputeTarget, AksCompute

# Create the compute configuration and set virtual network information
config = AksCompute.provisioning_configuration(location="eastus2")
config.vnet_resourcegroup_name = "mygroup"
config.vnet_name = "mynetwork"
config.subnet_name = "default"
config.service_cidr = "10.0.0.0/16"
config.dns_service_ip = "10.0.0.10"
config.docker_bridge_cidr = "172.17.0.1/16"

# Create the compute target
aks_target = ComputeTarget.create(workspace=ws,
                                  name="myaks",
                                  provisioning_configuration=config)

Cuando finalice el proceso de creación, puede ejecutar una inferencia, o puntuación de modelos, en un clúster de AKS detrás de una red virtual. Para más información, consulte Implementación en AKS.

Para más información sobre el uso del control de acceso basado en rol con Kubernetes, consulte Uso de Azure RBAC para la autorización de Kubernetes (versión preliminar).

Rol de colaborador de red

Importante

Si crea o asocia un clúster de AKS al proporcionar una red virtual creada anteriormente, debe conceder a la entidad de servicio (SP) o la identidad administrada del clúster de AKS el rol Colaborador de la red del grupo de recursos que contiene la red virtual.

Para agregar la identidad como colaborador de red, siga estos pasos:

  1. Para buscar la entidad de servicio o el id. de identidad administrada para AKS, use los siguientes comandos de la CLI de Azure. Reemplace <aks-cluster-name> por el nombre del clúster. Reemplace <resource-group-name> por el nombre del grupo de recursos que contiene el clúster de AKS:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
    

    Si este comando devuelve el valor msi, use el siguiente comando para identificar el identificador de entidad de seguridad de la identidad administrada:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Para buscar el identificador del grupo de recursos que contiene la red virtual, use el siguiente comando. Reemplace <resource-group-name> por el nombre del grupo de recursos que contiene la red virtual.

    az group show -n <resource-group-name> --query id
    
  3. Para agregar la entidad de servicio o la identidad administrada como colaborador de la red, use el siguiente comando. Reemplace <SP-or-managed-identity> por el identificador devuelto para la entidad de servicio o la identidad administrada. Reemplace <resource-group-id> por el identificador revuelto para el grupo de recursos que contiene la red virtual:

    az role assignment create --assignee <SP-or-managed-identity> --role 'Network Contributor' --scope <resource-group-id>
    

Para más información sobre el uso del equilibrador de carga interno con AKS, consulte Uso del equilibrador de carga interno con Azure Kubernetes Service.

Tráfico de red virtual seguro

Hay dos métodos para aislar el tráfico hacia y desde el clúster de AKS a la red virtual:

  • Clúster privado de AKS: este enfoque usa Azure Private Link para proteger las comunicaciones con el clúster para las operaciones de implementación y administración.
  • Equilibrador de carga interno de AKS: Este enfoque configura el punto de conexión de las implementaciones en AKS para usar una dirección IP privada en la red virtual.

Clúster privado de AKS

De manera predeterminada, los clústeres de AKS tienen un plano de control o un servidor de API con las direcciones IP públicas. Puede configurar AKS para usar un plano de control privado mediante la creación de un clúster privado de AKS. Para obtener más información, consulte Creación de un clúster privado de Azure Kubernetes Service.

Después de crear el clúster privado de AKS, adjunte el clúster a la red virtual para usarlo con Azure Machine Learning.

Equilibrador de carga interno de AKS

De manera predeterminada, las implementaciones de AKS usan un equilibrador de carga público. En esta sección, aprenderá a configurar AKS para usar un equilibrador de carga interno. Un equilibrador de carga interno (o privado) se usa cuando solo se admiten direcciones IP privadas como front-end. Los equilibradores de carga internos se usan para equilibrar la carga del tráfico dentro de una red virtual.

Un equilibrador de carga privado se habilita mediante la configuración de AKS para usar un equilibrador de carga interno.

Habilitación del equilibrador de carga privado

Importante

No se puede habilitar la IP privada al crear el clúster de Azure Kubernetes Service en Estudio de Azure Machine Learning. Puede crear uno con un equilibrador de carga interno al usar el SDK de Python o la extensión CLI de Azure para aprendizaje automático.

En los siguientes ejemplos se muestra cómo crear un clúster de AKS mediante la IP privada o el equilibrador de carga interno mediante el SDK y la CLI:

SE APLICA A:Azure ML del SDK de Python v1

import azureml.core
from azureml.core.compute import AksCompute, ComputeTarget

# Verify that cluster does not exist already
try:
    aks_target = AksCompute(workspace=ws, name=aks_cluster_name)
    print("Found existing aks cluster")

except:
    print("Creating new aks cluster")

    # Subnet to use for AKS
    subnet_name = "default"
    # Create AKS configuration
    prov_config=AksCompute.provisioning_configuration(load_balancer_type="InternalLoadBalancer")
    # Set info for existing virtual network to create the cluster in
    prov_config.vnet_resourcegroup_name = "myvnetresourcegroup"
    prov_config.vnet_name = "myvnetname"
    prov_config.service_cidr = "10.0.0.0/16"
    prov_config.dns_service_ip = "10.0.0.10"
    prov_config.subnet_name = subnet_name
    prov_config.load_balancer_subnet = subnet_name
    prov_config.docker_bridge_cidr = "172.17.0.1/16"

    # Create compute target
    aks_target = ComputeTarget.create(workspace = ws, name = "myaks", provisioning_configuration = prov_config)
    # Wait for the operation to complete
    aks_target.wait_for_completion(show_output = True)

Al adjuntar un clúster existente al área de trabajo, use los parámetros load_balancer_type y load_balancer_subnet de AksCompute.attach_configuration() configurar el equilibrador de carga.

Para obtener información sobre cómo asociar un clúster, consulte Asociación de un clúster de AKS ya existente.

Limitación de la conectividad saliente de la red virtual

Si no quiere usar las reglas de salida predeterminadas y quiere limitar el acceso de salida de la red virtual, debe permitir el acceso a Azure Container Registry. Por ejemplo, asegúrese de que los grupos de seguridad de red (NSG) contienen una regla que permita el acceso a la etiqueta de servicio AzureContainerRegistry.RegionName, donde {RegionName} es el nombre de una región de Azure.

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: