Proteja seus endpoints online gerenciados com isolamento de rede

APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Neste artigo, você usará o isolamento de rede para proteger um ponto de extremidade online gerenciado. Você criará um ponto de extremidade online gerenciado que usa o ponto de extremidade privado de um espaço de trabalho do Azure Machine Learning para comunicação de entrada segura. Você também configurará o espaço de trabalho com uma rede virtual gerenciada que permite apenas comunicação de saída aprovada para implantações. Finalmente, você criará uma implantação que usa os pontos de extremidade privados da rede virtual gerenciada do espaço de trabalho para comunicação de saída.

Para obter exemplos que usam o método herdado para isolamento de rede, consulte os arquivos de implantação deploy-moe-vnet-legacy.sh (para implantação usando um modelo genérico) e deploy-moe-vnet-mlflow-legacy.sh (para implantação usando um modelo MLflow) no repositório GitHub azureml-examples.

Pré-requisitos

  • Para usar o Azure Machine Learning, você deve ter uma assinatura do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning .

  • Instale e configure a CLI do Azure e a ml extensão para a CLI do Azure. Para obter mais informações, consulte Instalar, configurar e usar a CLI (v2).

    Gorjeta

    A rede virtual gerenciada do Azure Machine Learning foi apresentada em 23 de maio de 2023. Se você tiver uma versão mais antiga da extensão ml, talvez seja necessário atualizá-la para que os exemplos neste artigo funcionem. Para atualizar a extensão, use o seguinte comando da CLI do Azure:

    az extension update -n ml
    
  • Os exemplos de CLI neste artigo pressupõem que você esteja usando o shell Bash (ou compatível). Por exemplo, de um sistema Linux ou Subsistema Windows para Linux.

  • Você deve ter um Grupo de Recursos do Azure, no qual você (ou a entidade de serviço que usa) precisa ter Contributor acesso. Você terá esse grupo de recursos se tiver configurado sua ml extensão.

  • Se você quiser usar uma identidade gerenciada atribuída pelo usuário para criar e gerenciar pontos de extremidade online e implantações online, a identidade deve ter as permissões adequadas. Para obter detalhes sobre as permissões necessárias, consulte Configurar a autenticação de serviço. Por exemplo, você precisa atribuir a permissão RBAC adequada para o Azure Key Vault na identidade.

Migrar do método de isolamento de rede herdado para a rede virtual gerenciada pelo espaço de trabalho

Se você já usou o método herdado anteriormente para isolamento de rede de pontos de extremidade online gerenciados e deseja migrar para usar uma rede virtual gerenciada por espaço de trabalho para proteger seus pontos de extremidade, siga estas etapas:

  1. Crie um novo espaço de trabalho e habilite a rede virtual gerenciada. Para obter mais informações sobre como configurar uma rede gerenciada para seu espaço de trabalho, consulte Isolamento de rede virtual gerenciado pelo espaço de trabalho.
  2. (Opcional) Na configuração de rede do espaço de trabalho, adicione regras de saída com o tipo de pontos de extremidade privados se suas implantações precisarem acessar recursos privados adicionais, além da conta de armazenamento, do Cofre da Chave do Azure e do Registro de Contêiner do Azure (ACR) associados ao espaço de trabalho (que são adicionados por padrão).
  3. (Opcional) Se você pretende usar os registros do Azure Machine Learning, configure pontos de extremidade privados para comunicação de saída com seu registro, sua conta de armazenamento e seu Registro de Contêiner do Azure.
  4. Crie endpoints/implantações online no novo espaço de trabalho. Você pode aproveitar os registros do Azure Machine Learning para implantar diretamente a partir deles. Para obter mais informações, consulte Implantar a partir do Registro.
  5. Atualize os aplicativos que invocam pontos de extremidade para usar os URIs de pontuação dos novos pontos de extremidade online.
  6. Exclua pontos de extremidade online do espaço de trabalho antigo após a validação.

Se você não precisar manter computações ou manter pontos de extremidade e implantações online no espaço de trabalho antigo para servir sem tempo de inatividade, você pode simplesmente excluir todos os cálculos no espaço de trabalho existente e atualizar o espaço de trabalho para habilitar a rede virtual gerenciada pelo espaço de trabalho.

Limitações

  • O sinalizador v1_legacy_mode tem de estar desativado (falso) na área de trabalho do Azure Machine Learning. Se este sinalizador estiver ativado, não poderá criar um ponto final online gerido. Para obter mais informações, veja Isolamento de rede com a API v2.

  • Se o seu espaço de trabalho do Azure Machine Learning tiver um ponto de extremidade privado que foi criado antes de 24 de maio de 2022, você deverá recriar o ponto de extremidade privado do espaço de trabalho antes de configurar seus pontos de extremidade online para usar um ponto de extremidade privado. Para obter mais informações sobre como criar um ponto final privado para a área de trabalho, veja Como configurar um ponto final privado para a área de trabalho do Azure Machine Learning.

    Gorjeta

    Para confirmar quando um espaço de trabalho foi criado, você pode verificar as propriedades do espaço de trabalho.

    No Estúdio, vá para a Directory + Subscription + Workspace seção (canto superior direito do Estúdio) e selecione View all properties in Azure Portal. Selecione a visualização JSON no canto superior direito da página "Visão geral" e, em seguida, escolha a versão mais recente da API. Nesta página, você pode verificar o valor de properties.creationTime.

    Como alternativa, use az ml workspace show com CLI,my_ml_client.workspace.get("my-workspace-name") com SDK ou curl em um espaço de trabalho com API REST.

  • Ao usar o isolamento de rede com pontos de extremidade online, você pode usar recursos associados ao espaço de trabalho (Azure Container Registry (ACR), conta de armazenamento, Cofre de Chaves e Application Insights) de um grupo de recursos diferente do do seu espaço de trabalho. No entanto, esses recursos devem pertencer à mesma assinatura e locatário do seu espaço de trabalho.

Nota

O isolamento de rede descrito neste artigo aplica-se a operações de plano de dados, ou seja, operações que resultam de solicitações de pontuação (ou serviço de modelo). As operações do plano de controle (como solicitações para criar, atualizar, excluir ou recuperar chaves de autenticação) são enviadas ao Gerenciador de Recursos do Azure pela rede pública.

Prepare o seu sistema

  1. Crie as variáveis de ambiente usadas por este exemplo executando os comandos a seguir. Substitua <YOUR_WORKSPACE_NAME> pelo nome a ser usado para seu espaço de trabalho. Substitua <YOUR_RESOURCEGROUP_NAME> pelo grupo de recursos que conterá seu espaço de trabalho.

    Gorjeta

    antes de criar um novo espaço de trabalho, você deve criar um Grupo de Recursos do Azure para contê-lo. Para obter mais informações, consulte Gerenciar grupos de recursos do Azure.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Crie o seu espaço de trabalho. O -m allow_only_approved_outbound parâmetro configura uma rede virtual gerenciada para o espaço de trabalho e bloqueia o tráfego de saída, exceto para destinos aprovados.

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

    Como alternativa, se você quiser permitir que a implantação envie tráfego de saída para a Internet, remova o comentário do código a seguir e execute-o.

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

    Para obter mais informações sobre como criar um novo espaço de trabalho ou atualizar seu espaço de trabalho existente para usar uma rede virtual gerenciada, consulte Configurar uma rede virtual gerenciada para permitir a saída da Internet.

    Quando o espaço de trabalho é configurado com um ponto de extremidade privado, o Registro de Contêiner do Azure para o espaço de trabalho deve ser configurado para a camada Premium para permitir o acesso por meio do ponto de extremidade privado. Para obter mais informações, veja Escalões de serviço do Azure Container Registry (ACR). Além disso, o espaço de trabalho deve ser definido com a propriedade, pois a criação da implantação envolve a image_build_compute criação de imagens. Consulte Configurar compilações de imagem para obter mais informações.

    Importante

    Quando a rede virtual gerenciada pelo espaço de trabalho é configurada para um espaço de trabalho pela primeira vez, a rede ainda não é provisionada. Antes de continuar a criar implantações online, provisione a rede seguindo a diretriz Provisionar manualmente uma rede gerenciada. A criação de implantações online será rejeitada até que a rede gerenciada seja provisionada.

  3. Configure os padrões para a CLI para que você possa evitar passar os valores para seu espaço de trabalho e grupo de recursos várias vezes.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Clone o repositório de exemplos para obter os arquivos de exemplo para o ponto de extremidade e a implantação e, em seguida, vá para o diretório do /cli repositório.

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

Os comandos neste tutorial estão no arquivo deploy-managed-online-endpoint-workspacevnet.sh no cli diretório e os arquivos de configuração YAML estão no endpoints/online/managed/sample/ subdiretório.

Criar um endpoint online gerenciado seguro

Para criar um ponto de extremidade online gerenciado seguro, crie o ponto de extremidade em seu espaço de trabalho e defina o ponto de public_network_access extremidade como disabled para controlar a comunicação de entrada. O ponto de extremidade terá que usar o ponto de extremidade privado do espaço de trabalho para comunicação de entrada.

Como o espaço de trabalho está configurado para ter uma rede virtual gerenciada, todas as implantações do ponto de extremidade usarão os pontos de extremidade privados da rede virtual gerenciada para comunicação de saída.

  1. Defina o nome do ponto de extremidade.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Crie um ponto de extremidade com public_network_access desabilitado para bloquear o tráfego de entrada.

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

    Se você desabilitar o acesso à rede pública para o ponto de extremidade, a única maneira de invocar o ponto de extremidade é usando um ponto de extremidade privado, que pode acessar o espaço de trabalho, em sua rede virtual. Para obter mais informações, consulte Proteger solicitações de pontuação de entrada e configurar um ponto de extremidade privado para um espaço de trabalho do Azure Machine Learning.

    Como alternativa, se você quiser permitir que o ponto de extremidade receba solicitações de pontuação da Internet, descomente o código a seguir e execute-o.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Crie uma implantação na rede virtual gerenciada pelo espaço de trabalho.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Obtenha o status da implantação.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Teste o ponto de extremidade com uma solicitação de pontuação, usando a CLI.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Obtenha logs de implantação.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Exclua o ponto de extremidade se não precisar mais dele.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Exclua todos os recursos criados neste artigo. Substitua <resource-group-name> pelo nome do grupo de recursos usado neste exemplo:

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

Resolução de Problemas

A criação de pontos finais online falha com a mensagem V1LegacyMode == true

Você pode configurar o espaço de trabalho do Aprendizado de Máquina do Azure para v1_legacy_mode, que desabilita as APIs v2. Os pontos de extremidade online gerenciados são um recurso da plataforma de API v2 e não funcionam se v1_legacy_mode estiverem habilitados para o espaço de trabalho.

Para desativar v1_legacy_modeo , consulte Isolamento de rede com v2.

Importante

Verifique com sua equipe de segurança de rede antes de desativar v1_legacy_modeo , porque eles podem tê-lo ativado por um motivo.

Falha na criação de pontos finais online com a autenticação baseada em chaves

Use o comando a seguir para listar as regras de rede do cofre de chaves do Azure para seu espaço de trabalho. Substitua <keyvault-name> pelo nome do cofre de chaves:

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

A resposta para este comando é semelhante ao seguinte código JSON:

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

Se o valor de não AzureServicesfor , use as orientações em Configurar configurações de rede do cofre de bypass chaves para defini-lo como AzureServices.

As implementações online falham com um erro de transferência de imagem

Nota

Esse problema se aplica quando você usa o método de isolamento de rede herdado para pontos de extremidade online gerenciados, no qual o Aprendizado de Máquina do Azure cria uma rede virtual gerenciada para cada implantação sob um ponto de extremidade.

  1. Verifique se o egress-public-network-access sinalizador é disabled para a implantação. Se esse sinalizador estiver habilitado e a visibilidade do registro de contêiner for privada, essa falha será esperada.

  2. Use o comando a seguir para verificar o status da conexão de ponto de extremidade privado. Substitua <registry-name> pelo nome do registro de contêiner do Azure para seu espaço de trabalho:

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

    No código de resposta, verifique se o status campo está definido como Approved. Caso contrário, use o seguinte comando para aprová-lo. Substitua <private-endpoint-name> pelo nome retornado do comando anterior.

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

Não é possível resolver o ponto final de classificação

  1. Verifique se o cliente que emite a solicitação de pontuação é uma rede virtual que pode acessar o espaço de trabalho do Azure Machine Learning.

  2. Use o nslookup comando no nome do host do ponto de extremidade para recuperar as informações do endereço IP, por exemplo:

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

    A resposta contém um endereço que deve estar no intervalo fornecido pela rede virtual.

    Nota

    • Para o ponto de extremidade online do Kubernetes, o nome do host do ponto de extremidade deve ser o CName (nome de domínio) especificado no cluster do Kubernetes.
    • Se o ponto de extremidade for HTTP, o endereço IP estará contido no URI do ponto de extremidade, que você pode obter da interface do usuário do estúdio.
    • Você pode encontrar mais maneiras de obter o endereço IP do ponto de extremidade online do Secure Kubernetes.
  3. Se o nslookup comando não resolver o nome do host, execute as seguintes ações:

Pontos finais online geridos

  1. Use o comando a seguir para verificar se existe um registro A na zona privada do Servidor de Nomes de Domínio (DNS) para a rede virtual.

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

    Os resultados devem conter uma entrada semelhante a *.<GUID>.inference.<region>.

  2. Se nenhum valor de inferência retornar, exclua o ponto de extremidade privado do espaço de trabalho e recrie-o. Para obter mais informações, consulte Como configurar um ponto de extremidade privado.

  3. Se o espaço de trabalho com um ponto de extremidade privado usar um servidor DNS personalizado, execute o seguinte comando para verificar se a resolução do DNS personalizado funciona corretamente.

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

Pontos finais online do Kubernetes

  1. Verifique a configuração de DNS no cluster Kubernetes.

  2. Verifique também se o azureml-fe funciona conforme o esperado, usando o seguinte 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 o seguinte comando:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Se o curl HTTPs falhar ou expirar, mas o HTTP funcionar, verifique se o certificado é válido.

  4. Se o processo anterior não conseguir resolver para o registo A, verifique se a resolução funciona a partir do DNS do Azure (168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    
  5. Se o comando anterior for bem-sucedido, solucione problemas do encaminhador condicional para link privado no DNS personalizado.

As implementações online não podem ser classificadas

  1. Execute o seguinte comando para ver se a implantação foi bem-sucedida:

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

    Se a implantação for concluída com êxito, o valor de state é Succeeded.

  2. Se a implantação foi bem-sucedida, use o seguinte comando para verificar se o tráfego está atribuído à implantação. Substitua <endpointname> pelo nome do seu ponto de extremidade.

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

    A resposta desse comando deve listar a porcentagem de tráfego atribuída às implantações.

    Gorjeta

    Esta etapa não será necessária se você usar o azureml-model-deployment cabeçalho em sua solicitação para direcionar essa implantação.

  3. Se as atribuições de tráfego ou o cabeçalho de implantação estiverem definidos corretamente, use o comando a seguir para obter os logs para o ponto de extremidade. Substitua <endpointname> pelo nome do ponto de extremidade e <deploymentname> pela implantação.

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    
  4. Revise os logs para ver se há um problema ao executar o código de pontuação ao enviar uma solicitação para a implantação.

Próximos passos