Proteger um ambiente de inferência do Azure Machine Learning com redes virtuais (v1)
APLICA-SE A: Python SDK azureml v1
APLICA-SE A: Azure CLI ml extension v1
Neste artigo, você aprenderá a 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 de implantação de um modelo como um serviço Web.
Gorjeta
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:
- Descrição geral da rede virtual
- Proteger os recursos do espaço de trabalho
- Proteger o ambiente de formação
- Ativar funcionalidade de estúdio
- Utilizar o DNS personalizado
- Usar um firewall
Para obter um tutorial sobre como criar um espaço de trabalho seguro, consulte Tutorial: Criar um espaço de trabalho seguro, modelo Bicep ou modelo Terraform.
Neste artigo, você aprenderá a proteger os seguintes recursos de inferência em uma rede virtual:
- Cluster padrão do Serviço Kubernetes do Azure (AKS)
- Cluster AKS privado
- Cluster AKS com link privado
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.
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
Importante
Alguns dos comandos da CLI do Azure neste artigo usam a extensão , ou v1, para o azure-cli-ml
Azure Machine Learning. O suporte para a 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 ml
extensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, consulte Extensão CLI do Azure ML e Python SDK v2.
Limitações
Azure Container Instances
Quando a área de trabalho do Azure Machine Learning é configurada com um ponto final privado, a implementação no Azure Container Instances numa VNet não é suportada. Em vez disso, considere utilizar um Ponto final gerido online com isolamento da rede.
Azure Kubernetes Service
- Se o cluster 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) devem ter pontos de extremidade privados ou pontos de extremidade de serviço na mesma VNET que a VNET do cluster 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 seu espaço de trabalho tiver um ponto de extremidade privado, o cluster do Serviço Kubernetes do Azure deverá estar na mesma região do Azure que o espaço de trabalho.
- A utilização de um nome de domínio completamente qualificado (FQDN) com um cluster do AKS privadonão é suportada com o Azure Machine Learning.
Azure Kubernetes Service
Importante
Para usar um cluster AKS em uma rede virtual, primeiro siga os pré-requisitos em Configurar rede avançada no Serviço Kubernetes do Azure (AKS).
Para adicionar o AKS em uma rede virtual ao seu espaço de trabalho, use as seguintes etapas:
Entre no estúdio do Azure Machine Learning e selecione sua assinatura e espaço de trabalho.
Selecione Computação à esquerda, Clusters de inferência no centro e, em seguida, selecione + Novo. Finalmente, selecione AksCompute.
Na caixa de diálogo Criar AksCompute, selecione Criar novo, o Local e o tamanho da VM a ser usado para o cluster. Por fim, selecione Avançar.
Na seção Configurar Configurações, insira um Nome de computação, selecione Finalidade do cluster, Número de nós e 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.
Gorjeta
Se o espaço de trabalho usar um ponto de extremidade privado para se conectar à rede virtual, o campo Seleção de rede virtual ficará acinzentado.
Defina a Sub-rede para criar o cluster.
No campo Intervalo de endereços do Serviço Kubernetes, insira o intervalo de endereços do Serviço Kubernetes. Esse intervalo de endereços usa um intervalo IP de notação CIDR (Roteamento entre Domínios sem Classe) 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).
No campo Endereço IP do serviço DNS do Kubernetes, insira o endereço IP do serviço DNS do Kubernetes. Este endereço IP é atribuído ao serviço DNS do Kubernetes. Ele deve estar dentro do intervalo de endereços de serviço do Kubernetes (por exemplo, 10.0.0.10).
No campo Endereço da ponte do Docker, insira o endereço da ponte do Docker. Este endereço IP é atribuído ao Docker Bridge. Ele não deve estar em nenhum intervalo de IP de sub-rede ou no intervalo de endereços de serviço do Kubernetes (por exemplo, 172.18.0.1/16).
Quando você implanta um modelo como um serviço Web no AKS, um ponto de extremidade de pontuação é criado para lidar com solicitações de 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 você 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 do serviço implantado. Para obter informações 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.
Importante
O endereço IP mostrado na imagem para o ponto de extremidade de pontuação será diferente para suas implantações. Enquanto o mesmo IP é compartilhado por todas as implantações em um cluster AKS, cada cluster AKS terá um endereço IP diferente.
Você também pode usar o SDK do Azure Machine Learning para adicionar o Serviço Kubernetes do Azure em uma rede virtual. Se você já tiver um cluster AKS em uma rede virtual, anexe-o ao espaço de trabalho conforme descrito em Como implantar no AKS. O código a seguir cria uma nova instância AKS na default
sub-rede de uma rede virtual chamada mynetwork
:
APLICA-SE A: Python SDK 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 estiver concluído, você poderá executar a inferência ou a pontuação do modelo em um cluster AKS atrás de uma rede virtual. Para obter mais informações, consulte Como implantar no AKS.
Para obter mais informações sobre como usar o Controle de Acesso Baseado em Função com o Kubernetes, consulte Usar o RBAC do Azure para autorização do Kubernetes.
Função de contribuidor de rede
Importante
Se você criar ou anexar um cluster AKS fornecendo uma rede virtual criada anteriormente, deverá conceder à entidade de serviço (SP) ou identidade gerenciada para seu cluster AKS a função de Colaborador de Rede ao grupo de recursos que contém a rede virtual.
Para adicionar a identidade como colaborador de rede, use as seguintes etapas:
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 contém o cluster AKS:az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
Se esse comando retornar um valor de , use o seguinte comando para identificar a ID principal da
msi
identidade gerenciada:az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
Para localizar a ID do grupo de recursos que contém sua rede virtual, use o seguinte comando. Substitua
<resource-group-name>
pelo nome do grupo de recursos que contém a rede virtual:az group show -n <resource-group-name> --query id
Para adicionar a entidade de serviço ou a identidade gerenciada como um colaborador de rede, use o seguinte comando. Substitua
<SP-or-managed-identity>
pelo ID retornado para a entidade de serviço ou identidade gerenciada. Substitua<resource-group-id>
pela ID retornada 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 Kubernetes do Azure.
Tráfego VNet seguro
Há duas abordagens para isolar o tráfego de e para o cluster AKS para a rede virtual:
- Cluster AKS privado: esta abordagem utiliza o Azure Private Link para proteger as comunicações com o cluster para operações de implementação/gestão.
- Balanceador de carga AKS interno: esta abordagem configura o ponto de extremidade para suas implantações no AKS para usar um IP privado dentro da rede virtual.
Cluster AKS privado
Por padrão, os clusters AKS têm um plano de controle, ou servidor API, com endereços IP públicos. Você pode configurar o AKS para usar um plano de controle privado criando um cluster AKS privado. Para obter mais informações, veja Criar um cluster do Azure Kubernetes Service privado.
Depois de criar o cluster AKS privado, anexe o cluster à rede virtual para usar com o Azure Machine Learning.
Balanceador de carga AKS interno
Por padrão, as implantações do AKS usam um balanceador de carga público. Nesta seção, você aprenderá a configurar o AKS para usar um balanceador de carga interno. Um balanceador de carga interno (ou privado) é usado onde apenas IPs privados são permitidos como frontend. Os balanceadores de carga internos são usados para balancear a carga do tráfego dentro de uma rede virtual
Um balanceador de carga privado é habilitado configurando o AKS para usar um balanceador de carga interno.
Ativar balanceador de carga privado
Importante
Não é possível habilitar o IP privado ao criar o cluster do Serviço 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 da CLI do Azure para aprendizado de máquina.
Os exemplos a seguir demonstram como criar um novo cluster AKS com um IP privado/balanceador de carga interno usando o SDK e a CLI:
APLICA-SE A: Python SDK azureml v1
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 espaço de trabalho, use os load_balancer_type
parâmetros e load_balancer_subnet
de AksCompute.attach_configuration() para configurar o balanceador de carga.
Para obter mais informações sobre a anexação de um cluster, veja Anexar um cluster do AKS existente.
Limitar a conectividade de saída na máquina 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, deverá permitir o acesso ao Registro de Contêiner do Azure. Por exemplo, certifique-se de que seus Grupos de Segurança de Rede (NSG) contenham uma regra que permita o acesso à marca de serviço AzureContainerRegistry.RegionName onde '{RegionName} é o nome de uma região do Azure.
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: