Een Azure Machine Learning deductieomgeving beveiligen met virtuele netwerken

In dit artikel leert u hoe u deductieomgevingen kunt beveiligen met een virtueel netwerk in Azure Machine Learning.

In dit artikel leert u hoe u de volgende deductiebronnen in een virtueel netwerk beveiligt:

  • AKS-cluster (Default Azure Kubernetes Service)
  • Privé-AKS-cluster
  • AKS-cluster met privékoppeling
  • Azure Container Instances (ACI)

Vereisten

  • Lees het overzichtsartikel over netwerkbeveiliging voor meer informatie over algemene scenario's voor virtuele netwerken en de algemene architectuur van het virtuele netwerk.

  • Een bestaand virtueel netwerk en subnet dat u met uw rekenresources kunt gebruiken.

  • Als u resources wilt implementeren in een virtueel netwerk of subnet, moet uw gebruikersaccount machtigingen hebben voor de volgende acties in op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC):

    • 'Microsoft.Network/virtualNetworks/join/action' in de virtuele netwerkresource.
    • 'Microsoft.Network/virtualNetworks/subnet/join/action' in de subnetresource.

    Zie de ingebouwde netwerkrollen voor meer informatie over Azure RBAC met netwerken

Beperkingen

Azure Container Instances

  • Wanneer u Azure Container Instances in een virtueel netwerk gebruikt, moet het virtuele netwerk zich in dezelfde resourcegroep als uw Azure Machine Learning maken. Anders kan het virtuele netwerk zich in een andere resourcegroep bevinden.
  • Als uw werkruimte een privé-eindpunt heeft, moet het virtuele netwerk dat wordt gebruikt voor Azure Container Instances hetzelfde zijn als het netwerk dat wordt gebruikt door het privé-eindpunt van de werkruimte.

Waarschuwing

Wanneer u Azure Container Instances in het virtuele netwerk gebruikt, kan de Azure Container Registry (ACR) voor uw werkruimte zich niet in het virtuele netwerk bevinden. Vanwege deze beperking raden we Azure Container Instances niet aan voor beveiligde implementaties met Azure Machine Learning.

Azure Kubernetes Service

  • Als uw AKS-cluster zich achter een VNET bevindt, moeten uw werkruimte en de bijbehorende resources (opslag, sleutelkluis, Azure Container Registry) privé-eindpunten of service-eindpunten hebben in hetzelfde VNET als het VNET van het AKS-cluster. Lees de zelfstudie voor het maken van een beveiligde werkruimte om deze privé-eindpunten of service-eindpunten toe te voegen aan uw VNET.
  • Als uw werkruimte een privé-eindpunt heeft, moet het Azure Kubernetes Service-cluster zich in dezelfde Azure-regio bevinden als de werkruimte.
  • Het gebruik van een openbare FQDN (Fully Qualified Domain Name) met een privé AKS-cluster wordt niet ondersteund met Azure Machine Learning.

Azure Kubernetes Service

Belangrijk

Als u een AKS-cluster in een virtueel netwerk wilt gebruiken, volgt u eerst de vereisten in Geavanceerde netwerken configureren in Azure Kubernetes Service (AKS).

Voer de volgende stappen uit om AKS toe te voegen aan een virtueel netwerk in uw werkruimte:

  1. Meld u aan bij Azure Machine Learning-studio en selecteer vervolgens uw abonnement en werkruimte.

  2. Selecteer Compute aan de linkerkant, deductieclusters in het midden en selecteer vervolgens + Nieuw.

    Screenshot of create inference cluster dialog

  3. Selecteer in het dialoogvenster Deductiecluster makende optie Nieuwe maken en de VM-grootte die u voor het cluster wilt gebruiken. Selecteer ten slotte Volgende.

    Screenshot of VM settings

  4. Voer in de sectie Configureren Instellingen een rekennaam in, selecteer het clusterdoel, het aantal knooppunten en selecteer vervolgens Geavanceerd om de netwerkinstellingen weer te geven. Stel in het gebied Virtueel netwerk configureren de volgende waarden in:

    • Stel het virtuele netwerk in dat moet worden gebruikt.

      Tip

      Als uw werkruimte een privé-eindpunt gebruikt om verbinding te maken met het virtuele netwerk, wordt het selectieveld van het virtuele netwerk grijs weergegeven.

    • Stel het subnet in om het cluster te maken.

    • Voer in het veld Adresbereik van kubernetes-service het adresbereik van de Kubernetes-service in. Dit adresbereik maakt gebruik van een CIDR-notatiebereik (Classless Inter-Domain Routing) om de IP-adressen te definiëren die beschikbaar zijn voor het cluster. Deze mag niet overlappen met ip-adresbereiken van subnetten (bijvoorbeeld 10.0.0.0/16).

    • Voer in het ip-adresveld van de Kubernetes DNS-service het IP-adres van de Kubernetes DNS-service in. Dit IP-adres wordt toegewezen aan de Kubernetes DNS-service. Deze moet zich binnen het adresbereik van de Kubernetes-service bevinden (bijvoorbeeld 10.0.0.10).

    • Voer in het adresveld van de Docker-brug het Docker-brugadres in. Dit IP-adres wordt toegewezen aan Docker Bridge. Het mag zich niet in een subnet-IP-adresbereik bevinden of het Adresbereik van de Kubernetes-service (bijvoorbeeld 172.18.0.1/16).

    Screenshot of configure network settings

  5. Wanneer u een model als webservice implementeert in AKS, wordt er een score-eindpunt gemaakt om deductieaanvragen af te handelen. Zorg ervoor dat de netwerkbeveiligingsgroep (NSG) waarmee het virtuele netwerk wordt bepaald, een binnenkomende beveiligingsregel is ingeschakeld voor het IP-adres van het score-eindpunt als u het buiten het virtuele netwerk wilt aanroepen.

    Als u het IP-adres van het score-eindpunt wilt vinden, bekijkt u de score-URI voor de geïmplementeerde service. Zie Een model gebruiken dat is geïmplementeerd als een webservice voor meer informatie over het weergeven van de score-URI.

    Belangrijk

    Behoud de standaardregels voor uitgaand verkeer voor de NSG. Zie de standaardbeveiligingsregels in beveiligingsgroepen voor meer informatie.

    An inbound security rule

    Belangrijk

    Het IP-adres dat wordt weergegeven in de afbeelding voor het score-eindpunt, verschilt voor uw implementaties. Hoewel hetzelfde IP-adres wordt gedeeld door alle implementaties naar één AKS-cluster, heeft elk AKS-cluster een ander IP-adres.

U kunt ook de Azure Machine Learning SDK gebruiken om Azure Kubernetes Service toe te voegen in een virtueel netwerk. Als u al een AKS-cluster in een virtueel netwerk hebt, koppelt u het aan de werkruimte, zoals beschreven in Implementeren in AKS. Met de volgende code maakt u een nieuw AKS-exemplaar in het subnet van een virtueel netwerk met de default naam mynetwork:

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)

Wanneer het aanmaakproces is voltooid, kunt u deductie uitvoeren of modelscores uitvoeren op een AKS-cluster achter een virtueel netwerk. Zie Implementeren in AKS voor meer informatie.

Zie Azure RBAC gebruiken voor Kubernetes-autorisatie voor meer informatie over het gebruik van Role-Based Access Control met Kubernetes.

Rol van netwerkbijdrager

Belangrijk

Als u een AKS-cluster maakt of koppelt door een virtueel netwerk op te geven dat u eerder hebt gemaakt, moet u de service-principal (SP) of beheerde identiteit voor uw AKS-cluster de rol Netwerkbijdrager verlenen aan de resourcegroep die het virtuele netwerk bevat.

Gebruik de volgende stappen om de identiteit toe te voegen als netwerkbijdrager:

  1. Gebruik de volgende Azure CLI-opdrachten om de service-principal of beheerde id voor AKS te vinden. Vervang <aks-cluster-name> door de naam van het cluster. Vervang <resource-group-name> door de naam van de resourcegroep die het AKS-cluster bevat:

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

    Als met deze opdracht een waarde wordt msigeretourneerd, gebruikt u de volgende opdracht om de principal-id voor de beheerde identiteit te identificeren:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Gebruik de volgende opdracht om de id te vinden van de resourcegroep die uw virtuele netwerk bevat. Vervang <resource-group-name> door de naam van de resourcegroep die het virtuele netwerk bevat:

    az group show -n <resource-group-name> --query id
    
  3. Gebruik de volgende opdracht om de service-principal of beheerde identiteit toe te voegen als een netwerkbijdrager. Vervang <SP-or-managed-identity> door de id die is geretourneerd voor de service-principal of beheerde identiteit. Vervang <resource-group-id> door de id die wordt geretourneerd voor de resourcegroep die het virtuele netwerk bevat:

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

Zie Interne load balancer gebruiken met Azure Kubernetes Service voor meer informatie over het gebruik van de interne load balancer met AKS.

VNet-verkeer beveiligen

Er zijn twee manieren om verkeer van en naar het AKS-cluster te isoleren naar het virtuele netwerk:

  • Privé-AKS-cluster: deze benadering maakt gebruik van Azure Private Link om de communicatie met het cluster te beveiligen voor implementatie-/beheerbewerkingen.
  • Interne AKS-load balancer: met deze benadering configureert u het eindpunt voor uw implementaties naar AKS om een privé-IP binnen het virtuele netwerk te gebruiken.

Privé-AKS-cluster

AKS-clusters hebben standaard een besturingsvlak of API-server met openbare IP-adressen. U kunt AKS configureren voor het gebruik van een privébesturingsvlak door een privé-AKS-cluster te maken. Zie Een privé-Azure Kubernetes Service-cluster maken voor meer informatie.

Nadat u het privé-AKS-cluster hebt gemaakt, koppelt u het cluster aan het virtuele netwerk dat u wilt gebruiken met Azure Machine Learning.

Interne AKS-load balancer

AKS-implementaties maken standaard gebruik van een openbare load balancer. In deze sectie leert u hoe u AKS configureert voor het gebruik van een interne load balancer. Een interne (of privé) load balancer wordt gebruikt waarbij alleen privé-IP-adressen als front-end zijn toegestaan. Interne load balancers worden gebruikt om verkeer in een virtueel netwerk te verdelen

Een privé load balancer wordt ingeschakeld door AKS te configureren voor het gebruik van een interne load balancer.

Privé load balancer inschakelen

Belangrijk

U kunt geen privé-IP inschakelen bij het maken van het Azure Kubernetes Service-cluster in Azure Machine Learning-studio. U kunt er een maken met een interne load balancer wanneer u de Python SDK of Azure CLI-extensie gebruikt voor machine learning.

In de volgende voorbeelden ziet u hoe u een nieuw AKS-cluster maakt met een privé-IP/interne load balancer met behulp van de SDK en CLI:

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)

Wanneer u een bestaand cluster aan uw werkruimte koppelt , gebruikt u de load_balancer_type en load_balancer_subnet parameters van AksCompute.attach_configuration() om de load balancer te configureren.

Zie Attach an existing AKS cluster (Een bestaand AKS-cluster koppelen) voor meer informatie over het koppelen van een cluster.

Azure Container Instances (ACI) inschakelen

Azure-containerinstanties worden dynamisch gemaakt bij het implementeren van een model. Als u Azure Machine Learning wilt inschakelen om ACI in het virtuele netwerk te maken, moet u subnetdelegering inschakelen voor het subnet dat door de implementatie wordt gebruikt. Voer de volgende stappen uit om ACI in een virtueel netwerk te gebruiken voor uw werkruimte:

  1. Uw gebruikersaccount moet machtigingen hebben voor de volgende acties in op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC):

    • Microsoft.Network/virtualNetworks/*/read op de resource van het virtuele netwerk. Deze machtiging is niet nodig voor azure Resource Manager sjabloonimplementaties.
    • Microsoft.Network/virtualNetworks/subnet/join/action op de subnetresource.
  2. Zoek in de Azure Portal naar de naam van het virtuele netwerk. Wanneer deze wordt weergegeven in de zoekresultaten, selecteert u deze.

  3. Selecteer Subnetten, onder INSTELLINGEN en selecteer vervolgens het subnet.

  4. Selecteer op de pagina subnet voor de lijst met subnetdelegering de optie Microsoft.ContainerInstance/containerGroups.

  5. Implementeer het model met behulp van AciWebservice.deploy_configuration(), gebruik de vnet_name en subnet_name parameters. Stel deze parameters in op de naam van het virtuele netwerk en het subnet waarin u delegering hebt ingeschakeld.

Zie Een subnetdelegering toevoegen of verwijderen voor meer informatie.

Uitgaande connectiviteit vanaf het virtuele netwerk beperken

Als u de standaardregels voor uitgaand verkeer niet wilt gebruiken en u de uitgaande toegang van uw virtuele netwerk wilt beperken, moet u toegang tot Azure Container Registry toestaan. Zorg er bijvoorbeeld voor dat uw netwerkbeveiligingsgroepen (NSG) een regel bevat die toegang biedt tot de servicetag AzureContainerRegistry.RegionName waarbij {RegionName} de naam is van een Azure-regio.

Volgende stappen

Dit artikel maakt deel uit van een reeks over het beveiligen van een Azure Machine Learning werkstroom. Zie de andere artikelen in deze reeks: