Dela via


Använda hanterade identiteter med Azure Machine Learning CLI v1

GÄLLER FÖR: Python SDK azureml v1

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

Med hanterade identiteter kan du konfigurera din arbetsyta med den minsta behörighet som krävs för att få åtkomst till resurser.

När du konfigurerar Azure Machine Learning-arbetsytan på ett tillförlitligt sätt är det viktigt att se till att olika tjänster som är associerade med arbetsytan har rätt åtkomstnivå. Under arbetsflödet för maskininlärning behöver arbetsytan till exempel åtkomst till Azure Container Registry (ACR) för Docker-avbildningar och lagringskonton för träningsdata.

Dessutom tillåter hanterade identiteter detaljerad kontroll över behörigheter, till exempel kan du bevilja eller återkalla åtkomst från specifika beräkningsresurser till en specifik ACR.

I den här artikeln får du lära dig hur du använder hanterade identiteter för att:

  • Konfigurera och använda ACR för din Azure Machine Learning-arbetsyta utan att behöva aktivera administratörsanvändaråtkomst till ACR.
  • Få åtkomst till en privat ACR utanför arbetsytan för att hämta basavbildningar för träning eller slutsatsdragning.
  • Skapa en arbetsyta med användartilldelad hanterad identitet för att få åtkomst till associerade resurser.

Förutsättningar

Konfigurera hanterade identiteter

I vissa situationer är det nödvändigt att neka administratörsanvändare åtkomst till Azure Container Registry. ACR kan till exempel delas och du måste inte tillåta administratörsåtkomst av andra användare. Eller så tillåts inte att skapa ACR med administratörsanvändare aktiverat av en princip på prenumerationsnivå.

Viktigt!

När du använder Azure Machine Learning för slutsatsdragning på Azure Container Instance (ACI) krävs administratörsanvändaråtkomst på ACR. Inaktivera inte detta om du planerar att distribuera modeller till ACI för slutsatsdragning.

När du skapar ACR utan att aktivera administratörsanvändaråtkomst används hanterade identiteter för att komma åt ACR för att skapa och hämta Docker-avbildningar.

Du kan ta med din egen ACR med administratörsanvändaren inaktiverad när du skapar arbetsytan. Du kan också låta Azure Machine Learning skapa arbetsytan ACR och inaktivera administratörsanvändare efteråt.

Ta med din egen ACR

Om ACR-administratörsanvändare inte tillåts av prenumerationsprincipen bör du först skapa ACR utan administratörsanvändare och sedan associera den med arbetsytan. Om du har en befintlig ACR med administratörsanvändaren inaktiverad kan du också koppla den till arbetsytan.

Skapa ACR från Azure CLI utan att ange --admin-enabled argument eller från Azure Portal utan att aktivera administratörsanvändare. När du sedan skapar En Azure Machine Learning-arbetsyta anger du Azure-resurs-ID för ACR. I följande exempel visas hur du skapar en ny Azure Machine Learning-arbetsyta som använder en befintlig ACR:

Dricks

Om du vill hämta värdet för parametern --container-registry använder du kommandot az acr show för att visa information för din ACR. Fältet id innehåller resurs-ID:t för din ACR.

az ml workspace create -w <workspace name> \
-g <workspace resource group> \
-l <region> \
--container-registry /subscriptions/<subscription id>/resourceGroups/<acr resource group>/providers/Microsoft.ContainerRegistry/registries/<acr name>

Låt Azure Machine Learning-tjänsten skapa arbetsytan ACR

Om du inte tar med din egen ACR skapar Azure Machine Learning-tjänsten en åt dig när du utför en åtgärd som behöver en. Skicka till exempel en träningskörning till Machine Learning Compute, skapa en miljö eller distribuera en webbtjänstslutpunkt. Den ACR som skapas av arbetsytan har administratörsanvändare aktiverad och du måste inaktivera administratörsanvändaren manuellt.

  1. Skapa en ny arbetsyta

    az ml workspace show -n <my workspace> -g <my resource group>
    
  2. Utför en åtgärd som kräver ACR. Till exempel självstudien om hur du tränar en modell.

  3. Hämta det ACR-namn som skapats av klustret:

    az ml workspace show -w <my workspace> \
    -g <my resource group>
    --query containerRegistry
    

    Det här kommandot returnerar ett värde som liknar följande text. Du vill bara ha den sista delen av texten, som är namnet på ACR-instansen:

    /subscriptions/<subscription id>/resourceGroups/<my resource group>/providers/MicrosoftContainerReggistry/registries/<ACR instance name>
    
  4. Uppdatera ACR för att inaktivera administratörsanvändaren:

    az acr update --name <ACR instance name> --admin-enabled false
    

Skapa beräkning med hanterad identitet för att få åtkomst till Docker-avbildningar för träning

Om du vill komma åt arbetsytans ACR skapar du beräkningskluster för maskininlärning med systemtilldelad hanterad identitet aktiverad. Du kan aktivera identiteten från Azure Portal eller Studio när du skapar beräkning eller från Azure CLI med hjälp av nedanstående. Mer information finns i använda hanterad identitet med beräkningskluster.

När du skapar ett beräkningskluster med AmlComputeProvisioningConfiguration använder du parametern identity_type för att ange den hanterade identitetstypen.

En hanterad identitet beviljas automatiskt ACRPull-roll på arbetsytans ACR för att aktivera hämtar Docker-avbildningar för träning.

Kommentar

Om du skapar beräkning först, innan arbetsytans ACR har skapats, måste du tilldela ACRPull-rollen manuellt.

Få åtkomst till basavbildningar från privat ACR

Som standard använder Azure Machine Learning Docker-basavbildningar som kommer från en offentlig lagringsplats som hanteras av Microsoft. Den skapar sedan din tränings- eller slutsatsdragningsmiljö på dessa avbildningar. Mer information finns i Vad är ML-miljöer?.

Om du vill använda en anpassad basavbildning som är intern för företaget kan du använda hanterade identiteter för att komma åt din privata ACR. Det finns två användningsfall:

  • Använd basavbildningen för träning som den är.
  • Skapa en hanterad Azure Machine Learning-avbildning med en anpassad avbildning som bas.

Hämta Docker-basavbildningen till datorinlärningsberäkningsklustret för träning som är

Skapa beräkningskluster för maskininlärning med systemtilldelad hanterad identitet aktiverad enligt beskrivningen tidigare. Bestäm sedan huvud-ID:t för den hanterade identiteten.

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

az ml computetarget amlcompute identity show --name <cluster name> -w <workspace> -g <resource group>

Du kan också uppdatera beräkningsklustret för att tilldela en användartilldelad hanterad identitet:

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

az ml computetarget amlcompute identity assign --name <cluster name> \
-w $mlws -g $mlrg --identities <my-identity-id>

Om du vill tillåta att beräkningsklustret hämtar basavbildningarna beviljar du den hanterade tjänstidentiteten ACRPull-rollen på den privata ACR

az role assignment create --assignee <principal ID> \
--role acrpull \
--scope "/subscriptions/<subscription ID>/resourceGroups/<private ACR resource group>/providers/Microsoft.ContainerRegistry/registries/<private ACR name>"

När du skickar en träningskörning anger du slutligen basavbildningens plats i miljödefinitionen.

GÄLLER FÖR: Python SDK azureml v1

from azureml.core import Environment
env = Environment(name="private-acr")
env.docker.base_image = "<ACR name>.azurecr.io/<base image repository>/<base image version>"
env.python.user_managed_dependencies = True

Viktigt!

För att säkerställa att basavbildningen hämtas direkt till beräkningsresursen anger du user_managed_dependencies = True och anger inte en Dockerfile. Annars försöker Azure Machine Learning-tjänsten skapa en ny Docker-avbildning och misslyckas, eftersom endast beräkningsklustret har åtkomst till att hämta basavbildningen från ACR.

Skapa en hanterad Azure Machine Learning-miljö till en basavbildning från en privat ACR för träning eller slutsatsdragning

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

I det här scenariot bygger Azure Machine Learning-tjänsten tränings- eller slutsatsdragningsmiljön ovanpå en basavbildning som du tillhandahåller från en privat ACR. Eftersom avbildningsgenereringsaktiviteten sker på arbetsytans ACR med hjälp av ACR-uppgifter måste du utföra fler steg för att tillåta åtkomst.

  1. Skapa användartilldelad hanterad identitet och ge identiteten ACRPull åtkomst till den privata ACR.

  2. Ge arbetsytan systemtilldelad hanterad identitet en hanterad identitetsoperatorroll för den användartilldelade hanterade identiteten från föregående steg. Med den här rollen kan arbetsytan tilldela den användartilldelade hanterade identiteten till ACR Task för att skapa den hanterade miljön.

    1. Hämta huvud-ID:t för arbetsytans systemtilldelade hanterade identitet:

      az ml workspace show -w <workspace name> -g <resource group> --query identityPrincipalId
      
    2. Bevilja rollen Hanterad identitetsoperator:

      az role assignment create --assignee <principal ID> --role managedidentityoperator --scope <user-assigned managed identity resource ID>
      

      Resurs-ID för användartilldelade hanterade identiteter är Azure-resurs-ID för den användartilldelade identiteten i formatet /subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned managed identity name>.

  3. Ange det externa ACR- och klient-ID:t för den användartilldelade hanterade identiteten i arbetsyteanslutningar med hjälp av Workspace.set_connection metod:

    GÄLLER FÖR: Python SDK azureml v1

    workspace.set_connection(
        name="privateAcr", 
        category="ACR", 
        target = "<acr url>", 
        authType = "RegistryConnection", 
        value={"ResourceId": "<user-assigned managed identity resource id>", "ClientId": "<user-assigned managed identity client ID>"})
    
  4. När konfigurationen är klar kan du använda basavbildningarna från privata ACR när du skapar miljöer för träning eller slutsatsdragning. Följande kodfragment visar hur du anger basavbildningens ACR och bildnamn i en miljödefinition:

    GÄLLER FÖR: Python SDK azureml v1

    from azureml.core import Environment
    
    env = Environment(name="my-env")
    env.docker.base_image = "<acr url>/my-repo/my-image:latest"
    

    Du kan också ange url:en för den hanterade identitetsresursen och klient-ID:t i själva miljödefinitionen med hjälp av RegistryIdentity. Om du uttryckligen använder registeridentitet åsidosätter den alla arbetsyteanslutningar som angavs tidigare:

    GÄLLER FÖR: Python SDK azureml v1

    from azureml.core.container_registry import RegistryIdentity
    
    identity = RegistryIdentity()
    identity.resource_id= "<user-assigned managed identity resource ID>"
    identity.client_id="<user-assigned managed identity client ID>"
    env.docker.base_image_registry.registry_identity=identity
    env.docker.base_image = "my-acr.azurecr.io/my-repo/my-image:latest"
    

Använda Docker-avbildningar för slutsatsdragning

När du har konfigurerat ACR utan administratörsanvändare enligt beskrivningen tidigare kan du komma åt Docker-avbildningar för slutsatsdragning utan administratörsnycklar från din Azure Kubernetes-tjänst (AKS). När du skapar eller kopplar AKS till arbetsytan tilldelas klustrets tjänsthuvudnamn automatiskt ACRPull-åtkomst till arbetsytanS ACR.

Kommentar

Om du tar med ditt eget AKS-kluster måste klustret ha tjänstens huvudnamn aktiverat i stället för hanterad identitet.

Skapa arbetsyta med användartilldelad hanterad identitet

När du skapar en arbetsyta kan du ta med din egen användartilldelade hanterade identitet som ska användas för att komma åt de associerade resurserna: ACR, KeyVault, Storage och App Insights.

Viktigt!

När du skapar en arbetsyta med användartilldelad hanterad identitet måste du skapa de associerade resurserna själv och bevilja de hanterade identitetsrollerna för dessa resurser. Använd ARM-mallen för rolltilldelning för att göra tilldelningarna.

Använd Azure CLI eller Python SDK för att skapa arbetsytan. När du använder CLI anger du ID:t med hjälp av parametern --primary-user-assigned-identity . När du använder SDK använder du primary_user_assigned_identity. Följande är exempel på hur du använder Azure CLI och Python för att skapa en ny arbetsyta med hjälp av följande parametrar:

Azure CLI

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

az ml workspace create -w <workspace name> -g <resource group> --primary-user-assigned-identity <managed identity ARM ID>

Python

GÄLLER FÖR: Python SDK azureml v1

from azureml.core import Workspace

ws = Workspace.create(name="workspace name", 
    subscription_id="subscription id", 
    resource_group="resource group name",
    primary_user_assigned_identity="managed identity ARM ID")

Du kan också använda en ARM-mall för att skapa en arbetsyta med användartilldelad hanterad identitet.

För en arbetsyta med kundhanterade nycklar för kryptering kan du skicka in en användartilldelad hanterad identitet för att autentisera från lagring till Key Vault. Använd argumentet user-assigned-identity-for-cmk-encryption (CLI) eller user_assigned_identity_for_cmk_encryption (SDK) för att skicka in den hanterade identiteten. Den här hanterade identiteten kan vara samma eller annorlunda som den primära arbetsytans användartilldelade hanterade identitet.

Nästa steg