Compartilhar via


Proteger um ambiente de inferência do Azure Machine Learning com redes virtuais (v1)

APLICA-SE A: SDK azureml para Pythonv1

APLICA-SE A: Extensão ml da CLI do Azure v1

Neste artigo, você saberá como proteger ambientes de inferência com uma rede virtual no Azure Machine Learning. Este artigo é específico para o fluxo de trabalho de implantação do SDK/CLI v1 da implantação de um modelo como um serviço Web.

Dica

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:

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

Neste artigo, você saberá como proteger os seguintes recursos de inferência em uma rede virtual:

  • Um cluster padrão do AKS (Serviço de Kubernetes do Azure)
  • Cluster do AKS particular
  • Cluster do AKS com link particular

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.

  • 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

Importante

Alguns comandos da CLI do Azure neste artigo usam a extensão azure-cli-ml ou v1 do Azure Machine Learning. O suporte à extensão v1 terminará em 30 de setembro de 2025. Você poderá instalar e usar a extensão v1 até essa data.

Recomendamos que você faça a transição para a extensão ml ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, confira Extensão da CLI do Azure ML e SDK do Python v2.

Limitações

Instâncias de Contêiner do Azure

Quando seu espaço de trabalho do Azure Machine Learning é configurado com um ponto de extremidade privado, não há suporte para a implantação em Instâncias de Contêiner do Azure em uma VNet. Em vez disso, considere usar um ponto de extremidade online gerenciado com isolamento de rede.

Serviço de Kubernetes do Azure

  • Se o cluster do AKS estiver atrás de uma VNET, seu espaço de trabalho e seus recursos associados (armazenamento, cofre de chaves, Registro de Contêiner do Azure) deverão ter pontos de extremidade privados ou pontos de extremidade de serviço na mesma VNET que a VNET do cluster do AKS. Leia o tutorial Criar um espaço de trabalho seguro para adicionar esses pontos de extremidade privados ou pontos de extremidade de serviço à sua VNET.
  • Se o seu espaço de trabalho tiver um ponto de extremidade privado, o cluster do Serviço de Kubernetes do Azure deverá estar na mesma região do Azure que o espaço de trabalho.
  • O uso de um FQDN (nome de domínio totalmente qualificado) público com um cluster AKS privadonão é compatível com o Azure Machine Learning.

Serviço de Kubernetes do Azure

Importante

Para usar um cluster AKS em uma rede virtual, primeiro siga os pré-requisitos descritos em Configurar a rede avançada no AKS (Serviço de Kubernetes do Azure).

Para adicionar o AKS em uma rede virtual no seu workspace, siga as seguintes etapas:

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

  2. Selecione Computação à esquerda, Clusters de inferência no centro e, em seguida, selecione + Novo. Por fim, selecione AksCompute.

    Captura de tela da caixa de diálogo criar cluster de inferência.

  3. Na caixa de diálogo Criar AksCompute, selecione Criar novo o Local e o tamanho da VM a ser usada para o cluster. Por fim, selecione Próximo.

    Captura de tela das configurações da VM.

  4. Na seção Definir configurações, insira um Nome de computação, selecione a Finalidade do cluster, o Número de nóse, em seguida, selecione Avançado para exibir as configurações de rede. Na área Configurar rede virtual, defina os seguintes valores:

    • Defina a rede virtual a ser usada.

      Dica

      Se o espaço de trabalho usa um ponto de extremidade privado para se conectar à rede virtual, o campo de seleção de Rede virtual fica cinza.

    • Defina a Sub-rede na qual criar o cluster.

    • Na caixa Intervalo de endereços do serviço de Kubernetes, insira o intervalo de endereços do serviço de Kubernetes. Esse intervalo de endereços usa um intervalo de IP de notação de Roteamento entre Domínios sem Classificação (CIDR) para definir os endereços IP disponíveis para o cluster. Ele não deve se sobrepor a nenhum intervalo de IP de sub-rede (por exemplo, 10.0.0.0/16).

    • Na caixa Endereço IP do serviço DNS do Kubernetes, insira o endereço IP do serviço DNS do Kubernetes. Esse endereço IP é atribuído ao serviço DNS do Kubernetes. Ele deve estar dentro do intervalo de endereços do serviço Kubernetes (por exemplo, 10.0.0.10).

    • Na caixa Endereço de ponte Docker, insira o endereço da ponte Docker. Esse endereço IP é atribuído à ponte Docker. Ele não deve estar em nenhum intervalo de IP de sub-rede nem no intervalo de endereços do serviço de Kubernetes (por exemplo, 172.18.0.1/16).

    Captura de tela da definição de configurações de rede.

  5. Ao implantar um modelo como um serviço Web no AKS, um ponto de extremidade de pontuação é criado para lidar com solicitações inferência. Verifique se o NSG (grupo de segurança de rede) que controla a rede virtual tem uma regra de segurança de entrada habilitada para o endereço IP do ponto de extremidade de pontuação se quiser chamá-lo de fora da rede virtual.

    Para localizar o endereço IP do ponto de extremidade de pontuação, examine o URI de pontuação para o serviço implantado. Para saber mais sobre como exibir o URI de pontuação, consulte Consumir um modelo implantado como um serviço Web.

    Importante

    Mantenha as regras de saída padrão para o NSG. Para obter mais informações, consulte as regras de segurança padrão em Grupos de segurança.

    Captura de tela que mostra uma regra de segurança de entrada.

    Importante

    O endereço IP mostrado na imagem para o ponto de extremidade de pontuação será diferente para suas implantações. Embora o mesmo IP seja compartilhado por todas as implantações em um cluster do AKS, cada cluster do AKS terá um endereço IP diferente.

Também é possível usar o SDK do Azure Machine Learning para adicionar o Serviço de Kubernetes do Azure a uma rede virtual. Se você já tem um cluster do AKS em uma rede virtual, anexe-o ao workspace conforme descrito em Como implantar no AKS. O código a seguir cria uma nova instância de AKS na defaultsub-rede de uma rede virtual nomeadamynetwork:

APLICA-SE A: SDK do Python do AzureML v1

from azureml.core.compute import ComputeTarget, AksCompute

# Create the compute configuration and set virtual network information
config = AksCompute.provisioning_configuration(location="eastus2")
config.vnet_resourcegroup_name = "mygroup"
config.vnet_name = "mynetwork"
config.subnet_name = "default"
config.service_cidr = "10.0.0.0/16"
config.dns_service_ip = "10.0.0.10"
config.docker_bridge_cidr = "172.17.0.1/16"

# Create the compute target
aks_target = ComputeTarget.create(workspace=ws,
                                  name="myaks",
                                  provisioning_configuration=config)

Quando o processo de criação for concluído, você pode executar inferência ou pontuação de modelo em um cluster de AKS atrás de uma rede virtual. Para obter mais informações, consulte Como implantar no AKS.

Para saber mais sobre como usar o controle de acesso baseado em função com Kubernetes, confira Usar o RBAC do Azure para autorização do Kubernetes.

Função de colaborador de rede

Importante

Se criar ou anexar um cluster do AKS fornecendo uma rede virtual criada anteriormente você deverá conceder a SP (entidade de serviço) ou a identidade gerenciada para seu cluster do AKS a função de Colaborador de Rede para o grupo de recursos que contém a rede virtual.

Para adicionar a identidade como colaborador de rede, use as seguintes etapas:

  1. Para localizar a entidade de serviço ou a ID de identidade gerenciada para o AKS, use os seguintes comandos da CLI do Azure. Substitua <aks-cluster-name> pelo nome do cluster. Substitua <resource-group-name> pelo nome do grupo de recursos que <resource-group-name>:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
    

    Se esse comando retornar um valor de msi, use o seguinte comando para identificar a ID da entidade de segurança para a identidade gerenciada:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Para localizar a ID do grupo de recursos que contém sua rede virtual, use o comando a seguir. Substitua <resource-group-name> pelo nome do grupo de recursos que <resource-group-name>:

    az group show -n <resource-group-name> --query id
    
  3. Para adicionar a entidade de serviço ou a identidade gerenciada como um colaborador de rede, use o comando a seguir. Substituir <SP-or-managed-identity> pela ID retornada para a entidade de serviço ou identidade gerenciada. Substitua <resource-group-id> pelo ID devolvida para o grupo de recursos que contém a rede virtual:

    az role assignment create --assignee <SP-or-managed-identity> --role 'Network Contributor' --scope <resource-group-id>
    

Para obter mais informações sobre como usar o balanceador de carga interno com o AKS, consulte Usar o balanceador de carga interno com o Serviço de Kubernetes do Azure.

Tráfego seguro de VNet

Há duas abordagens para isolar o tráfego entre o cluster do AKS e a rede virtual:

  • Cluster do AKS privado: essa abordagem usa o Link Privado do Azure para proteger as comunicações com o cluster para operações de implantação/gerenciamento.
  • Balanceador de carga do AKS interno: essa abordagem configura o ponto de extremidade para suas implantações no AKS usarem um IP privado dentro da rede virtual.

Cluster do AKS particular

Por padrão, os clusters do AKS têm um plano de controle, ou servidor da API, com endereços IP públicos. Você pode configurar o AKS para usar um plano de controle particular criando um cluster do AKS particular. Para obter mais informações, consulte Criar um cluster particular do Serviço de Kubernetes do Azure.

Depois de criar o cluster do AKS particular, anexe o cluster à rede virtual para usar com o Azure Machine Learning.

Balanceador de carga do AKS interno

Por padrão, as implantações do AKS usam um balanceador de carga público. Nesta seção, você saberá configurar o AKS para usar um balanceador de carga interno. Um balanceador de carga interno (ou privado) é usado apenas quando os IPs privados são permitidos no front-end. Os balanceadores de carga internos são usados para balancear a carga do tráfego dentro de uma rede virtual

Um balancear carga particular é habilitado configurando o AKS para usar um balanceador de carga interno.

Habilitar o balanceador de carga particular

Importante

Você não pode habilitar o IP privado ao criar o cluster do Serviço de Kubernetes do Azure no estúdio do Azure Machine Learning. Você pode criar um com um balanceador de carga interno ao usar o SDK do Python ou a extensão CLI do Azure para o aprendizado de máquina.

Os exemplos a seguir demonstram como criar um novo cluster de AKS com um balanceador de carga interno/IP privado usando o SDK e a CLI:

APLICA-SE A: SDK azureml para Pythonv1

import azureml.core
from azureml.core.compute import AksCompute, ComputeTarget

# Verify that cluster does not exist already
try:
    aks_target = AksCompute(workspace=ws, name=aks_cluster_name)
    print("Found existing aks cluster")

except:
    print("Creating new aks cluster")

    # Subnet to use for AKS
    subnet_name = "default"
    # Create AKS configuration
    prov_config=AksCompute.provisioning_configuration(load_balancer_type="InternalLoadBalancer")
    # Set info for existing virtual network to create the cluster in
    prov_config.vnet_resourcegroup_name = "myvnetresourcegroup"
    prov_config.vnet_name = "myvnetname"
    prov_config.service_cidr = "10.0.0.0/16"
    prov_config.dns_service_ip = "10.0.0.10"
    prov_config.subnet_name = subnet_name
    prov_config.load_balancer_subnet = subnet_name
    prov_config.docker_bridge_cidr = "172.17.0.1/16"

    # Create compute target
    aks_target = ComputeTarget.create(workspace = ws, name = "myaks", provisioning_configuration = prov_config)
    # Wait for the operation to complete
    aks_target.wait_for_completion(show_output = True)

Ao anexar um cluster existente ao seu workspace, use os parâmetros load_balancer_type e load_balancer_subnet de AksCompute.attach_configuration() para configurar o balanceador de carga.

Para obter informações sobre como anexar um cluster, consulte anexar um cluster do AKS existente.

Limitar a conectividade de saída da rede virtual

Se você não quiser usar as regras de saída padrão e quiser limitar o acesso de saída de sua rede virtual, você deve permitir o acesso ao Registro de Contêiner do Azure. Por exemplo, verifique se os NSG (grupos de segurança de rede) contêm uma regra que permite o acesso à marca de serviço AzureContainerRegistry.RegionName, na qual a {RegionName} é o nome de uma região do Azure.

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: