Compartir vía


Protección de los puntos de conexión en línea administrados con aislamiento de red

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

En este artículo, usará el aislamiento de red para proteger un punto de conexión en línea administrado. Creará un punto de conexión en línea administrado que use el punto de conexión privado del área de trabajo de Azure Machine Learning para una comunicación entrante segura. También configurará el área de trabajo con una red virtual administrada que solo permite la comunicación saliente aprobada para implementaciones. Por último, creará una implementación que usa los puntos de conexión privados de la red virtual administrada del área de trabajo para la comunicación saliente.

Para obtener ejemplos que usan el método heredado para el aislamiento de red, consulte los archivos de implementación deploy-moe-vnet-legacy.sh (para la implementación mediante un modelo genérico) y deploy-moe-vnet-mlflow-legacy.sh (para la implementación mediante un modelo de MLflow) en el repositorio de GitHub azureml-examples.

Requisitos previos

  • Para usar Azure Machine Learning, es preciso tener una suscripción a Azure. Si no tiene una suscripción de Azure, cree una cuenta gratuita antes de empezar. Pruebe hoy mismo la versión gratuita o de pago de Azure Machine Learning.

  • Instale y configure la CLI de Azure y la extensión ml a la CLI de Azure. Para más información, consulte Instalación, configuración y uso de la CLI v2.

    Sugerencia

    La red virtual gestionada de Azure Machine Learning se presentó el 23 de mayo de 2023. Si tiene una versión anterior de la extensión ml, es posible que tenga que actualizarla para que los ejemplos de este artículo funcionen. Para actualizar la extensión, use los siguientes comandos de la CLI de Azure:

    az extension update -n ml
    
  • En los ejemplos de la CLI de este artículo, se supone que usa el shell de Bash (o compatible). Por ejemplo, de un sistema Linux o Subsistema de Windows para Linux.

  • Debe tener un grupo de recursos de Azure, en el que usted (o la entidad de servicio que use) tiene que tener acceso de Contributor. Tendrá un grupo de recursos de este tipo si ha configurado suml extensión.

  • Si desea usar una identidad administrada asignada por el usuario para crear y administrar puntos de conexión en línea e implementaciones en línea, la identidad debe tener los permisos adecuados. Para obtener más información sobre los permisos necesarios, consulte Configuración de la autenticación del servicio. Por ejemplo, debe asignar el permiso RBAC adecuado para Azure Key Vault en la identidad.

Migración del método de aislamiento de red heredado a la red virtual administrada por el área de trabajo

Si ha usado anteriormente el método heredado para el aislamiento de red de los puntos de conexión en línea administrados y quiere migrar al uso de una red virtual administrada por el área de trabajo para proteger los puntos de conexión, puede seguir estos pasos:

  1. Cree un área de trabajo nueva y habilite la red virtual administrada. Para más información sobre cómo configurar una red administrada para el área de trabajo, consulte Aislamiento de red virtual administrada en el área de trabajo.
  2. (Opcional) En la configuración de red del área de trabajo, agregue reglas de salida con el tipo de puntos de conexión privados si las implementaciones necesitan acceder a recursos privados adicionales, excepto la cuenta de Storage, Azure Key Vault y Azure Container Registry (ACR) asociadas al área de trabajo (que se agregan de forma predeterminada).
  3. (Opcional) Si tiene previsto usar registros de Azure Machine Learning, configure puntos de conexión privados para la comunicación saliente con el registro, su cuenta de almacenamiento y su instancia de Azure Container Registry.
  4. Cree puntos de conexión o implementaciones en línea en el área de trabajo nueva. Puede sacar provecho de los registros de Azure Machine Learning para implementar directamente desde ellos. Para obtener más información, consulte Implementación desde el Registro.
  5. Actualice las aplicaciones que invocan puntos de conexión para usar los URI de puntuación de los nuevos puntos de conexión en línea.
  6. Elimine los puntos de conexión en línea del área de trabajo anterior después de la validación.

Si no necesita mantener los procesos ni mantener los puntos de conexión y las implementaciones en línea en el área de trabajo anterior para servir sin tiempo de inactividad, simplemente puede eliminar todos los procesos del área de trabajo existente y actualizar el área de trabajo para habilitar la red virtual administrada por el área de trabajo.

Limitaciones

  • La marca v1_legacy_mode debe estar deshabilitada (false) en el área de trabajo de Azure Machine Learning. Si esta marca está habilitada, no podrá crear un punto de conexión en línea administrado. Para obtener más información, consulte Aislamiento de red con API v2.

  • Si el área de trabajo de Azure Machine Learning tiene un punto de conexión privado que se creó antes del 24 de mayo de 2022, debe volver a crear el punto de conexión privado del área de trabajo antes de configurar los puntos de conexión en línea para usar un punto de conexión privado. Para más información sobre cómo crear un punto de conexión privado para el área de trabajo, vea Configuración de un punto de conexión privado para un área de trabajo de Azure Machine Learning.

    Sugerencia

    Para confirmar cuándo se creó un espacio de trabajo, puede comprobar las propiedades del espacio de trabajo.

    En Studio, vaya a la Directory + Subscription + Workspace sección (parte superior derecha de Studio) y seleccione View all properties in Azure Portal. Seleccione la vista JSON en la parte superior derecha de la página "Información general" y elija la versión más reciente de la API. En esta página, puede comprobar el valor de properties.creationTime.

    Como alternativa, use az ml workspace show con la CLI, my_ml_client.workspace.get("my-workspace-name") con EL SDK o curl en un área de trabajo con la API REST.

  • Al usar el aislamiento de red con puntos de conexión en línea, puede usar recursos asociados al área de trabajo (Azure Container Registry (ACR), la cuenta de almacenamiento, Key Vault y Application Insights) desde un grupo de recursos diferente al del área de trabajo. Sin embargo, estos recursos deben pertenecer a la misma suscripción e inquilino que el área de trabajo.

Nota:

El aislamiento de red descrito en este artículo se aplica a las operaciones del plano de datos, es decir, las operaciones que se derivan de solicitudes de puntuación (o servicio de modelos). Las operaciones del plano de control (como las solicitudes para crear, actualizar, eliminar o recuperar claves de autenticación) se envían a Azure Resource Manager a través de la red pública.

Preparación del sistema

  1. Para crear las variables de entorno que usa este ejemplo, ejecute los siguientes comandos. Reemplace por <YOUR_WORKSPACE_NAME> el nombre que se va a usar para el área de trabajo. Reemplace <YOUR_RESOURCEGROUP_NAME> por el grupo de recursos que contiene el área de trabajo.

    Sugerencia

    antes de crear una nueva área de trabajo, debe crear un grupo de recursos de Azure para contenerla. Para obtener más información, consulte Administración de grupos de recursos de Azure.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Crear el área de trabajo El -m allow_only_approved_outbound parámetro configura una red virtual administrada para el área de trabajo y bloquea el tráfico saliente, excepto en los destinos aprobados.

    az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_only_approved_outbound
    

    Como alternativa, si quiere permitir que la implementación envíe tráfico saliente a Internet, quite la marca de comentario del código siguiente y ejecútelo en su lugar.

    # az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_internet_outbound
    

    Para más información sobre cómo crear un área de trabajo o actualizar el área de trabajo existente para usar una red virtual administrada, vea Configuración de una red virtual administrada para permitir la salida de Internet.

    Cuando el área de trabajo está configurada con un punto de conexión privado, Azure Container Registry para el área de trabajo debe estar configurado para el nivel Premium para permitir el acceso a través del punto de conexión privado. Para más información, consulte Niveles de servicio de Azure Container Registry. Además, el área de trabajo debe estar establecida con la propiedad image_build_compute, ya que la creación de la implementación implica la compilación de imágenes. Consulte Configuración de compilaciones de imágenes para más información.

    Importante

    Cuando la red virtual administrada por el área de trabajo se configura por primera vez, la red aún no se aprovisiona. Antes de continuar con la creación de implementaciones en línea, aprovisione la red siguiendo la guía Aprovisionamiento manual de una red administrada. La creación de implementaciones en línea se rechazará hasta que se aprovisione la red administrada.

  3. Configure los valores predeterminados de la CLI para que pueda evitar pasar los valores del área de trabajo y el grupo de recursos varias veces.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Clone el repositorio de ejemplos para obtener los archivos de ejemplo del punto de conexión y la implementación y, a continuación, vaya al directorio del /cli repositorio.

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd /cli
    

Los comandos de este tutorial están en el archivo deploy-managed-online-endpoint-workspacevnet.sh en el directorio cli y los archivos de configuración YAML se encuentran en el subdirectorio endpoints/online/managed/sample/.

Creación de un punto de conexión en línea administrado protegido

Para crear un punto de conexión en línea administrado protegido, cree el punto de conexión en el área de trabajo y establezca el punto de conexión en public_network_access para disabled controlar la comunicación entrante. A continuación, el punto de conexión tendrá que usar el punto de conexión privado del área de trabajo para la comunicación entrante.

Dado que el área de trabajo está configurada para tener una red virtual administrada, las implementaciones del punto de conexión usarán los puntos de conexión privados de la red virtual administrada para la comunicación saliente.

  1. Establezca el nombre del punto de conexión.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Cree un punto de conexión con public_network_access deshabilitado para bloquear el tráfico entrante.

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml --set public_network_access=disabled
    

    Si deshabilita el acceso a la red pública para el punto de conexión, la única manera de invocar el punto de conexión es mediante un punto de conexión privado, que puede acceder al área de trabajo, en la red virtual. Para obtener más información, consulte Proteger solicitudes de puntuación de entrada y Configurar punto de conexión privado para un área de trabajo de Azure Machine Learning.

    Como alternativa, si quiere permitir que el punto de conexión reciba solicitudes de puntuación de Internet, quite la marca de comentario del código siguiente y ejecútelo en su lugar.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Cree una implementación en la red virtual administrada por el área de trabajo.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Obtenga el estado de la implementación.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Pruebe el punto de conexión con una solicitud de puntuación mediante la CLI.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Obtención de los registros de implementación

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Elimine el punto de conexión si ya no lo necesita.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Elimine todos los recursos creados en este artículo. Reemplace <resource-group-name> por el nombre del grupo de recursos usado en este ejemplo:

    az group delete --resource-group <resource-group-name>
    

Solución de problemas

Se produce un error en la creación de puntos de conexión en línea con un mensaje V1LegacyMode == true

Puede configurar el área de trabajo de Azure Machine Learning para v1_legacy_mode, lo que deshabilita las API de la versión 2. Los puntos de conexión en línea administrados son una característica de la plataforma de API v2 y no funcionan si el parámetro v1_legacy_mode está habilitado para el área de trabajo.

Para deshabilitar v1_legacy_mode, consulte Aislamiento de red con v2.

Importante

Antes de deshabilitar v1_legacy_mode consúltelo con su equipo de seguridad de red, ya que puede que lo hayan habilitado por algún motivo.

Error en la creación de puntos de conexión en línea con autenticación basada en claves

Use el siguiente comando para usar la lista de reglas de red de la instancia de Azure Key Vault para su área de trabajo. Reemplace <keyvault-name> por el nombre del almacén de claves:

az keyvault network-rule list -n <keyvault-name>

La respuesta para este comando es similar al siguiente código JSON:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

Si el valor de bypass no es AzureServices, use las instrucciones de Configuración de las redes de almacén de claves para establecerlo en AzureServices.

Las implementaciones en línea no se pueden realizar y producen un error de descarga de imagen

Nota:

Este problema se aplica cuando se usa el método de aislamiento de red heredado para los puntos de conexión en línea administrados, en los que Azure Machine Learning crea una red virtual administrada para cada implementación en un punto de conexión.

  1. Compruebe si la marca egress-public-network-access está disabled para la implementación. Si la marca está habilitada y la visibilidad del registro de contenedor es privada, se espera este error.

  2. Use el siguiente comando para comprobar el estado de la conexión del punto de conexión privado. Reemplace <registry-name> por el nombre de Azure Container Registry para el área de trabajo:

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    En el código de respuesta, compruebe que en el campo status se ha seleccionado Approved. Si no es así, use el siguiente comando para aprobarlo. Reemplace <private-endpoint-name> por el nombre que devolvió el comando anterior.

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

No se puede resolver el punto de conexión de puntuación

  1. Compruebe que el cliente que emite la solicitud de puntuación es una red virtual que puede acceder al área de trabajo de Azure Machine Learning.

  2. Use el comando nslookup en el nombre de host del punto de conexión para recuperar la información de la dirección IP, por ejemplo:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    La respuesta contiene una dirección que debe estar en el rango proporcionado por la red virtual.

    Nota:

    • En el caso del punto de conexión en línea de Kubernetes, el nombre de host del punto de conexión debe ser el CName (nombre de dominio) que se ha especificado en su clúster de Kubernetes.
    • Si el punto de conexión es HTTP, la dirección IP se encuentra en el identificador URI del punto de conexión, que puede obtener desde la interfaz de usuario del estudio.
    • En Protección del punto de conexión en línea de Kubernetes, puede encontrar más formas de obtener la dirección IP del punto de conexión.
  3. Si el comando nslookup no resuelve el nombre de host, realice las siguientes acciones:

Puntos de conexión en línea administrados

  1. Use el siguiente comando para comprobar si existe un registro D en la zona privada del servidor de nombres de dominio (DNS) de la red virtual.

    az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
    

    Los resultados deberían contener una entrada similar a *.<GUID>.inference.<region>.

  2. Si no se devuelve ningún valor de inferencia, elimine el punto de conexión privado del área de trabajo y vuelva a crearlo. Para obtener más información, consulte Configuración de un punto de conexión privado.

  3. Si el área de trabajo con un punto de conexión privado usa un servidor DNS personalizado, ejecute el siguiente comando para comprobar que la resolución desde el DNS personalizado funciona correctamente.

dig endpointname.westcentralus.inference.ml.azure.com

Puntos de conexión en línea de Kubernetes

  1. Compruebe la configuración de DNS en el clúster de Kubernetes.

  2. Compruebe también si azureml-fe funciona como cabría esperar, para lo que debe usar el siguiente comando:

    kubectl exec -it deploy/azureml-fe -- /bin/bash
    (Run in azureml-fe pod)
    
    curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    

    En el caso de HTTP, use el siguiente comando:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Si curl HTTPs no se ejecuta o supera el tiempo de expiración pero HTTP funciona, compruebe si el certificado es válido.

  4. Si el proceso anterior no resuelve el registro D, compruebe si la resolución funciona desde Azure DNS (168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    
  5. Si el comando anterior hace que todo funcione correctamente, solucione los problemas del reenviador condicional del vínculo privado en el DNS personalizado.

No se pueden puntuar las implementaciones en línea

  1. Ejecute el siguiente comando para ver si la implementación se ha realizado correctamente:

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    En ese caso, el valor de state será Succeeded.

  2. Si la implementación se realizó correctamente, use el siguiente comando para comprobar que el tráfico está asignado a la implementación. Reemplace <endpointname> por el nombre de su punto de conexión.

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    La respuesta de este comando debe mostrar el porcentaje de tráfico asignado a las implementaciones.

    Sugerencia

    Este paso no es necesario si se usa el encabezado azureml-model-deployment en la solicitud cuyo objetivo es esta implementación.

  3. Si las asignaciones de tráfico o el encabezado de la implementación se han establecido correctamente, use el siguiente comando para obtener los registros del punto de conexión. Reemplace <endpointname> por el nombre del punto de conexión y <deploymentname> por la implementación.

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    
  4. Revise los registros para ver si hay un problema al ejecutar el código de puntuación al enviar una solicitud a la implementación.

Pasos siguientes