Compartilhar via


Proteja seus pontos de extremidade online gerenciados com isolamento de rede

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)SDK do Python azure-ai-ml v2 (atual)

Neste artigo, você irá 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 Workspace do Azure Machine Learning para a comunicação de entrada segura. Você também irá configurar o espaço de trabalho com uma rede virtual gerenciada que permite apenas a saída de comunicações aprovadas para as implantações. Para terminar, você criará uma implantação que usa os pontos de extremidade privados da rede virtual gerenciada do espaço de trabalho para a saída das comunicações.

Para obter exemplos que usam o método herdado para o isolamento de rede, confira 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 do MLflow) no repositório azureml-examples do GitHub.

Pré-requisitos

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

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

    Dica

    A rede virtual gerenciada do Azure Machine Learning foi introduzida em 23 de maio de 2023. Se você tiver uma versão mais antiga da extensão de aprendizado de máquina, 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 do Windows para Linux.

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

  • 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 deverá ter as permissões adequadas. Para obter detalhes sobre as permissões necessárias, veja Configurar a autenticação do serviço. Por exemplo, você precisa atribuir a permissão RBAC adequada para o Key Vault do Azure na identidade.

Migrar do método de isolamento de rede herdado para a rede virtual gerenciada do workspace

Se você usou o método herdado anteriormente para isolamento de rede dos pontos de extremidade online gerenciados e quer migrar para usar uma rede virtual gerenciada do workspace para proteger seus pontos de extremidade, siga estas etapas:

  1. Crie um novo workspace e habilite a rede virtual gerenciada. Para obter mais informações sobre como configurar uma rede gerenciada para seu workspace, consulte Isolamento de Rede Virtual Gerenciada do Workspace.
  2. (Opcional) Na configuração de rede do workspace, adicione as regras de saída com o tipo de pontos de extremidade privados se suas implantações precisarem acessar os recursos privados adicionais, além da conta de armazenamento, do Azure Key Vault e do Registro de Contêiner do Azure (ACR) associados ao workspace (que são adicionados por padrão).
  3. (Opcional) Se você quiser usar os registros do Azure Machine Learning, configure os 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 pontos de extremidade/implantações online no novo workspace. Você pode aproveitar os registros do Azure Machine Learning para implantar diretamente a partir deles. Para obter mais informações, consulte Implantar do Registro.
  5. Atualize aplicativos invocando os pontos de extremidade para usar as URIs de pontuação dos novos pontos de extremidade online.
  6. Exclua os pontos de extremidade online do workspace antigo após a validação.

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

Limitações

  • O sinalizador v1_legacy_mode precisa estar desabilitado (false) no seu workspace do Azure Machine Learning. Se esse sinalizador estiver habilitado, você não poderá criar um ponto de extremidade online gerenciado. Para obter mais informações, confira Isolamento de rede com a API v2.

  • Se o workspace do Azure Machine Learning tiver um ponto de extremidade privado criado antes de 24 de maio de 2022, você deverá recriar o ponto de extremidade privado do workspace 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 de extremidade privado para seu workspace, confira Como configurar um ponto de extremidade privado para o workspace do Azure Machine Learning.

    Dica

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

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

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

  • Ao usar o isolamento de rede com pontos de extremidade online, você pode usar recursos associados ao workspace (Registro de Contêiner do Azure [ACR], conta de armazenamento, Key Vault e Application Insights) de um grupo de recursos diferente do seu workspace. No entanto, esses recursos precisam pertencer à mesma assinatura e locatário do seu workspace.

Observação

O isolamento de rede descrito neste artigo se aplica a operações de plano de dados, ou seja, operações resultantes de solicitações de pontuação (ou distribuição de modelos). As operações do painel de controle (como solicitações para criar, atualizar, excluir ou recuperar chaves de autenticação) são enviadas ao Azure Resource Manager por meio da rede pública.

Preparar seu sistema

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

    Dica

    antes de criar um novo workspace, você deve criar um Grupo de Recursos do Azure para armazená-lo. Para obter mais informações, confira Gerenciar Grupos de Recursos do Azure.

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

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

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

    # 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, confira Configurar uma rede virtual gerenciada para permitir a saída para a internet.

    Quando o workspace é configurado com um ponto de extremidade privado, o Registro de Contêiner do Azure do workspace deve ser configurado para camada Premium para permitir o acesso por meio do ponto de extremidade privado. Para obter mais informações, confira Níveis de serviço do Registro de Contêiner do Azure. Além disso, o workspace deve ser definido com a propriedade image_build_compute, pois a criação da implantação envolve a criação de imagens. Consulte Configurar builds de imagem para obter mais informações.

    Importante

    Quando a rede virtual gerenciada do workspace é configurada para um workspace pela primeira vez, a rede ainda não está 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 de forma a evitar transmitir os valores diversas vezes para o seu espaço de trabalho e grupo de recursos.

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

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

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

Criar um ponto de extremidade online protegido gerenciado

Para criar um ponto de extremidade online gerenciado seguro, crie o ponto de extremidade no seu espaço de trabalho e defina o public_network_access do ponto de extremidade como disabled para controlar o recebimento das comunicações. A seguir, o ponto de extremidade precisará usar o ponto de extremidade privado do espaço de trabalho para o recebimento das comunicações.

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 a saída de comunicações.

  1. Defina o nome do ponto de extremidade.

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

    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 é usar um ponto de extremidade privado, que pode acessar o workspace, na sua rede virtual. Para obter mais informações, confira Proteger as solicitações de pontuação de entrada e Configurar um ponto de extremidade privado para um workspace do Azure Machine Learning.

    Como alternativa, se quiser permitir que o ponto de extremidade receba solicitações de pontuação da internet remova a marca de comentário do código a seguir e execute-o em vez disso.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Crie uma implantação na rede virtual gerenciada do 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 os logs da 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>
    

Solução de problemas

A criação de ponto de extremidade online tem uma falha com uma mensagem V1LegacyMode == true

Você pode configurar o workspace do Azure Machine Learning para v1_legacy_mode, o que desabilita as APIs v2. Os pontos de extremidade online gerenciados são um recurso da plataforma da API v2 e não funcionarão se v1_legacy_mode estiver habilitado no workspace.

Para desabilitar v1_legacy_mode, consulte Isolamento de rede com v2.

Importante

Verifique com sua equipe de segurança de rede antes de desabilitar v1_legacy_mode, pois ela pode tê-lo habilitado por um motivo.

Falha na criação de ponto de extremidade online com autenticação baseada em chave

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

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

A resposta para esse comando é semelhante ao código JSON a seguir:

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

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

As implantações online falham com um erro de download de imagem

Observação

Esse problema se aplica quando você usa o método de isolamento de rede herdado para pontos de extremidade online gerenciados, no qual o Azure Machine Learning cria uma VNet gerenciada para cada implantação em um ponto de extremidade.

  1. Verifique se o sinalizador egress-public-network-access está 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 do ponto de extremidade privado. Substitua <registry-name> pelo nome do registro de Contêiner do Azure para o seu workspace:

    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 campo status está definido como Approved. Caso contrário, use o comando a seguir para aprová-lo. Substitua <private-endpoint-name> pelo nome retornado do comando anterior.

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

O ponto de extremidade de pontuação não pode ser resolvido

  1. Verifique se o cliente que está emitindo a solicitação de pontuação é uma rede virtual que pode acessar o workspace do Azure Machine Learning.

  2. Use o comando nslookup no nome do host do ponto de extremidade para recuperar as informações de 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.

    Observação

    • Para o ponto de extremidade online do Kubernetes, o nome do host do ponto de extremidade deve ser 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 outras maneiras de obter o endereço IP do ponto de extremidade em Ponto de extremidade online seguro do Kubernetes.
  3. Se o comando nslookup não resolver o nome do host, execute as seguintes ações:

Pontos de extremidade online gerenciados

  1. Use o comando a seguir para verificar se um registro A existe na zona DNS (Servidor de Nomes de Domínio) 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 for retornado, exclua a ponto de extremidade privado do workspace e recrie-o. Para obter mais informações, consulte Como configurar um ponto de extremidade privado.

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

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

Pontos de extremidade online do Kubernetes

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

  2. Além disso, verifique se 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 HTTPs curl falharem ou atingirem o tempo limite, mas o HTTP funcionar, verifique se o certificado é válido.

  4. Se o processo anterior não for resolvido para o registro A, verifique se a resolução funciona no DNS do Azure (168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    
  5. Se o comando anterior der certo, solucione problemas do encaminhador condicional do link privado no DNS personalizado.

Implantações online não podem ser pontuadas

  1. Execute o comando a seguir 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 será Succeeded.

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

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

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

    Dica

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

  3. Se as atribuições de tráfego ou o cabeçalho de implantação forem definidos corretamente, use o comando a seguir para obter os logs do 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. Examine 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óximas etapas