Usare le identità gestite con l'interfaccia della riga di comando di Azure Machine Learning v1

SI APPLICA A: Python SDK azureml v1

SI APPLICA A: Estensione ML dell’interfaccia della riga di comando di Azure v1

La Identità gestite consentono di configurare l'area di lavoro con le autorizzazioni minime necessarie per accedere alle risorse.

Quando si configura l'area di lavoro Azure Machine Learning in modo affidabile, è importante assicurarsi che i diversi servizi associati all'area di lavoro abbiano il livello di accesso corretto. Ad esempio, durante il flusso di lavoro dell'apprendimento automatico, l'area di lavoro deve accedere a Registro Azure Container (ACR) per le immagini Docker e agli account di archiviazione per i dati di training.

Inoltre, le identità gestite consentono un controllo granulare sulle autorizzazioni, ad esempio è possibile concedere o revocare l'accesso di specifiche risorse di calcolo a uno specifico record di controllo di accesso.

In questo articolo viene illustrato come usare le identità gestite per:

  • Configurate e usare Registro Azure Container per l'area di lavoro di Azure Machine Learning senza dover abilitare l'accesso dell'utente amministratore a Registro Azure Container.
  • Accedere a un Registro Azure Container privato esterno all'area di lavoro, per eseguire il pull delle immagini di base per il training o l'inferenza.
  • Creare un'area di lavoro con un'identità gestita assegnata all'utente per accedere alle risorse associate.

Prerequisiti

Configurare le identità gestite

In alcune situazioni, è necessario impedire l'accesso dell'utente amministratore a Registro Azure Container. Ad esempio, il Registro Azure Container può essere condiviso ed è necessario impedire l'accesso amministratore da parte di altri utenti. In alternativa, la creazione di Registro Azure Container con l'utente amministratore abilitato non è consentita da un criterio a livello di sottoscrizione.

Importante

Quando si usa Azure Machine Learning per l'inferenza nell'Istanza di contenitore di Azure, l'accesso utente amministratore in Registro Azure Container è necessario. Non disabilitarlo se si prevede di distribuire modelli nell'Istanza di Azure Container per l'inferenza.

Quando si crea Registro Azure Container senza abilitare l'accesso utente amministratore, le identità gestite vengono usate per accedere al Registro Azure Container per compilare ed eseguire il pull di immagini Docker.

È possibile usare il proprio Registro Azure Container con l'utente amministratore disabilitato quando si crea l'area di lavoro. In alternativa, consentire ad Azure Machine Learning di creare il Registro Azure Container dell'area di lavoro e disabilitare l'utente amministratore in un secondo momento.

Usare il proprio Registro Azure Container

Se l'utente amministratore del Registro Azure Container non è consentito dai criteri di sottoscrizione, è prima necessario creare Registro Azure Container senza utente amministratore, quindi associarlo all'area di lavoro. Inoltre, se si dispone di un Registro Azure Container con l'utente amministratore disabilitato, è possibile collegarlo all'area di lavoro.

Creare un Registro Azure Container dall'interfaccia della riga di comando di Azure senza impostare l'argomento --admin-enabled oppure dal portale di Azure senza abilitare l'utente amministratore. Quindi, durante la creazione dell'area di lavoro di Azure Machine Learning, specificare l'ID risorsa di Azure del Registro Azure Container. L'esempio seguente illustra la creazione di una nuova area di lavoro di Azure Machine Learning che usa un registro Azure Container esistente:

Suggerimento

Per ottenere il valore per il parametro --container-registry, usare il comando az acr show per visualizzare le informazioni del proprio Registro Azure Container. Il campo id contiene l'ID risorsa di Registro Azure Container.

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>

Consentire al servizio Azure Machine Learning di creare il Registro Azure Container dell'area di lavoro

Se non si usa il proprio Registro Azure Container, il servizio Azure Machine Learning ne creerà uno quando si esegue un'operazione che ne richiede uno. Ad esempio, inviare un'esecuzione di training all'ambiente di calcolo di Machine Learning, creare un ambiente o distribuire un endpoint di servizio Web. Il Registro Azure Container creato dall'area di lavoro avrà l'utente amministratore abilitato ed è necessario disabilitare manualmente l'utente amministratore.

  1. Creazione di una nuova area di lavoro

    az ml workspace show -n <my workspace> -g <my resource group>
    
  2. Eseguire un'azione che richiede Registro Azure Container. Ad esempio, l'esercitazione sul training di un modello.

  3. Ottenere il nome del Registro Azure Container creato dal cluster:

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

    Questo comando restituisce un valore simile al testo seguente. È necessaria solo l'ultima parte del testo, ovvero il nome dell'istanza di Registro Azure Container:

    /subscriptions/<subscription id>/resourceGroups/<my resource group>/providers/MicrosoftContainerReggistry/registries/<ACR instance name>
    
  4. Aggiornare il Registro Azure Container per disabilitare l'utente amministratore:

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

Creare risorse di calcolo con identità gestita per accedere alle immagini Docker per il training

Per accedere al Registro Azure Container dell'area di lavoro, creare un cluster di elaborazione di Machine Learning con l'identità gestita assegnata dal sistema abilitata. È possibile abilitare l'identità dal portale di Azure o da Studio durante la creazione dell'ambiente di calcolo o dall'interfaccia della riga di comando di Azure usando quanto segue. Per altre informazioni, vedere Uso dell'identità gestita con cluster di elaborazione.

Quando si crea un cluster di calcolo con AmlComputeProvisioningConfiguration, usare il parametro identity_type per impostare il tipo di identità gestita.

A un'identità gestita viene concesso automaticamente il ruolo ACRPull nel Registro Azure Container dell'area di lavoro per abilitare il pull delle immagini Docker per il training.

Nota

Se si crea l'ambiente di calcolo prima della creazione del Registro Azure Container dell'area di lavoro, è necessario assegnare manualmente il ruolo ACRPull.

Accedere alle immagini di base dal Registro Azure Container privato

Per impostazione predefinita, Azure Machine Learning usa immagini di base Docker provenienti da un repository pubblico gestito da Microsoft. Crea quindi l'ambiente di training o inferenza in base a tali immagini. Per altre informazioni, vedere Che cosa sono gli ambienti ML?.

Per usare un'immagine di base personalizzata interna all'azienda, è possibile usare le identità gestite per accedere al Registro Azure Container privato. Esistono due casi di utilizzo:

  • Usare l'immagine di base per il training così come è.
  • Creare un'immagine gestita di Azure Machine Learning con un'immagine personalizzata come base.

Eseguire il pull dell'immagine di base Docker nel cluster di elaborazione di apprendimento automatico per il training così come è

Creare un cluster di calcolo di elaborazione di apprendimento automatico con l'identità gestita assegnata dal sistema abilitata come descritto in precedenza. Determinare quindi l'ID entità dell'identità gestita.

SI APPLICA A: Estensione ML dell’interfaccia della riga di comando di Azure v1

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

Facoltativamente, è possibile aggiornare il cluster di elaborazione per assegnare un'identità gestita assegnata dall'utente:

SI APPLICA A: Estensione ML dell’interfaccia della riga di comando di Azure v1

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

Per consentire al cluster di elaborazione di eseguire il pull delle immagini di base, concedere all'identità del servizio gestito il ruolo ACRPull nel Registro Azure Container privato

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>"

Infine, quando si invia un'esecuzione di training, specificare il percorso dell'immagine di base nella definizione dell'ambiente.

SI APPLICA A: 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

Importante

Per assicurarsi che venga eseguito il pull l'immagine di base direttamente nella risorsa di calcolo, impostare user_managed_dependencies = True e non specificare un Dockerfile. In caso contrario, il servizio Azure Machine Learning tenterà di creare una nuova immagine Docker con esito negativo, perché solo il cluster di elaborazione ha accesso per eseguire il pull dell'immagine di base da Registro Azure Container.

Creare un ambiente gestito di Azure Machine Learning nell'immagine di base da Registro Azure Container privato per il training o l'inferenza

SI APPLICA A: Estensione ML dell’interfaccia della riga di comando di Azure v1

In questo scenario, il servizio Azure Machine Learning crea l'ambiente di training o inferenza in base a un'immagine di base fornita da un Registro Azure Container privato. Poiché l'attività di creazione delle immagini avviene nell'area di lavoro del Registro Azure Container tramite Attività del Registro Azure Container, è necessario eseguire più passaggi per consentire l'accesso.

  1. Creare l'identità gestita assegnata dall'utente e concedere all'identità ACRPull l'accesso al Registro di controllo di accesso privato.

  2. Concedere all'identità gestita assegnata dal sistema dell'area di lavoro un ruolo Operatore di identità gestita per l'identità gestita assegnata dall'utente del passaggio precedente. Questo ruolo consente all'area di lavoro di assegnare l'identità gestita assegnata dall'utente all'attività del Registro Azure Container per la creazione dell'ambiente gestito.

    1. Ottenere l'ID principale dell'identità gestita assegnata dal sistema dell'area di lavoro:

      az ml workspace show -w <workspace name> -g <resource group> --query identityPrincipalId
      
    2. Concedere il ruolo Operatore di identità gestita:

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

      L'ID risorsa dell'identità gestita assegnata dall'utente è l'ID risorsa di Azure dell'identità assegnata dall'utente, nel formato /subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned managed identity name>.

  3. Specificare il Registro Azure Container esterno e l'ID client dell'identità gestita assegnata dall'utente nelle connessioni all'area di lavoro usando il metodo Workspace.set_connection:

    Si applica a: 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. Al termine della configurazione, è possibile usare le immagini di base del Registro Azure Container privato durante la creazione di ambienti per il training o l'inferenza. Il frammento di codice seguente illustra come specificare i Registro Azure Container dell'immagine di base e il nome dell'immagine in una definizione di ambiente:

    Si applica a: 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"
    

    Facoltativamente, è possibile specificare l'URL della risorsa di identità gestita e l'ID client nella definizione dell'ambiente stesso usando RegistryIdentity. Se si usa l'identità del registro in modo esplicito, questa esegue l'override di tutte le connessioni dell'area di lavoro specificate in precedenza:

    Si applica a: 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"
    

Usare immagini Docker per l'inferenza

Dopo aver configurato il Registro Azure Container senza l'utente amministratore come descritto in precedenza, è possibile accedere alle immagini Docker per l'inferenza senza chiavi di amministratore dal servizio Azure Kubernetes. Quando si crea o si collega il servizio Azure Kubernetes all'area di lavoro, all'entità di servizio del cluster viene assegnato automaticamente l'accesso ACRPull all'area di lavoro del Registro Azure Container.

Nota

Se si usa il proprio cluster del servizio Azure Kubernetes, è necessario che abbia l'entità servizio abilitata anziché l'identità gestita.

Creare un'area di lavoro con identità gestita assegnata dall'utente

Quando si crea un'area di lavoro, è possibile usare la propria identità gestita assegnata dall'utente che viene usata per accedere alle risorse associate: Registro Azure Container, KeyVault, Archiviazione e App Insights.

Importante

Quando si crea un'area di lavoro con l'identità gestita assegnata dall'utente, è necessario creare manualmente le risorse associate e concedere i ruoli di identità gestita su tali risorse. Usare il modello di assegnazione di ruolo ARM per effettuare le assegnazioni.

Usare l'interfaccia della riga di comando di Azure o Python SDK per creare l'area di lavoro. Quando si usa l'interfaccia della riga di comando, specificare l'ID usando il parametro --primary-user-assigned-identity. Quando si usa l'SDK, usare primary_user_assigned_identity. Di seguito sono riportati alcuni esempi di utilizzo dell'interfaccia della riga di comando di Azure e di Python per creare una nuova area di lavoro usando questi parametri:

Interfaccia della riga di comando di Azure

SI APPLICA A: Estensione ML dell’interfaccia della riga di comando di Azure v1

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

Python

Si applica a: 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")

È anche possibile usare un modello di ARM per creare un'area di lavoro con identità gestita assegnata dall'utente.

Per un'area di lavoro con chiavi gestite dal cliente per la crittografia, è possibile passare un'identità gestita assegnata dall'utente per l'autenticazione dall'archiviazione a Key Vault. Usare l'argomento user-assigned-identity-for-cmk-encryption (interfaccia della riga di comando) o user_assigned_identity_for_cmk_encryption (SDK) per passare l'identità gestita. Questa identità gestita può essere la stessa o diversa dell'identità gestita assegnata dall'utente primario dell'area di lavoro.

Passaggi successivi