Esercitazione: Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Azure Data Lake Store

Le identità gestite per le risorse di Azure sono una funzionalità di Microsoft Entra ID. Tutti i servizi di Azure che supportano le identità gestite per le risorse di Azure sono soggetti alla sequenza temporale di tali entità. Prima di iniziare, assicurarsi di esaminare lo stato di disponibilità delle identità gestite per la risorsa e i problemi noti.

Questa esercitazione illustra come usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere a un'istanza di Azure Data Lake Store. Le identità gestite vengono gestite automaticamente da Azure. Consentono all'applicazione di eseguire l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra, senza dover inserire le credenziali nel codice.

In questo articolo viene spiegato come:

  • Concedere alla VM l'accesso a un'istanza di Azure Data Lake Store
  • Ottenere un token di accesso usando l'identità della macchina virtuale e usarlo per accedere a un'istanza di Azure Data Lake Store

Prerequisiti

Abilitazione

L'abilitazione di un'identità gestita assegnata dal sistema si esegue con un semplice clic del mouse. È possibile abilitarla durante la creazione di una macchina virtuale o nelle proprietà di una VM esistente.

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

Per abilitare l'identità gestita assegnata dal sistema in una nuova VM:

  1. Accedere al portale di Azure

  2. Creare una macchina virtuale con l'identità assegnata dal sistema abilitata

Concedi accesso

È ora possibile concedere alla VM l'accesso a file e cartelle in un'istanza di Azure Data Lake Store. Per questo passaggio, è possibile usare un'istanza di Data Lake Store esistente o crearne una nuova. Per creare una nuova istanza di Data Lake Store usando il portale di Azure, seguire questa guida introduttiva ad Azure Data Lake Store. Nella documentazione di Azure Data Lake Store sono disponibili anche guide introduttive che usano l'interfaccia della riga di comando di Azure e Azure PowerShell.

In Data Lake Store creare una nuova cartella e concedere all'identità assegnata dal sistema della macchina virtuale l'autorizzazione. L'identità deve disporre dei diritti di lettura, scrittura ed esecuzione di file in tale cartella:

  1. Nella portale di Azure selezionare Data Lake Store nel riquadro di spostamento a sinistra.
  2. Selezionare Data Lake Store da usare per questa esercitazione.
  3. Selezionare Esplora dati nella barra dei comandi.
  4. Viene selezionata la cartella radice dell'istanza di Data Lake Store. Selezionare Accesso nella barra dei comandi.
  5. Seleziona Aggiungi. Nel campo Seleziona immettere il nome della VM, ad esempio DevTestVM. Selezionare questa macchina virtuale nei risultati della ricerca e quindi selezionare Seleziona.
  6. Selezionare Seleziona autorizzazioni. Selezionare Lettura ed Esecuzione, aggiungere a Questa cartella e aggiungere come An access permission only (Solo autorizzazione di accesso). Selezionare OK. L'autorizzazione verrà aggiunta correttamente.
  7. Chiudere il pannello Accesso.
  8. Per questa esercitazione creare una nuova cartella. Selezionare Nuova cartella nella barra dei comandi e assegnare alla nuova cartella un nome, ad esempio TestFolder. Selezionare OK.
  9. Selezionare la cartella creata, quindi selezionare Accesso nella barra dei comandi.
  10. Analogamente al passaggio 5, selezionare Aggiungi, nel campo Seleziona immettere il nome della macchina virtuale e selezionarlo e selezionare Seleziona.
  11. Analogamente al passaggio 6, selezionare Seleziona autorizzazioni, selezionare Lettura, Scrittura ed Esecuzione, aggiungere a Questa cartella e aggiungere come voce di autorizzazione di accesso e una voce di autorizzazione predefinita. Selezionare OK. L'autorizzazione verrà aggiunta correttamente.

L'identità gestita assegnata dal sistema della macchina virtuale può ora eseguire tutte le operazioni sui file nella cartella creata. Per altre informazioni sulla gestione dell'accesso a Data Lake Store, vedere Controllo di accesso in Data Lake Store.

Accedere ai dati

Azure Data Lake Store supporta in modo nativo l'autenticazione di Microsoft Entra, in modo che possa accettare direttamente i token di accesso ottenuti usando le identità gestite per le risorse di Azure. Per eseguire l'autenticazione nel file system di Data Lake Store, inviare un token di accesso rilasciato da Microsoft Entra ID all'endpoint del file system di Data Lake Store in un'intestazione di autorizzazione. L'intestazione ha il formato "Bearer <ACCESS_TOKEN_VALUE>". Per altre informazioni sul supporto di Data Lake Store per l'autenticazione di Microsoft Entra, vedere Autenticazione con Data Lake Store con Microsoft Entra ID

Nota

Gli SDK client del file system di Data Lake Store non supportano ancora le identità gestite per le risorse di Azure. Questa esercitazione verrà aggiornata quando verrà aggiunto il supporto all'SDK.

In questa esercitazione si esegue l'autenticazione all'API REST del file system di Data Lake Store usando PowerShell per creare richieste REST. Per usare l'identità gestita assegnata dal sistema della macchina virtuale per l'autenticazione, è necessario eseguire le richieste dalla macchina virtuale.

  1. Nel portale passare a Macchine virtuali, passare alla macchina virtuale Windows e nella panoramica selezionare Connessione.

  2. In Nome utente e Password immettere i valori specificati al momento della creazione della macchina virtuale Windows.

  3. Dopo aver creato un Connessione Desktop remoto con la macchina virtuale, aprire PowerShell nella sessione remota.

  4. Usando Invoke-WebRequest di PowerShell, eseguire una richiesta all'endpoint locale delle identità gestite per le risorse di Azure per ottenere un token di accesso per Azure Data Lake Store. L'identificatore della risorsa per Data Lake Store è https://datalake.azure.net/. La barra finale è importante perché Data Lake stabilisce una corrispondenza esatta con l'identificatore della risorsa.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Convertire la risposta da un oggetto JSON a un oggetto di PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Estrarre il token di accesso dalla risposta.

    $AccessToken = $content.access_token
    
  5. Verificare che tutto sia configurato correttamente. Usando `Invoke-WebRequest' di PowerShell, creare una richiesta all'endpoint REST di Data Lake Store per elencare le cartelle nella cartella radice. È importante che la stringa "Bearer" nell'intestazione Authorization abbia un maiuscolo "B". È possibile trovare il nome dell'archivio Data Lake nella sezione Panoramica di Data Lake Store.

    Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -Headers @{Authorization="Bearer $AccessToken"}
    

    Una risposta con esito positivo ha un aspetto simile al seguente:

    StatusCode        : 200
    StatusDescription : OK
    Content           : {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY", "blockSize":0,"accessTime":1507934941392, "modificationTime":1507944835699,"replication":0, "permission":"770","ow..."
    RawContent        : HTTP/1.1 200 OK
                        Pragma: no-cache
                        x-ms-request-id: b4b31e16-e968-46a1-879a-3474aa7d4528
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict-Transport-Security: ma...
    Forms             : {}
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b4b31e16-e968-46a1-879a-3474aa7d4528],
                        [x-ms-webhdfs-version, 17.04.22.00], [Status, 0x0]...}
    Images            : {}
    InputFields       : {}
    Links             : {}
    ParsedHtml        : System.__ComObject
    RawContentLength  : 556
    
  6. È ora possibile provare a caricare un file nell'istanza di Data Lake Store. Creare prima di tutto un file da caricare.

    echo "Test file." > Test1.txt
    
  7. Usando Invoke-WebRequest di PowerShell, creare una richiesta all'endpoint REST dell'istanza di Data Lake Store per caricare il file nella cartella creata prima. Questa richiesta prevede due passaggi. Nel primo passaggio si crea una richiesta e si ottiene un reindirizzamento alla posizione in cui deve essere caricato il file. Nel secondo passaggio si carica effettivamente il file. Ricordare di impostare il nome della cartella e del file in modo appropriato se sono stati usati valori diversi da quelli di questa esercitazione.

    $HdfsRedirectResponse = Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Se si esamina il valore di $HdfsRedirectResponse, dovrebbe essere simile alla risposta seguente:

    PS C:\> $HdfsRedirectResponse
    
    StatusCode        : 307
    StatusDescription : Temporary Redirect
    Content           : {}
    RawContent        : HTTP/1.1 307 Temporary Redirect
                        Pragma: no-cache
                        x-ms-request-id: b7ab492f-b514-4483-aada-4aa0611d12b3
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosn...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b7ab492f-b514-4483-aada-4aa0611d12b3], 
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

    Completare il caricamento inviando una richiesta all'endpoint di reindirizzamento:

    Invoke-WebRequest -Uri $HdfsRedirectResponse.Headers.Location -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Una risposta con esito positivo ha un aspetto simile al seguente:

    StatusCode        : 201
    StatusDescription : Created
    Content           : {}
    RawContent        : HTTP/1.1 201 Created
                        Pragma: no-cache
                        x-ms-request-id: 1e70f36f-ead1-4566-acfa-d0c3ec1e2307
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, 1e70f36f-ead1-4566-acfa-d0c3ec1e2307],
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

Usando altre API del file system di Data Lake Store, è possibile accodare ai file, scaricare i file ed eseguire altre operazioni.

Disabilita

Per disabilitare l'identità assegnata dal sistema nella VM, impostare il relativo stato su Disattivato.

Screenshot shows the System assigned tab for a virtual machine where you can turn off the System assigned status.

Passaggi successivi

In questa esercitazione si è appreso come usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere a un'istanza di Azure Data Lake Store. Per altre informazioni su Azure Data Lake Store, vedere: