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 usa 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 empezar, necesitará una suscripción a Azure, la CLI o el SDK para interactuar con el área de trabajo de Azure Machine Learning y las entidades relacionadas, y el permiso correcto.

  • 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.

  • instalar y configurar laCLI de Azure y la mlextensión de 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 de ML, es posible que tenga que actualizarla para que funcionen los ejemplos de este artículo. 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.

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.

  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

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

Importante

Póngase en contacto con el equipo de seguridad de red antes de deshabilitar v1_legacy_mode. Es posible que el equipo de seguridad de red haya habilitado este parámetro por algún motivo.

Para obtener información sobre cómo deshabilitar v1_legacy_mode, consulte Aislamiento de red con v2.

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

Use el siguiente comando para enumerar las reglas de red de Azure Key Vault del á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 documento 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á deshabilitada para la implementación. Si esta 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 documento de respuesta, compruebe que el campo status está establecido en Approved. Si no se aprueba, 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:

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

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

    Nota:

    Para el 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 es un punto de conexión HTTP, la dirección IP se incluirá en el URI del punto de conexión que puede obtener directamente en la interfaz de usuario de Studio. Puede consultar más formas de obtener la dirección IP del punto de conexión en Punto de conexión en línea de Kubernetes seguro.

  3. Si el comando nslookup no resuelve el nombre de host:

    Para un punto de conexión en línea administrado,

    1. compruebe si existe un registro A en la zona DNS privada de la red virtual.

      Para comprobar los registros, use el siguiente comando:

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

      Los resultados deben 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 se configura mediante un DNS personalizado: Uso de un área de trabajo con un servidor DNS personalizado. Use el siguiente comando para comprobar si la resolución funciona correctamente desde el DNS personalizado.

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

    Para un punto de conexión en línea de Kubernetes,

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

    2. Además, puede comprobar si azureml-fe funciona según lo previsto. Use 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"
      

      Para HTTP, use

      curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

    Si se produce un error de HTTPs de curl (por ejemplo, tiempo de espera), pero HTTP funciona, compruebe que el certificado sea válido.

    Si no se puede resolver en un registro A, compruebe si la resolución funciona desde Azure DNS (168.63.129.16).

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

    Si esto se realiza correctamente, puede solucionar los problemas del reenviador condicional para el vínculo privado en el DNS personalizado.

No se pueden puntuar las implementaciones en línea

  1. Use el comando siguiente para ver si la implementación se implementó correctamente:

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

    Si la implementación se completó correctamente, 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 del punto de conexión:

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

    Sugerencia

    Este paso no es necesario si usa el encabezado azureml-model-deployment en la solicitud para dirigirse a esta implementación.

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

  3. Si las asignaciones de tráfico (o el encabezado de implementación) se establecen 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> 
    

    Examine 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