Skydda en Azure Machine Learning-slutsatsdragningsmiljö med virtuella nätverk (v1)

GÄLLER FÖR:Python SDK azureml v1

GÄLLER FÖR:Azure CLI ml-tillägget v1

I den här artikeln får du lära dig hur du skyddar slutsatsdragningsmiljöer med ett virtuellt nätverk i Azure Machine Learning. Den här artikeln är specifik för SDK/CLI v1-distributionsarbetsflödet för distribution av en modell som en webbtjänst.

Dricks

Den här artikeln är en del av en serie om att skydda ett Azure Machine Learning-arbetsflöde. Se de andra artiklarna i den här serien:

En självstudiekurs om hur du skapar en säker arbetsyta finns i Självstudie: Skapa en säker arbetsyta eller Självstudie: Skapa en säker arbetsyta med hjälp av en mall.

I den här artikeln får du lära dig hur du skyddar följande slutsatsdragningsresurser i ett virtuellt nätverk:

  • AkS-standardkluster (Azure Kubernetes Service)
  • Privat AKS-kluster
  • AKS-kluster med privat länk

Förutsättningar

  • Läs artikeln Översikt över nätverkssäkerhet för att förstå vanliga scenarier för virtuella nätverk och övergripande arkitektur för virtuella nätverk.

  • Ett befintligt virtuellt nätverk och undernät som ska användas med dina beräkningsresurser.

  • Om du vill distribuera resurser till ett virtuellt nätverk eller undernät måste ditt användarkonto ha behörighet till följande åtgärder i rollbaserad åtkomstkontroll i Azure (Azure RBAC):

    • "Microsoft.Network/*/read" på den virtuella nätverksresursen. Den här behörigheten behövs inte för distributioner av Azure Resource Manager-mallar (ARM).
    • "Microsoft.Network/virtualNetworks/join/action" på den virtuella nätverksresursen.
    • "Microsoft.Network/virtualNetworks/subnets/join/action" på undernätsresursen.

    Mer information om Azure RBAC med nätverk finns i inbyggda nätverksroller

Viktigt!

Några av Azure CLI-kommandona i den här artikeln använder azure-cli-mltillägget , eller v1, för Azure Machine Learning. Stödet för v1-tillägget upphör den 30 september 2025. Du kommer att kunna installera och använda v1-tillägget fram till det datumet.

Vi rekommenderar att du övergår till mltillägget , eller v2, före den 30 september 2025. Mer information om v2-tillägget finns i Azure ML CLI-tillägget och Python SDK v2.

Begränsningar

Azure Container Instances

När din Azure Machine Learning-arbetsyta har konfigurerats med en privat slutpunkt stöds inte distribution till Azure Container Instances i ett virtuellt nätverk. Överväg i stället att använda en Hanterad onlineslutpunkt med nätverksisolering.

Azure Kubernetes Service

  • Om DITT AKS-kluster ligger bakom ett VNET måste din arbetsyta och dess associerade resurser (lagring, nyckelvalv, Azure Container Registry) ha privata slutpunkter eller tjänstslutpunkter i samma VNET som AKS-klustrets virtuella nätverk. Läs självstudien skapa en säker arbetsyta för att lägga till de privata slutpunkterna eller tjänstslutpunkterna i ditt virtuella nätverk.
  • Om din arbetsyta har en privat slutpunkt måste Azure Kubernetes Service-klustret finnas i samma Azure-region som arbetsytan.
  • Användning av ett offentligt fullständigt domännamn (FQDN) med ett privat AKS-klusterstöds inte med Azure Machine Learning.

Azure Kubernetes Service

Viktigt!

Om du vill använda ett AKS-kluster i ett virtuellt nätverk följer du först kraven i Konfigurera avancerade nätverk i Azure Kubernetes Service (AKS).

Om du vill lägga till AKS i ett virtuellt nätverk på din arbetsyta använder du följande steg:

  1. Logga in på Azure Machine Learning-studio och välj sedan din prenumeration och arbetsyta.

  2. Välj Beräkning till vänster, Slutsatsdragningskluster från mitten och välj sedan + Ny. Välj slutligen AksCompute.

    Screenshot of create inference cluster dialog.

  3. I dialogrutan Skapa AksCompute väljer du Skapa ny, plats och vm-storlek som ska användas för klustret. Välj slutligen Nästa.

    Screenshot of VM settings.

  4. I avsnittet Konfigurera Inställningar anger du ett Beräkningsnamn, väljer Klustersyfte, Antal noder och väljer sedan Avancerat för att visa nätverksinställningarna. I området Konfigurera virtuellt nätverk anger du följande värden:

    • Ange det virtuella nätverket som ska användas.

      Dricks

      Om din arbetsyta använder en privat slutpunkt för att ansluta till det virtuella nätverket är fältet Val av virtuellt nätverk nedtonat.

    • Ange undernätet för att skapa klustret i.

    • I fältet Kubernetes Service-adressintervall anger du kubernetes-tjänstens adressintervall. Det här adressintervallet använder ett IP-intervall för klasslös routning mellan domäner (CIDR) för att definiera de IP-adresser som är tillgängliga för klustret. Det får inte överlappa med några IP-intervall för undernätet (till exempel 10.0.0.0/16).

    • I fältet Ip-adress för Kubernetes DNS-tjänsten anger du IP-adressen för Kubernetes DNS-tjänsten. Den här IP-adressen tilldelas kubernetes DNS-tjänsten. Den måste ligga inom Kubernetes-tjänstens adressintervall (till exempel 10.0.0.10).

    • I fältet Docker-bryggadress anger du Docker-bryggadressen. Den här IP-adressen har tilldelats Docker Bridge. Den får inte finnas i några IP-intervall för undernätet eller i Kubernetes-tjänstens adressintervall (till exempel 172.18.0.1/16).

    Screenshot of configure network settings.

  5. När du distribuerar en modell som en webbtjänst till AKS skapas en poängslutpunkt för att hantera inferensbegäranden. Kontrollera att nätverkssäkerhetsgruppen (NSG) som styr det virtuella nätverket har en regel för inkommande säkerhet aktiverad för IP-adressen för poängslutpunkten om du vill anropa den utanför det virtuella nätverket.

    Om du vill hitta IP-adressen för poängslutpunkten tittar du på bedömnings-URI:n för den distribuerade tjänsten. Information om hur du visar bedömnings-URI finns i Använda en modell som distribuerats som en webbtjänst.

    Viktigt!

    Behåll standardreglerna för utgående trafik för nätverkssäkerhetsgruppen. Mer information finns i standardsäkerhetsreglerna i Säkerhetsgrupper.

    Screenshot that shows an inbound security rule.

    Viktigt!

    IP-adressen som visas i avbildningen för bedömningsslutpunkten skiljer sig åt för dina distributioner. Samma IP-adress delas av alla distributioner till ett AKS-kluster, men varje AKS-kluster har en annan IP-adress.

Du kan också använda Azure Machine Learning SDK för att lägga till Azure Kubernetes Service i ett virtuellt nätverk. Om du redan har ett AKS-kluster i ett virtuellt nätverk ansluter du det till arbetsytan enligt beskrivningen i Så här distribuerar du till AKS. Följande kod skapar en ny AKS-instans i undernätet för default ett virtuellt nätverk med namnet mynetwork:

GÄLLER FÖR: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)

När skapandeprocessen är klar kan du köra slutsatsdragning, eller modellbedömning, på ett AKS-kluster bakom ett virtuellt nätverk. Mer information finns i Distribuera till AKS.

Mer information om hur du använder rollbaserad åtkomstkontroll med Kubernetes finns i Använda Azure RBAC för Kubernetes-auktorisering.

Rollen nätverksdeltagare

Viktigt!

Om du skapar eller kopplar ett AKS-kluster genom att tillhandahålla ett virtuellt nätverk som du skapade tidigare måste du ge tjänstens huvudnamn (SP) eller den hanterade identiteten för AKS-klustret rollen Nätverksdeltagare till resursgruppen som innehåller det virtuella nätverket.

Om du vill lägga till identiteten som nätverksdeltagare använder du följande steg:

  1. Om du vill hitta tjänstens huvudnamn eller hanterade identitets-ID för AKS använder du följande Azure CLI-kommandon. Ersätt <aks-cluster-name> med namnet på klustret. Ersätt <resource-group-name> med namnet på resursgruppen som innehåller AKS-klustret:

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

    Om det här kommandot returnerar värdet msianvänder du följande kommando för att identifiera huvud-ID:t för den hanterade identiteten:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Använd följande kommando för att hitta ID:t för resursgruppen som innehåller ditt virtuella nätverk. Ersätt <resource-group-name> med namnet på resursgruppen som innehåller det virtuella nätverket:

    az group show -n <resource-group-name> --query id
    
  3. Om du vill lägga till tjänstens huvudnamn eller hanterade identitet som nätverksdeltagare använder du följande kommando. Ersätt <SP-or-managed-identity> med det ID som returneras för tjänstens huvudnamn eller hanterade identitet. Ersätt <resource-group-id> med det ID som returneras för resursgruppen som innehåller det virtuella nätverket:

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

Mer information om hur du använder den interna lastbalanseraren med AKS finns i Använda intern lastbalanserare med Azure Kubernetes Service.

Säker VNet-trafik

Det finns två metoder för att isolera trafik till och från AKS-klustret till det virtuella nätverket:

  • Privat AKS-kluster: Den här metoden använder Azure Private Link för att skydda kommunikationen med klustret för distributions-/hanteringsåtgärder.
  • Intern AKS-lastbalanserare: Den här metoden konfigurerar slutpunkten för dina distributioner till AKS för att använda en privat IP-adress i det virtuella nätverket.

Privat AKS-kluster

AKS-kluster har som standard ett kontrollplan eller EN API-server med offentliga IP-adresser. Du kan konfigurera AKS att använda ett privat kontrollplan genom att skapa ett privat AKS-kluster. Mer information finns i Skapa ett privat Azure Kubernetes Service-kluster.

När du har skapat det privata AKS-klustret ansluter du klustret till det virtuella nätverk som ska användas med Azure Machine Learning.

Intern AKS-lastbalanserare

Som standard använder AKS-distributioner en offentlig lastbalanserare. I det här avsnittet får du lära dig hur du konfigurerar AKS för att använda en intern lastbalanserare. En intern (eller privat) lastbalanserare används där endast privata IP-adresser tillåts som klientdel. Interna lastbalanserare används för att belastningsutjämningstrafik i ett virtuellt nätverk

En privat lastbalanserare aktiveras genom att konfigurera AKS för att använda en intern lastbalanserare.

Aktivera privat lastbalanserare

Viktigt!

Du kan inte aktivera privat IP när du skapar Azure Kubernetes Service-klustret i Azure Machine Learning-studio. Du kan skapa en med en intern lastbalanserare när du använder Python SDK- eller Azure CLI-tillägget för maskininlärning.

Följande exempel visar hur du skapar ett nytt AKS-kluster med en privat IP/intern lastbalanserare med hjälp av SDK och CLI:

GÄLLER FÖR: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)

När du kopplar ett befintligt kluster till din arbetsyta använder du parametrarna load_balancer_type och load_balancer_subnet för AksCompute.attach_configuration() för att konfigurera lastbalanseraren.

Information om hur du kopplar ett kluster finns i Koppla ett befintligt AKS-kluster.

Begränsa utgående anslutningar från det virtuella nätverket

Om du inte vill använda standardreglerna för utgående trafik och vill begränsa utgående åtkomst för ditt virtuella nätverk måste du tillåta åtkomst till Azure Container Registry. Kontrollera till exempel att nätverkssäkerhetsgrupperna (NSG) innehåller en regel som ger åtkomst till tjänsttaggen AzureContainerRegistry.RegionName där {RegionName} är namnet på en Azure-region.

Nästa steg

Den här artikeln är en del av en serie om att skydda ett Azure Machine Learning-arbetsflöde. Se de andra artiklarna i den här serien: