Partilhar via


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

APLICA-SE A: Python SDK 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 do Azure Machine Learning e o cluster de computação podem ser usados para treinar modelos com segurança em uma rede virtual. Ao planejar seu ambiente, você pode configurar a instância/cluster de computação 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. Melhora a segurança removendo a necessidade de tráfego de entrada da Internet. No entanto, há alterações de configuração adicionais necessárias para habilitar o acesso de saída aos recursos necessários (ID do Microsoft Entra, Gerenciador de Recursos do Azure, etc.).
  • IP público: funciona por padrão, mas custa mais devido a recursos de rede adicionais do Azure. Requer comunicação de entrada do serviço Azure Machine Learning pela Internet pública.

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

Configuração Com IP público Sem IP público
Tráfego de entrada AzureMachineLearning etiqueta de serviço. Nenhuma
Tráfego de saída Por padrão, pode acessar a internet pública sem restrições.
Você pode restringir o que ele acessa usando um Grupo de Segurança de Rede ou firewall.
Por padrão, ele não pode acessar a internet. Se ele ainda pode enviar tráfego de saída para a Internet, é devido ao acesso de saída padrão do Azure e você tem um NSG que permite a saída para a Internet. Não recomendamos o uso do acesso de saída padrão.
Se você precisar de acesso de saída à Internet, recomendamos usar um gateway NAT de Rede Virtual ou Firewall em vez disso, se precisar rotear o tráfego de saída para os recursos necessários na Internet.
Recursos de rede do Azure Endereço IP público, balanceador de carga, interface de rede Nenhuma

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

Gorjeta

Você pode usar 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 de rede para seu espaço de trabalho e cálculos gerenciados. Você também pode adicionar pontos de extremidade privados para recursos necessários para o espaço de trabalho, como a Conta de Armazenamento do Azure. Para obter mais informações, consulte Isolamento de rede gerenciado pelo espaço de trabalho.

Nota

Para obter informações sobre como usar o estúdio do Azure Machine Learning e o SDK do Python v2, consulte Ambiente de treinamento seguro (v2).

Para obter um tutorial sobre como criar um espaço de trabalho seguro, consulte Tutorial: Criar um espaço de trabalho seguro no portal do Azure ou Tutorial: Criar um espaço de trabalho seguro usando um modelo.

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 do HDInsight

Importante

Os itens neste artigo marcados como "visualização" estão atualmente em visualização pública. A versão de visualização é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Pré-requisitos

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

  • Uma rede virtual e uma sub-rede existentes para usar com seus recursos de computação. Essa rede virtual deve estar na mesma assinatura que seu espaço de trabalho do Azure Machine Learning.

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

    • Certifique-se de que a sub-rede não está delegada a outros serviços do Azure.
    • Certifique-se de que a sub-rede contém endereços IP livres suficientes. Cada instância de computação requer um endereço IP. Cada nó dentro de um cluster de computação requer um endereço IP.
  • Se você tiver seu próprio servidor DNS, recomendamos usar o encaminhamento DNS para resolver os FQDN (nomes de domínio totalmente qualificados) de instâncias de computação e clusters. 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 controle de acesso baseado em função do Azure (RBAC do Azure):

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

    Para obter mais informações sobre o RBAC do Azure com rede, consulte as funções internas de rede

Limitações

Cluster/instância de computação do Azure Machine Learning

  • Os clusters de computação podem ser criados em uma região e VNet diferentes do seu espaço de trabalho. No entanto, essa funcionalidade só está disponível usando o SDK v2, CLI v2 ou estúdio. Para obter mais informações, consulte a versão v2 de ambientes de treinamento seguros.

  • A implantação de cluster/instância de computação na rede virtual não é suportada com o Azure Lighthouse.

  • A porta 445 têm de estar aberta para comunicações de rede privadas entre as suas instâncias de computação e a conta de armazenamento predefinida durante a preparação. Por exemplo, se seus cálculos estiverem numa VNet e a conta de armazenamento estiver noutra, 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 espaço de trabalho do Azure Machine Learning.
  • Se a(s) Conta(s) de Armazenamento do Azure para o espaço de trabalho 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-private e databricks-public usadas pelo 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 como usar o Azure Databricks em uma rede virtual, consulte Implantar o Azure Databricks em sua Rede Virtual do Azure.

Azure HDInsight ou máquina virtual

  • O Azure Machine Learning suporta apenas máquinas virtuais que executam o Ubuntu.

Instância de computação/cluster 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 optar pela visualização, será necessário excluí-los e recriá-los após 20 de janeiro de 2023 (quando o recurso estiver disponível ao público em geral).

Se você estava usando anteriormente a visualização de nenhum IP público, também pode ser necessário modificar o tráfego permitido de entrada e saída, pois os requisitos foram alterados para 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. O destino dessas tags de serviço pertence à Microsoft:
    • AzureMachineLearning etiqueta de serviço na porta UDP 5831.
    • BatchNodeManagement tag de serviço na porta TCP 443.

As configurações a seguir são adicionais às listadas na seção Pré-requisitos e são específicas para criar instâncias/clusters de computação configurados para nenhum IP público:

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

  • Na sua VNet, permita o tráfego de saída para as seguintes etiquetas de serviço ou nomes de domínio completamente qualificados (FQDN):

    Etiqueta de serviço Protocolo Porta Notas
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Comunicação com o serviço Azure Machine Learning.
    BatchNodeManagement.<region> QUALQUER 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Comunicação com o Azure Batch. A instância de computação e o cluster de computação são implementados utilizando o serviço Azure Batch.
    Storage.<region> TCP 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Esta etiqueta de serviço é utilizada para comunicar com a conta de Armazenamento do Azure utilizada pelo Azure Batch.

    Importante

    O acesso de saída a Storage.<region> pode ser usado para exfiltrar dados do seu espaço de trabalho. Com uma Política de Ponto Final de Serviço, pode mitigar esta vulnerabilidade. Para obter mais informações, veja o artigo Prevenção contra exfiltração de dados do Azure Machine Learning.

    FQDN Protocolo Porta Notas
    <region>.tundra.azureml.ms UDP 5831 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning.
    graph.windows.net TCP 443 Comunicação com a Microsoft Graph API.
    *.instances.azureml.ms TCP 443/8787/18881 Comunicação com o Azure Machine Learning.
    *.<region>.batch.azure.com QUALQUER 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Comunicação com o Azure Batch.
    *.<region>.service.batch.azure.com QUALQUER 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Comunicação com o Azure Batch.
    *.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 o computador não tem endereço IP público, ele não pode se comunicar com recursos na Internet pública sem essa configuração. Por exemplo, ele não seria capaz de se comunicar com o Microsoft Entra ID ou o Azure Resource Manager. A instalação de pacotes Python a partir de fontes públicas também exigiria essa configuração.

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

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

Para criar uma instância de computação ou cluster de computação sem IP público, use a interface do usuário do estúdio de Aprendizado de Máquina do Azure para criar o recurso:

  1. Entre no estúdio do Azure Machine Learning e selecione sua assinatura e espaço de trabalho.

  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 computação.

  4. Configure o tamanho e a configuração da VM de que precisa e, em seguida, selecione Seguinte.

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

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

Gorjeta

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 cluster 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 com IP público

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

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

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

      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 de 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 da rede, consulte Como os grupos de segurança de rede filtram o tráfego de rede.

    • Um balanceador de carga

    Para clusters de computação, esses recursos são excluídos sempre que o cluster é reduzido para 0 nós e criados durante a expansão.

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

    Importante

    Estes recursos estão limitados pelas quotas de recursos da subscrição. Se o grupo de recursos de rede virtual estiver bloqueado, a exclusão do cluster/instância de computação falhará. O balanceador de carga não pode ser excluído até que o cluster/instância de computação seja excluído. Certifique-se também de que não há nenhuma atribuição de Política do Azure que proíba a criação de grupos de segurança de rede.

  • Na sua rede virtual, permita o tráfego TCP de entrada na porta 44224 a AzureMachineLearning partir da etiqueta de serviço.

    Importante

    A instância/cluster de computação recebe dinamicamente um endereço IP quando é criada. 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, não é possível atribuí-lo estaticamente no firewall. Em vez disso, se você estiver usando um firewall com a VNet, deverá criar uma rota definida pelo usuário para permitir esse tráfego de entrada.

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

    Etiqueta de serviço Protocolo Porta Notas
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Comunicação com o serviço Azure Machine Learning.
    BatchNodeManagement.<region> QUALQUER 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Comunicação com o Azure Batch. A instância de computação e o cluster de computação são implementados utilizando o serviço Azure Batch.
    Storage.<region> TCP 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Esta etiqueta de serviço é utilizada para comunicar com a conta de Armazenamento do Azure utilizada pelo Azure Batch.

    Importante

    O acesso de saída a Storage.<region> pode ser usado para exfiltrar dados do seu espaço de trabalho. Com uma Política de Ponto Final de Serviço, pode mitigar esta vulnerabilidade. Para obter mais informações, veja o artigo Prevenção contra exfiltração de dados do Azure Machine Learning.

    FQDN Protocolo Porta Notas
    <region>.tundra.azureml.ms UDP 5831 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning.
    graph.windows.net TCP 443 Comunicação com a Microsoft Graph API.
    *.instances.azureml.ms TCP 443/8787/18881 Comunicação com o Azure Machine Learning.
    *.<region>.batch.azure.com QUALQUER 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Comunicação com o Azure Batch.
    *.<region>.service.batch.azure.com QUALQUER 443 Substitua <region> pela região do Azure que contém a sua área de trabalho do Azure Machine Learning. Comunicação com o Azure Batch.
    *.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: Python SDK 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)

Quando o processo de criação termina, você treina seu 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 espaço de trabalho do Azure Machine Learning.
  • Se a(s) Conta(s) de Armazenamento do Azure para o espaço de trabalho 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-private e databricks-public usadas pelo 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 como usar o Azure Databricks com uma rede virtual, consulte Implantar o Azure Databricks em sua Rede Virtual do Azure.

Acesso público à Internet obrigatório para os modelos de comboio

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 requer acesso de entrada e saída à Internet pública. As tabelas a seguir fornecem uma visão geral do acesso necessário e para que finalidade. Para tags de serviço que terminam em .region, substitua region pela região do Azure que contém seu espaço de trabalho. Por exemplo: Storage.westus

Gorjeta

A guia obrigatório lista a configuração de entrada e saída necessária. A guia situacional lista as configurações opcionais de entrada e saída exigidas por configurações específicas que você pode querer habilitar.

Direção Protocolo &
ports
Etiqueta de serviço Propósito
De Saída Porta TCP: 80, 443 AzureActiveDirectory Autenticação com o Microsoft Entra ID.
De Saída TCP: 443, 18881
UDP: 5831
AzureMachineLearning Utilizar os serviços do Azure Machine Learning.
Python intellisense em notebooks usa a porta 18881.
Criar, atualizar e excluir uma instância de computação do Azure Machine Learning usa a porta 5831.
De Saída QUALQUER: 443 BatchNodeManagement.region Comunicação com o back-end do Azure Batch para instâncias/clusters de computação do Azure Machine Learning.
De Saída Porta 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.
De Saída Porta TCP: 443 Storage.region Aceda aos dados armazenados na Conta de Armazenamento do Azure para o cluster de cálculo e a instância de computação. Para obter informações sobre como evitar a exfiltração de dados nessa saída, consulte Proteção contra exfiltração de dados.
De Saída Porta TCP: 443 AzureFrontDoor.FrontEnd
* Não é necessário no Microsoft Azure operado pela 21Vianet.
Ponto de entrada global para estúdio do Azure Machine Learning. Armazene imagens e ambientes para AutoML. Para obter informações sobre como evitar a exfiltração de dados nessa saída, consulte Proteção contra exfiltração de dados.
De Saída Porta TCP: 443 MicrosoftContainerRegistry.region
Observe que essa tag tem uma dependência da AzureFrontDoor.FirstParty tag
Aceder a imagens do Docker fornecidas pela Microsoft. Configuração do roteador do Azure Machine Learning para o Serviço Kubernetes do Azure.

Gorjeta

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

Os endereços IP podem mudar periodicamente.

Também pode ser necessário permitir o tráfego de saída para o Visual Studio Code e sites que não sejam da Microsoft para a instalação de pacotes exigidos pelo seu projeto de aprendizado de máquina. A tabela a seguir lista os repositórios comumente usados para aprendizado de máquina:

Nome do anfitrião Objetivo
anaconda.com
*.anaconda.com
Usado para instalar pacotes padrão.
*.anaconda.org Usado para obter dados de recompra.
pypi.org Usado para listar dependências do índice padrão, se houver, e o índice não é substituído pelas configurações do usuário. Se o índice for substituído, você também deverá permitir *.pythonhosted.org.
cloud.r-project.org Usado na instalação de pacotes CRAN para desenvolvimento R.
*.pytorch.org Usado por alguns exemplos baseados em PyTorch.
*.tensorflow.org Usado por alguns exemplos baseados no Tensorflow.
code.visualstudio.com Necessário para baixar e instalar o Visual Studio Code desktop. Isso não é necessário para o Visual Studio Code Web.
update.code.visualstudio.com
*.vo.msecnd.net
Usado para recuperar bits de servidor do Visual Studio Code 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 com instâncias de computação fornecidas pela extensão Azure ML para Visual Studio Code. Para obter mais informações, veja Ligar 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 de servidor websocket, que são instalados na instância de computação. O servidor websocket é utilizado para transmitir pedidos do cliente do Visual Studio Code (aplicação de ambiente de trabalho) para o servidor do Visual Studio Code em execução na instância de computação.

Nota

Ao usar a extensão do VS Code para o Azure Machine Learning, a instância de computação remota exigirá um 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 aceder a estes repositórios públicos ou a Internet, é necessário definir e exportar as variáveis de ambiente HTTP_PROXY e HTTPS_PROXY no ficheiro ~/.bashrc na instância de computação. Este processo pode ser automatizado no momento do aprovisionamento ao utilizar um script personalizado.

Ao usar o Serviço Kubernetes do Azure (AKS) 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, consulte Usar um firewall com o Azure Machine Learning.

Próximos passos

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