Proteger um ambiente de treinamento do Azure Machine Learning com redes virtuais (SDKv1)

APLICA-SE A: SDK do Python azureml v1

Neste artigo, você aprenderá a proteger ambientes de treinamento com uma rede virtual no Azure Machine Learning usando o Python SDK v1.

A instância de computação e o cluster de cálculo do Azure Machine Learning podem ser usados para treinar modelos com segurança em uma rede virtual. Ao planejar seu ambiente, você pode configurar a instância de cluster/cluster de cálculo com ou sem um endereço IP público. As diferenças gerais entre os dois são:

  • Sem IP público: reduz os custos, pois não tem os mesmos requisitos de recursos de rede. Aumenta a segurança removendo o requisito de tráfego de entrada da Internet. No entanto, alterações de configuração adicionais são necessárias para habilitar o acesso de saída a recursos necessários (Microsoft Entra ID, Azure Resource Manager, etc.).
  • Com IP público: funciona por padrão, mas custa mais devido a recursos de rede adicionais do Azure. Requer a comunicação de entrada do serviço Azure Machine Learning pela Internet pública.

A seguinte tabela contém as diferenças entre essas configurações:

Configuração Com IP público Sem IP público
Tráfego de entrada Marca de serviço AzureMachineLearning. Nenhum
Tráfego de saída Por padrão, pode acessar a Internet pública sem restrições.
Você pode restringir o que é acessado usando um grupo de segurança de rede ou um firewall.
Por padrão, ele não pode acessar a Internet. Se ele ainda puder enviar tráfego de saída para a Internet, o motivo será o acesso de saída padrão do Azure e a presença de um NSG que permita a saída para a Internet. Não recomendamos usar o acesso de saída padrão.
Se você precisar de acesso de saída à Internet, recomendamos usar um gateway da NAT da Rede Virtual ou um Firewall para rotear o tráfego de saída aos recursos necessários na Internet.
Recursos de rede do Azure Endereço IP público, balanceador de carga, adaptador de rede Nenhum

Você também pode usar o Azure Databricks ou o HDInsight para treinar modelos em uma rede virtual.

Dica

Você pode usar as redes virtuais gerenciadas do Azure Machine Learning em vez das etapas neste artigo. Com uma rede virtual gerenciada, o Azure Machine Learning lida com o trabalho de isolamento da rede para seu workspace e computação gerenciada. Você também pode adicionar pontos de extremidade privados para os recursos necessários para o workspace, como uma Conta de Armazenamento do Azure. Para obter mais informações, confira Isolamento de rede gerenciada no workspace.

Observação

Para obter mais informações sobre como usar o Estúdio do Azure Machine Learning e o SDK do Python v2, veja Proteger ambiente de treinamento (v2).

Para um tutorial sobre como criar um workspace seguro, consulte Tutorial: Criar um workspace seguro no portal do Azure, modelo Bicep ou modelo do Terraform.

Neste artigo, você aprenderá a proteger os seguintes recursos de computação de treinamento em uma rede virtual:

  • Cluster de computação do Azure Machine Learning
  • Instância de computação do Azure Machine Learning
  • Azure Databricks
  • Máquina Virtual
  • Cluster HDInsight

Importante

Os itens neste artigo marcados "versão prévia" estão em versão prévia pública no momento. A versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Pré-requisitos

  • Leia o artigo Visão geral de segurança de rede para entender cenários comuns de rede virtual e toda a arquitetura de rede virtual.

  • Uma rede e sub-rede virtuais existentes para usar com os recursos de computação. Essa VNet precisa estar na mesma assinatura que o workspace do Azure Machine Learning.

    • Recomendamos colocar as contas de armazenamento usadas por seu workspace e seus trabalhos de treinamento na mesma região do Azure que você planeja usar para seus clusters de cálculo e instâncias de computação. Se eles não estiverem na mesma região do Azure, você poderá incorrer em custos de transferência de dados e em maior latência de rede.
    • Verifique se a comunicação WebSocket tem permissão para *.instances.azureml.net e *.instances.azureml.ms na VNet. WebSockets são usados pelo Jupyter em instâncias de computação.
  • Uma sub-rede existente na rede virtual. Essa sub-rede é usada ao criar clusters de cálculo e instâncias de computação.

    • Verifique se a sub-rede não está delegada a outros serviços do Azure.
    • Verifique se a sub-rede contém endereços IP livres suficientes. Cada instância de computação requer um endereço IP. Cada dentro de um cluster de cálculo requer um endereço IP.
  • Se você tem um servidor DNS, recomendamos usar o encaminhamento DNS para resolver os FQDNs (nomes de domínio totalmente qualificados) dos clusters de cálculo e das instâncias de computação. Para obter mais informações, consulte Usar um DNS personalizado com o Azure Machine Learning.

  • Para implantar recursos em uma rede virtual ou sub-rede, sua conta de usuário deve ter permissões para as seguintes ações no RBAC do Azure (controle de acesso baseado em função do Azure):

    • "Microsoft.Network/*/read" no recurso de rede virtual. Essa permissão não é necessária para implantações do modelo do ARM (Azure Resource Manager).
    • "Microsoft.Network/virtualNetworks/join/action" no recurso de rede virtual.
    • "Microsoft.Network/virtualNetworks/subnets/join/action" no recurso de sub-rede.

    Para saber mais sobre o RBAC do Azure com rede, confira Funções internas da rede

Limitações

Cluster de cálculo/instância do Azure Machine Learning

  • É possível criar clusters de cálculo em uma região e VNET diferente da região de seu workspace. No entanto, essa funcionalidade só está disponível usando o SDK v2, a CLI v2 ou o studio. Para obter mais informações, consulte a versão v2 de ambientes de treinamento seguros.

  • Não há suporte para a implantação de instâncias de computação/clusters de cálculo na rede virtual com o Azure Lighthouse.

  • A porta 445 precisa estar aberta para comunicações de rede privada entre suas instâncias de computação e a conta de armazenamento padrão durante o treinamento. Por exemplo, se os cálculos estiverem em uma VNet e a conta de armazenamento estiver em outra, não bloqueie a porta 445 para a VNet da conta de armazenamento.

Azure Databricks

  • A rede virtual deve estar na mesma assinatura e região que o workspace do Azure Machine Learning.
  • Se as Contas de Armazenamento do Azure para o workspace também estiverem protegidas em uma rede virtual, elas deverão estar na mesma rede virtual que o cluster do Azure Databricks.
  • Além das sub-redes databricks-particular e databricks-público usadas pelos Azure Databricks, a sub-rede padrão criada para a rede virtual também é necessária.
  • O Azure Databricks não usa um ponto de extremidade privado para se comunicar com a rede virtual.

Para obter mais informações sobre o uso do Azure Databricks em uma rede virtual, confira Implantar o Azure Databricks na sua Rede Virtual do Azure.

Azure HDInsight ou máquina virtual

  • O Azure Machine Learning dá suporte apenas a máquinas virtuais que executam Ubuntu.

Instância de computação/cluster de cálculo sem IP público

Importante

Se você estiver usando instâncias de computação ou clusters de computação configurados para nenhum IP público sem aceitar a versão prévia, será necessário excluí-los e recriá-los após 20 de janeiro de 2023 (quando o recurso estiver disponível).

Se você estava usando a versão prévia sem IP público, talvez também precise modificar o tráfego de entrada e saída permitido, pois os requisitos foram alterados para a disponibilidade geral:

  • Requisitos de saída – duas saídas adicionais, que são usadas apenas para o gerenciamento de instâncias de computação e clusters de cálculo. O destino dessas marcas de serviço pertence à Microsoft:
    • Marca de serviço AzureMachineLearning na porta UDP 5831.
    • Marca de serviço BatchNodeManagement na porta TCP 443.

As seguintes configurações são adicionais àquelas listadas na seção Pré-requisitos e são específicas para criar uma instância de computação/cluster de cálculo configurado para não ter um IP público:

  • Você deve usar um ponto de extremidade privado do workspace para que o recurso de computação se comunique com os serviços do Azure Machine Learning da VNet. Para obter mais informações, confira Configurar um ponto de extremidade privado para um workspace do Azure Machine Learning.

  • Na VNet, permita o tráfego de saída para as seguintes marcas de serviço ou FQDNs (nomes de domínio totalmente qualificados):

    Marca de serviço Protocolo Porta Observações
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Comunicação com o serviço do Azure Machine Learning.
    BatchNodeManagement.<region> ANY 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Comunicação com o Lote do Azure. A instância de computação e o cluster de computação são implementados usando o serviço do Lote do Azure.
    Storage.<region> TCP 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Essa marca de serviço é usada para se comunicar com a conta de Armazenamento do Azure usada pelo Lote do Azure.

    Importante

    O acesso de saída a Storage.<region> pode ser usado para exfiltrar dados de seu workspace. Com o uso da Política do Ponto de Extremidade de Serviço, você pode atenuar essa vulnerabilidade. Para obter mais informações, confira o artigo Prevenção de exfiltração dos dados do Azure Machine Learning.

    FQDN Protocolo Porta Observações
    <region>.tundra.azureml.ms UDP 5831 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning.
    graph.windows.net TCP 443 Comunicação com a API do Microsoft Graph.
    *.instances.azureml.ms TCP 443/8787/18881 Comunicação com o Azure Machine Learning.
    *.<region>.batch.azure.com ANY 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Comunicação com o Lote do Azure.
    *.<region>.service.batch.azure.com ANY 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Comunicação com o Lote do Azure.
    *.blob.core.windows.net TCP 443 Comunicação com o Armazenamento de Blobs do Azure.
    *.queue.core.windows.net TCP 443 Comunicação com o Armazenamento de Filas do Azure.
    *.table.core.windows.net TCP 443 Comunicação com o Armazenamento de Tabelas do Azure.
  • Crie um firewall e regras de saída ou um gateway NAT e grupos de serviços de rede para permitir o tráfego de saída. Como a computação não tem endereço IP público, ela não pode se comunicar com recursos na Internet pública sem essa configuração. Por exemplo, ele não conseguiria se comunicar com o Microsoft Entra ID ou o Azure Resource Manager. A instalação de pacotes Python de fontes públicas também exigiria essa configuração.

    Para obter mais informações sobre o tráfego de saída usado pelo Azure Machine Learning, confira os seguintes artigos:

Use as seguintes informações para criar uma instância de computação ou cluster de cálculo sem endereço IP público:

Para criar uma instância de computação ou um cluster de cálculo sem IP público, use a interface do usuário do Estúdio do Azure Machine Learning para criar o recurso:

  1. Entre no Estúdio do Azure Machine Learning e selecione sua assinatura e workspace.

  2. Selecione a página Computação na barra de navegação esquerda.

  3. Selecione + Novo na barra de navegação da instância de computação ou do cluster de cálculo.

  4. Defina o tamanho da VM e as configurações necessárias e selecione Avançar.

  5. Em Configurações Avançadas, selecione Habilitar rede virtual, sua rede virtual e sub-rede e, por fim, selecione a opção Sem IP público na seção VNet/sub-rede.

    Uma captura de tela de como configurar a opção de nenhum IP público para a instância de computação e o cluster de cálculo.

Dica

Você também pode usar o SDK do Azure Machine Learning v2 ou a extensão da CLI do Azure para ML v2. Para obter informações sobre como criar uma instância de computação ou um cluster de cálculo sem IP público, consulte a versão v2 do artigo Proteger um ambiente de treinamento do Azure Machine Learning.

Instância de computação/cluster de cálculo com IP público

As seguintes configurações são adicionais àquelas listadas na seção Pré-requisitos e são específicas para criar instâncias de computação/clusters de cálculo que têm um IP público:

  • Se você colocar várias instâncias de computação/clusters de cálculo em uma rede virtual, talvez precise solicitar um aumento de cota para um ou mais de seus recursos. A instância ou cluster de computação do Machine Learning aloca automaticamente recursos de rede no grupo de recursos que contém a rede virtual. Para cada instância ou cluster de computação, o serviço aloca os seguintes recursos:

    • Um NSG (grupo de segurança de rede) é criado automaticamente. Esse NSG permite o tráfego TCP de entrada na porta 44224 da marca de serviço AzureMachineLearning.

      Importante

      A instância de computação e o cluster de computação criam automaticamente um NSG com as regras necessárias.

      Se você tiver outro NSG no nível da sub-rede, as regras no NSG de nível de sub-rede não devem entrar em conflito com as regras no NSG criado automaticamente.

      Para saber como os NSGs filtram o tráfego de rede, consulte Como os grupos de segurança de rede filtram o tráfego de rede.

    • Um balanceador de carga

    Para clusters de cálculo, esses recursos são excluídos toda vez que o cluster é reduzido para 0 nós e criado ao escalar verticalmente.

    Para uma instância de computação, esses recursos são mantidos até que a instância seja excluída. Parar a instância não remove os recursos.

    Importante

    Esses recursos são limitados pelas cotas de recursos da assinatura. Se o grupo de recursos de rede virtual estiver bloqueado, ocorrerá falha na exclusão do cluster/instância de computação. Não é possível excluir o balanceador de carga até que o cluster/instância de computação seja excluído. Além disso, verifique se não há nenhuma atribuição do Azure Policy que proíba a criação de grupos de segurança de rede.

  • Na sua VNet, permita o tráfego TCP de entrada na porta 44224 da marca de serviço AzureMachineLearning.

    Importante

    Um endereço IP é atribuído dinamicamente quando a instância ou o cluster de computação é criado. Como o endereço não é conhecido antes da criação e o acesso de entrada é necessário como parte do processo de criação, você não pode atribuí-lo estaticamente no firewall. Em vez disso, se você estiver usando um firewall com a VNet, precisará criar uma rota definida pelo usuário para permitir esse tráfego de entrada.

  • Na VNet, permita o tráfego de saída para as seguintes marcas de serviço:

    Marca de serviço Protocolo Porta Observações
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Comunicação com o serviço do Azure Machine Learning.
    BatchNodeManagement.<region> ANY 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Comunicação com o Lote do Azure. A instância de computação e o cluster de computação são implementados usando o serviço do Lote do Azure.
    Storage.<region> TCP 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Essa marca de serviço é usada para se comunicar com a conta de Armazenamento do Azure usada pelo Lote do Azure.

    Importante

    O acesso de saída a Storage.<region> pode ser usado para exfiltrar dados de seu workspace. Com o uso da Política do Ponto de Extremidade de Serviço, você pode atenuar essa vulnerabilidade. Para obter mais informações, confira o artigo Prevenção de exfiltração dos dados do Azure Machine Learning.

    FQDN Protocolo Porta Observações
    <region>.tundra.azureml.ms UDP 5831 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning.
    graph.windows.net TCP 443 Comunicação com a API do Microsoft Graph.
    *.instances.azureml.ms TCP 443/8787/18881 Comunicação com o Azure Machine Learning.
    *.<region>.batch.azure.com ANY 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Comunicação com o Lote do Azure.
    *.<region>.service.batch.azure.com ANY 443 Substitua <region> pela região do Azure que contém seu espaço de trabalho do Azure Machine Learning. Comunicação com o Lote do Azure.
    *.blob.core.windows.net TCP 443 Comunicação com o Armazenamento de Blobs do Azure.
    *.queue.core.windows.net TCP 443 Comunicação com o Armazenamento de Filas do Azure.
    *.table.core.windows.net TCP 443 Comunicação com o Armazenamento de Tabelas do Azure.

APLICA-SE A: SDK do Python azureml v1

import datetime
import time

from azureml.core.compute import ComputeTarget, ComputeInstance
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your instance
# Compute instance name should be unique across the azure region
compute_name = "ci{}".format(ws._workspace_id)[:10]

# Verify that instance does not exist already
try:
    instance = ComputeInstance(workspace=ws, name=compute_name)
    print('Found existing instance, use it.')
except ComputeTargetException:
    compute_config = ComputeInstance.provisioning_configuration(
        vm_size='STANDARD_D3_V2',
        ssh_public_access=False,
        vnet_resourcegroup_name='vnet_resourcegroup_name',
        vnet_name='vnet_name',
        subnet_name='subnet_name',
        # admin_user_ssh_public_key='<my-sshkey>'
    )
    instance = ComputeInstance.create(ws, compute_name, compute_config)
    instance.wait_for_completion(show_output=True)

Após concluir o processo de criação, treine o modelo. Para obter mais informações, consulte Selecionar e usar um destino de computação para treinamento.

Azure Databricks

  • A rede virtual deve estar na mesma assinatura e região que o workspace do Azure Machine Learning.
  • Se as Contas de Armazenamento do Azure para o workspace também estiverem protegidas em uma rede virtual, elas deverão estar na mesma rede virtual que o cluster do Azure Databricks.
  • Além das sub-redes databricks-particular e databricks-público usadas pelos Azure Databricks, a sub-rede padrão criada para a rede virtual também é necessária.
  • O Azure Databricks não usa um ponto de extremidade privado para se comunicar com a rede virtual.

Para obter informações específicas sobre o uso do Azure Databricks com uma rede virtual, consulte Implantar o Azure Databricks na sua Rede Virtual do Azure.

Acesso à Internet pública necessário para treinar modelos

Importante

Embora as seções anteriores deste artigo descrevam as configurações necessárias para criar recursos de computação, as informações de configuração nesta seção são necessárias para usar esses recursos para treinar modelos.

O Azure Machine Learning exige o acesso de entrada e de saída à Internet pública. As tabelas a seguir fornecem uma visão geral do acesso necessário e para o que ele é usado. Para as marcas de serviço que terminam em .region, substitua region pela região do Azure que contém o seu workspace. Por exemplo Storage.westus:

Dica

A guia necessária lista a configuração de entrada e saída exigida. A guia situacional lista as configurações opcionais de entrada e saída exigidas por configurações específicas que talvez você queira habilitar.

Direção Protocolo e
ports
Marca de serviço Finalidade
Saída TCP: 80, 443 AzureActiveDirectory Autenticação usando o Microsoft Entra ID.
Saída TCP: 443, 18881
UDP: 5831
AzureMachineLearning Uso dos serviços do Azure Machine Learning.
O IntelliSense do Python em notebooks usa a porta 18881.
Criar, atualizar e excluir uma instância de computação do Azure Machine Learning usa a porta 5831.
Saída ANY: 443 BatchNodeManagement.region Comunicação com o back-end do Lote do Azure para instâncias/clusters de computação do Azure Machine Learning.
Saída TCP: 443 AzureResourceManager Criação de recursos do Azure com o Azure Machine Learning, a CLI do Azure e o SDK do Azure Machine Learning.
Saída TCP: 443 Storage.region Acessar dados armazenados na Conta de Armazenamento do Microsoft Azure para cluster de cálculo e instância de computação. Para obter informações sobre como evitar a exfiltração dos dados nessa saída, confira Proteção contra exfiltração dos dados.
Saída TCP: 443 AzureFrontDoor.FrontEnd
* Não é necessário no Microsoft Azure operado pela 21Vianet.
Ponto de entrada global para o Estúdio do Azure Machine Learning. Armazene imagens e ambientes para AutoML. Para obter informações sobre como evitar a exfiltração dos dados nessa saída, confira Proteção contra exfiltração dos dados.
Saída TCP: 443 MicrosoftContainerRegistry.region
Observe que essa marca tem uma dependência na marca AzureFrontDoor.FirstParty
Acesse as imagens do Docker fornecidas pela Microsoft. Instalação do roteador do Azure Machine Learning para o Serviço de Kubernetes do Azure.

Dica

Se você precisar dos endereços IP em vez de marcas de serviço, use uma das seguintes opções:

Os endereços IP podem ser alterados periodicamente.

Talvez você também precise permitir o tráfego de saída no Visual Studio Code e em sites que não são da Microsoft para a instalação de pacotes necessários para o seu projeto de machine learning. A seguinte tabela lista os repositórios usados com frequência para machine learning:

Nome do host Finalidade
anaconda.com
*.anaconda.com
Usado para instalar pacotes padrão.
*.anaconda.org Usado para obter dados do repositório.
pypi.org Usado para listar dependências com base no índice padrão, se houver, quando o índice não foi substituído pelas configurações do usuário. Se o índice tiver sido substituído, você deverá permitir também *.pythonhosted.org.
cloud.r-project.org Usado ao instalar pacotes CRAN para desenvolvimento de R.
*.pytorch.org Usado por alguns exemplos com base em PyTorch.
*.tensorflow.org Usado por alguns exemplos com base em Tensorflow.
code.visualstudio.com Necessário para baixar e instalar a área de trabalho do Visual Studio Code. Isso não é necessário para o Visual Studio Code Web.
update.code.visualstudio.com
*.vo.msecnd.net
Usado para recuperar bits do servidor do Visual Studio Code que estão instalados na instância de computação por meio de um script de instalação.
marketplace.visualstudio.com
vscode.blob.core.windows.net
*.gallerycdn.vsassets.io
Necessário para baixar e instalar as extensões do Visual Studio Code. Esses hosts habilitam a conexão remota para instâncias de computação usando a extensão do Azure ML para Visual Studio Code. Para obter mais informações, consulte Conectar-se a uma instância de computação do Azure Machine Learning no Visual Studio Code.
raw.githubusercontent.com/microsoft/vscode-tools-for-ai/master/azureml_remote_websocket_server/* Usado para recuperar bits do servidor WebSocket que estão instalados na instância de computação. O servidor websocket é usado para transmitir solicitações do cliente do Visual Studio Code (aplicativo de área de trabalho) para o servidor do Visual Studio Code em execução na instância de computação.

Observação

Ao usar a extensão do VS Code do Azure Machine Learning, a instância de computação remota exigirá acesso a repositórios públicos para instalar os pacotes exigidos pela extensão. Se a instância de computação exigir um proxy para acessar esses repositórios públicos ou a Internet, você precisará definir e exportar as variáveis de ambiente HTTP_PROXY e HTTPS_PROXY no arquivo ~/.bashrc da instância de computação. Esse processo pode ser automatizado no momento do provisionamento usando um script personalizado.

Ao usar AKS (Serviço de Kubernetes do Azure) com o Azure Machine Learning, permita o seguinte tráfego para a VNet do AKS:

Para obter informações sobre como usar uma solução de firewall, confira Usar um firewall com o Azure Machine Learning.

Próximas etapas

Este artigo faz parte de uma série sobre como proteger um fluxo de trabalho do Azure Machine Learning. Confira os outros artigos desta série: