Partilhar via


Proteja os pontos de extremidade online gerenciados usando o isolamento de rede

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

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

Para ajudar a proteger a comunicação de entrada, pode criar uma extremidade online gerida que utiliza a extremidade privada de um ambiente de trabalho do Azure Machine Learning. Para permitir apenas a comunicação de saída aprovada para implantações, você pode configurar o espaço de trabalho com uma rede virtual gerenciada. Este artigo mostra como executar essas etapas para melhorar a segurança do ponto final. Também lhe mostra como criar uma implementação que utiliza os pontos finais privados da rede virtual gerida do espaço de trabalho para comunicação de saída.

Se 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 não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

  • A CLI do Azure e a extensão da CLI ml do Azure, instaladas e configuradas. Para mais informações, veja Install and set up the CLI (v2).

    Gorjeta

    O recurso de rede virtual gerenciada do Azure Machine Learning foi apresentado 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 neste 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 num sistema Linux ou Subsistema 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 tu ou o principal de serviço que estás a usar têm acesso de colaborador. Para obter instruções sobre como criar um grupo de recursos, consulte Configurar.

  • Uma identidade gerida atribuída pelo utilizador com permissões apropriadas, caso pretenda usar uma identidade gerida para criar e gerir pontos finais online e implementações online. 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 gerida permissões de controle de acesso do Azure baseadas em função (Azure RBAC) específicas para o Azure Key Vault.

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

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 espaço de trabalho e habilite uma 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 por espaço de trabalho.
  2. (Opcional) Se suas implantações acessarem recursos privados diferentes do Armazenamento do Azure, do Cofre da Chave e do Registro de Contêiner do Azure, adicione regras de saída às configurações de rede do seu espaço de trabalho. Especificamente, a rede é configurada com regras para o Armazenamento do Azure, Cofre de Chaves e Registro de Contêiner por padrão. Adicione regras com pontos de extremidade privados para quaisquer outros recursos privados que utilizar.
  3. (Opcional) Se pretendes usar um registo do Azure Machine Learning, configura pontos de extremidade privados para comunicação de saída com o teu registo, a tua conta de armazenamento e a tua instância do Registo de Contêiner.
  4. Crie pontos finais e implementações online no novo workspace. Se você usar os registros do Azure Machine Learning, poderá implantar componentes diretamente a partir deles. Para mais informações, consulte Desenvolver o modelo a partir do registo para o ponto de extremidade online no espaço de trabalho.
  5. Atualize os 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 os seus novos endpoints, elimine os endpoints online no seu espaço de trabalho antigo.

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

Limitações

  • O v1_legacy_mode sinalizador deve ser definido para false desativar o modo herdado v1 em seu espaço de trabalho do Azure Machine Learning. Se essa configuração estiver ativada, não será possível criar um ponto de extremidade online gerenciado. Para obter mais informações, consulte Alteração de isolamento de rede com nossa nova plataforma de API no Azure Resource Manager.

  • 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 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 espaço de trabalho, consulte Configurar um ponto de extremidade privado para um espaço de trabalho do Azure Machine Learning.

    Gorjeta

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

    1. No estúdio do Azure Machine Learning, vá para o canto superior direito e selecione o nome do seu espaço de trabalho.
    2. Na janela Diretório + Subscrição + Espaço de Trabalho, selecione Ver todas as propriedades no portal 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 de recursos, em Versões da API, selecione a versão mais recente da API.
    5. properties Na seção 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 usares o isolamento de rede para ajudar a proteger pontos de extremidade online, podes utilizar recursos associados ao espaço de trabalho provenientes de um grupo de recursos diferente do grupo de recursos do teu espaço de trabalho. No entanto, esses recursos devem pertencer à mesma assinatura e locatário do seu espaço de trabalho. Os recursos associados a um espaço de trabalho incluem o Registro de Contêiner do Azure, o Armazenamento do Azure, o Cofre da Chave do Azure e o Application Insights.

Nota

Este artigo descreve o isolamento de rede que se aplica a operações de plano de dados. Essas operações 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 Azure Resource Manager pela rede pública.

Prepare o seu sistema

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

    export RESOURCEGROUP_NAME="<resource-group-name>"
    export WORKSPACE_NAME="<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 o utilizador quiser permitir que a implementação envie tráfego de saída para a Internet, descomente o 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.

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

    Importante

    Quando você configura uma rede virtual gerenciada para um espaço de trabalho pela primeira vez, a rede não é provisionada. Não é possível criar implantações online até provisionar a rede gerenciada.

  4. Configure o registro de contêiner associado ao espaço de trabalho para usar 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, veja Escalões de serviço do Azure Container Registry (ACR).

  5. Configure seu espaço de trabalho 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 este fim. Para obter mais informações e instruções, consulte Configurar compilações de imagem.

  6. Configure valores padrão para a CLI do Azure 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
    
  7. Clone o repositório de exemplos para obter os ficheiros de exemplo para o ponto de extremidade e a implantação. Em seguida, vá para o diretório 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 cli. Os arquivos de configuração do YAML estão no subdiretório endpoints/online/managed/sample/.

Criar um endpoint online gerenciado seguro

Para criar um ponto de extremidade online gerido e seguro, crie o ponto de extremidade na sua área de trabalho. Em seguida, configure o valor do ponto de extremidade public_network_access para disabled a fim de controlar a comunicação de entrada.

Esta configuração obriga o ponto de extremidade online a usar o ponto de extremidade privado do espaço de trabalho para a comunicação de entrada. A única maneira de invocar o ponto de extremidade online é usando um ponto de extremidade privado que possa 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 o espaço de trabalho 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 ponto de extremidade com public_network_access definido como disabled para bloquear o tráfego de entrada.

    Nota

    O script referenciado utiliza ficheiros de configuração YAML do repositório clonado. Certifica-te de que estás no diretório correto (cli) depois de clonares o repositório, ou fornece o caminho completo para os teus ficheiros YAML. No Azure Cloud Shell, verifique se os ficheiros estão acessíveis no seu armazenamento na cloud 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 pretender permitir que o endpoint receba solicitações de pontuação via Internet, descomente o código seguinte e execute-o:

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    

Testar o parâmetro de avaliação

  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 para a conta de armazenamento do espaço de trabalho. Talvez seja necessário ajustar as configurações de acesso à rede pública para conceder ao espaço de trabalho 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
    

Limpeza de recursos

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

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

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

Resolução de Problemas

A criação de endpoints online falha com uma mensagem sobre o modo legado v1

Os endpoints online geridos são uma funcionalidade da plataforma de API do Azure Machine Learning v2. Se o seu espaço de trabalho do Azure Machine Learning estiver configurado para o modo legado v1, os endereços online geridos não funcionarão. Especificamente, se a configuração do espaço de trabalho estiver definida como v1_legacy_mode, o true modo herdado v1 será ativado e não haverá suporte para APIs v2.

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

Importante

Verifique com a sua equipa de segurança de rede antes de definir v1_legacy_mode como false, porque o modo v1 herdado pode estar ativado por um motivo.

Falha na criação de endpoints online com 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 <key-vault-name> pelo nome do cofre de chaves.

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

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

{
    "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 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. Nesse método, o Azure Machine Learning cria uma rede virtual gerida para cada implantação em um endpoint.

  1. Verifique se a egress-public-network-access bandeira tem um 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. Utilize o seguinte comando para verificar o estado da ligação do 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'].{ID:id, status:privateLinkServiceConnectionState.status}"
    

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

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

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:

    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.

    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 usa HTTP, o endereço IP está contido no URI do ponto de extremidade, que pode ser obtido pela interface do estúdio.
    • Para saber mais formas de obter o endereço IP do ponto de extremidade, consulte Atualizar o 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 finais online geridos

  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 do espaço de trabalho e recrie-o. Para obter mais informações, consulte Como configurar um ponto de extremidade privado.

  3. Caso o espaço de trabalho com um ponto de extremidade privado utilize um servidor DNS personalizado, execute o seguinte comando para verificar se a resolução desse servidor DNS funciona corretamente:

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

Pontos finais online do Kubernetes

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

  2. Verifique se o roteador de inferência do Azure Machine Learning, azureml-fe, 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 curl HTTPS falhar ou expirar, mas o comando HTTP funcionar, verifique se o certificado é válido.

  4. Se o processo anterior falhar em resolver o registo A, use o seguinte comando para verificar se a resolução funciona a partir do endereço IP público virtual do Azure DNS, 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 problemas do encaminhador condicional para o Azure Private Link em um DNS personalizado.

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

  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 para o state campo 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 a porcentagem de tráfego atribuída a cada implantação.

    Gorjeta

    Esta etapa não será necessária se tu usares o cabeçalho azureml-model-deployment na tua solicitação para direcionar esta implementação.

  3. Se as atribuições de rede ou o cabeçalho de implementação estiverem definidos corretamente, use o seguinte comando para obter os logs do endpoint:

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