Compartilhar via


Proteja endpoints online gerenciados usando isolamento de rede

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

Este artigo mostra como usar o isolamento de rede para melhorar a segurança de um ponto de extremidade online gerenciado do Azure Machine Learning. O isolamento de rede ajuda a proteger a comunicação de entrada e saída de e para o ponto de extremidade.

Para ajudar a proteger a comunicação de entrada, você pode criar um ponto de extremidade online gerenciado que utilize o ponto de extremidade privado de um espaço de trabalho do Azure Machine Learning. Para permitir apenas a comunicação de saída aprovada para implantações, você pode configurar a área de trabalho com uma rede virtual gerenciada. Este artigo mostra como seguir estas etapas para melhorar a segurança do endpoint. 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.

Se você preferir usar o método herdado para isolamento de rede, consulte os seguintes exemplos de arquivo de implantação no repositório GitHub azureml-examples :

Pré-requisitos

  • Uma assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

  • A CLI do Azure e a extensão ml da CLI do Azure, instaladas e configuradas. Para obter mais informações, consulte Instalar e configurar a CLI (v2).

    Dica

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

    az extension update -n ml
    
  • Um shell bash ou um shell compatível, por exemplo, um shell em um sistema Linux ou Subsistema do Windows para Linux. Os exemplos da CLI do Azure neste artigo pressupõem que você use esse tipo de shell.

  • Um grupo de recursos do Azure no qual você ou a entidade de serviço que você usa têm acesso de Colaborador. Para obter instruções sobre como criar um grupo de recursos, consulte Configurar.

  • 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 informações detalhadas sobre as permissões necessárias, consulte Configurar a autenticação entre o Azure Machine Learning e outros serviços. Por exemplo, você precisa conceder à sua identidade gerenciada permissões específicas de controle de acesso baseado em função (RBAC) do Azure para o Azure Key Vault.

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

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

  1. Crie um novo workspace e habilite uma rede virtual gerenciada. Para obter mais informações sobre como configurar uma rede gerenciada para seu workspace, consulte o isolamento da rede virtual gerenciada do Workspace.
  2. (Opcional) Se suas implantações acessarem recursos privados que não sejam o Armazenamento do Azure, o Key Vault e o Registro de Contêiner do Azure, adicione regras de saída às configurações de rede do seu workspace. Especificamente, a rede é configurada com regras para o Armazenamento do Azure, o Key Vault e o Registro de Contêiner por padrão. Adicione regras com pontos de extremidade privados para quaisquer outros recursos privados que você usa.
  3. (Opcional) Se você pretende usar um registro do Azure Machine Learning, configure pontos de extremidade privados para facilitar a comunicação de saída destinada ao seu registro, à sua conta de armazenamento e à sua instância do Registro de Contêiner.
  4. Crie pontos de extremidade/implantações online no novo workspace. Se você usar os registros do Azure Machine Learning, poderá implantar diretamente os componentes deles. Para obter mais informações, consulte Implantar modelo do Registro para o ponto de extremidade online no workspace.
  5. Atualize aplicativos que invocam pontos de extremidade para que os aplicativos usem os URIs de pontuação dos novos pontos de extremidade online.
  6. Depois de validar seus novos pontos de extremidade, exclua os pontos de extremidade online em seu workspace antigo.

Se você não precisar evitar o tempo de inatividade durante a migração, poderá adotar uma abordagem mais simples. Se você não precisar manter instâncias de computação, pontos de extremidade online e implantações em seu workspace antigo, poderá excluir as instâncias de computação e atualizar o workspace para habilitar uma rede virtual gerenciada.

Limitações

  • O sinalizador v1_legacy_mode deve ser definido como false desativar o modo herdado v1 no workspace do Azure Machine Learning. Se essa configuração estiver ativada, você não poderá criar um endpoint online gerenciado. Para obter mais informações, consulte a alteração de isolamento de rede com nossa nova plataforma de API no Azure Resource Manager.

  • Se o workspace do Azure Machine Learning tiver um ponto de extremidade privado criado antes de 24 de maio de 2022, você deverá recriar esse ponto de extremidade privado antes de configurar seus pontos de extremidade online para usar pontos de extremidade privados. Para obter mais informações sobre como criar um ponto de extremidade privado para seu workspace, consulte Configurar um ponto de extremidade privado para um workspace do Azure Machine Learning.

    Dica

    Para ver a data de criação de um workspace, você pode verificar as propriedades do workspace.

    1. No Azure Machine Learning Studio, vá para o canto superior direito e selecione o nome do seu espaço de trabalho.
    2. Na janela Diretório + Assinatura + Workspace, selecione Exibir todas as propriedades no portal do Azure.
    3. Na página Visão geral do portal do Azure, vá para o canto superior direito e selecione Exibição JSON.
    4. Na janela JSON do Recurso, em Versões de API, selecione a versão mais recente da API.
    5. Na seção properties do código JSON, verifique o valor creationTime.

    Como alternativa, use um dos seguintes métodos:

    • SDK do Python: Workspace.get(name=<workspace-name>, subscription_id=<subscription-ID>, resource_group=<resource-group-name>).get_details()
    • API REST: curl https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/?api-version=2023-10-01 -H "Authorization:Bearer <access-token>"
    • PowerShell:Get-AzMLWorkspace -Name <workspace-name> -ResourceGroupName <resource-group-name>
  • Ao usar o isolamento de rede para ajudar a proteger pontos de extremidade online, você pode usar recursos associados ao workspace de um grupo de recursos diferente do grupo de recursos do workspace. No entanto, esses recursos devem pertencer à mesma assinatura e locatário do seu espaço de trabalho. Os recursos associados a um workspace incluem o Registro de Contêiner do Azure, o Armazenamento do Azure, o Azure Key Vault e o Application Insights.

Observação

Este artigo descreve o isolamento de rede que se aplica às operações do plano de dados. Essas operações resultam de solicitações de pontuação ou serviço de modelo. Operações de plano de controle, como solicitações para criar, atualizar, excluir ou recuperar chaves de autenticação, são enviadas ao Azure Resource Manager pela rede pública.

Prepare seu sistema

  1. Crie variáveis de ambiente executando os comandos a seguir. Substitua <resource-group-name> pelo grupo de recursos do seu espaço de trabalho. Substitua <workspace-name> pelo nome do workspace.

    export RESOURCEGROUP_NAME="<resource-group-name>"
    export WORKSPACE_NAME="<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 workspace ou atualizar seu workspace existente para usar uma rede virtual gerenciada, consulte Configurar uma rede virtual gerenciada para permitir a saída da Internet.

  3. Provisione a rede virtual gerenciada. Para obter instruções e mais informações, consulte Provisionar manualmente uma VNet gerenciada.

    Importante

    Quando você configura uma rede virtual gerenciada para um workspace pela primeira vez, a rede não é provisionada. Você não pode criar implantações online até provisionar a rede gerenciada.

  4. Configure o registro de contêineres associado ao espaço de trabalho utilizando um plano de preços premium. Essa configuração é necessária para fornecer acesso ao registro por meio de um ponto de extremidade privado. Para obter mais informações, confira Níveis de serviço do Registro de Contêiner do Azure.

  5. Configure seu workspace para usar um cluster de computação ou uma instância de computação para criar imagens. Você pode usar a image_build_compute propriedade para essa finalidade. Para obter mais informações e instruções, consulte Configurar as compilações de imagem.

  6. Configure valores padrão para a CLI do Azure para que você possa evitar passar os valores para seu workspace e grupo de recursos várias vezes.

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

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

Os comandos neste artigo estão no arquivo deploy-managed-online-endpoint-workspacevnet.sh no diretório da CLI. Os arquivos de configuração YAML estão nos pontos de extremidade/online/gerenciados/amostra/subdiretório.

Criar um endpoint online gerenciado e seguro

Para criar um endpoint online gerenciado e seguro, crie o endpoint em seu espaço de trabalho. Em seguida, defina o valor do ponto de extremidade public_network_access como disabled para controlar a comunicação de entrada.

Essa configuração força o ponto de extremidade online a usar o ponto de extremidade privado do workspace para comunicação de entrada. A única maneira de invocar o ponto de extremidade online é usando um ponto de extremidade privado que pode acessar o espaço de trabalho em sua rede virtual. Para obter mais informações, consulte Como proteger as solicitações de pontuação de entrada e Como configurar um ponto de extremidade privado para um workspace do Azure Machine Learning.

Como o workspace está configurado para ter uma rede virtual gerenciada, todas as implantações de ponto de extremidade usam 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 endpoint com public_network_access definido como disabled para bloquear o tráfego de entrada.

    Observação

    O script referenciado usa arquivos de configuração YAML do repositório clonado. Verifique se você está no diretório correto (cli) depois de clonar o repositório ou forneça o caminho completo para seus arquivos YAML. No Azure Cloud Shell, verifique se os arquivos estão acessíveis no armazenamento em nuvem antes de executar os comandos.

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

    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
    

Testar o ponto de extremidade

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

    Se você receber um erro sobre uma falha de autorização, verifique a configuração de rede da conta de armazenamento do workspace. Talvez seja necessário ajustar as configurações de acesso à rede pública para conceder ao workspace acesso à conta de armazenamento.

  2. Obtenha o status da implantação:

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  3. Teste o ponto de extremidade emitindo uma solicitação de pontuação:

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

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

Limpar os recursos

  1. Se você não precisar mais do ponto de extremidade, execute o comando a seguir para excluí-lo.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  2. Se você não precisar mais do workspace, dos recursos associados e dos outros recursos no grupo de recursos, exclua-os. Substitua <resource-group-name> pelo nome do grupo de recursos que contém seu workspace.

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

Solução de problemas

A criação de ponto de extremidade online falha com uma mensagem sobre o modo herdado v1

Os pontos de extremidade online gerenciados são um recurso da plataforma de API do Azure Machine Learning v2. Se o workspace do Azure Machine Learning estiver configurado para o modo legado v1, os endpoints gerenciados online não funcionarão. Especificamente, se a configuração do v1_legacy_mode workspace estiver definida como true, o modo herdado v1 será ativado e não haverá suporte para APIs v2.

Para ver como desativar o modo herdado v1, consulte a alteração de isolamento de rede com nossa nova plataforma de API no Azure Resource Manager.

Importante

Verifique com sua equipe de segurança de rede antes de configurar v1_legacy_mode para false, porque o modo herdado v1 pode estar ativado com razão.

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 <key-vault-name> pelo nome do cofre de chaves.

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

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

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

Se o valor de bypass não for AzureServices, use as orientações em Configurar configurações de rede do Azure Key Vault 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. Nesse método, o Azure Machine Learning cria uma rede virtual gerenciada para cada implantação em um endpoint.

  1. Verifique se o egress-public-network-access flag tem o valor de 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 seguinte comando para verificar o status da conexão do endpoint 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'].{ID:id, status:privateLinkServiceConnectionState.status}"
    

    No código de resposta, verifique se o campo status está definido como Approved. Se o valor não for Approved, use o comando a seguir para aprovar a conexão. Substitua <private-endpoint-connection-ID> pela ID retornada pelo comando anterior.

    az network private-endpoint-connection approve --id <private-endpoint-connection-ID> --description "Approved"
    

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:

    nslookup <endpoint-name>.<endpoint-region>.inference.ml.azure.com
    

    Por exemplo, seu comando pode ser semelhante ao seguinte:

    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 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.
    • Para descobrir mais maneiras de obter o endereço IP do ponto de extremidade, consulte Atualize seu DNS com um FQDN.
  3. Se o nslookup comando não resolver o nome do host, execute as ações em uma das seções a seguir.

Pontos de extremidade online gerenciados

  1. Use o comando a seguir para verificar se existe um registro A na zona DNS (Sistema de Nomes de Domínio) privada 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 o ponto de extremidade privado para o 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 <endpoint-name>.<endpoint-region>.inference.ml.azure.com
    

Pontos de acesso online do Kubernetes

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

  2. Verifique se o roteador azureml-fede inferência do Azure Machine Learning funciona conforme o esperado. Para executar essa verificação, execute as seguintes etapas:

    1. Execute o seguinte comando no azureml-fe pod:

      kubectl exec -it deploy/azureml-fe -- /bin/bash
      
    2. Execute um dos seguintes comandos:

      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 comando HTTPS curl falhar ou atingir o tempo limite, mas o comando HTTP funcionar, verifique se o certificado é válido.

  4. Se o processo anterior não resolver o registro A, use o seguinte comando para verificar se a resolução funciona a partir do endereço IP público virtual do DNS do Azure, 168.63.129.16.

    dig @168.63.129.16 <endpoint-name>.<endpoint-region>.inference.ml.azure.com
    
  5. Se o comando anterior for bem-sucedido, solucione o encaminhador condicional para o Link Privado do Azure em um DNS personalizado.

Implantações online não podem ser pontuadas

  1. Execute o seguinte comando para ver o status de uma implantação que não pode ser pontuada:

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

    Um valor de Succeeded no campo state indica uma implantação bem-sucedida.

  2. Para uma implantação bem-sucedida, use o seguinte comando para verificar se o tráfego está atribuído à implantação:

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

    A resposta desse comando deve listar o percentual de tráfego atribuído a cada implantação.

    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 estiverem definidos corretamente, use o comando a seguir para obter os logs do ponto de extremidade:

    az ml online-deployment get-logs  -e <endpoint-name> -n <deployment-name> 
    
  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.