Esercitazione: Usare una macchina virtuale/set di scalabilità di macchine virtuali Windows per accedere alle risorse di Azure

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.

Prerequisiti

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

Questa esercitazione illustra come usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad 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 si apprenderà 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

Abilitare

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 che mostra la scheda Assegnata dal sistema per una macchina virtuale in cui è possibile attivare lo stato Assegnata dal sistema.

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

  1. Accedere al portale di Azure.

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

Concedi accesso

È possibile concedere alla macchina virtuale l'accesso a file e cartelle in azure Data Lake Store. Per questo passaggio, è possibile usare un'istanza di Data Lake Store esistente o crearne una nuova.

Per creare un nuovo Archivio Data Lake usando il portale di Azure, vedere Avvio rapido di 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. Selezionare Aggiungi. Nel campo Seleziona immettere il nome della VM, ad esempio DevTestVM. Selezionare la macchina virtuale nei risultati della ricerca e quindi selezionare Seleziona.
  6. Selezionare Seleziona autorizzazioni, quindi Lettura ed esecuzione. Aggiungi a Questa cartella, quindi seleziona Solo un'autorizzazione di accesso.
  7. Selezionare OK, quindi chiudere il pannello Accesso . L'autorizzazione verrà aggiunta correttamente.
  8. Creare quindi una nuova cartella. Selezionare Nuova cartella nella barra dei comandi e assegnare un nome alla nuova cartella. Ad esempio, TestFolder, quindi selezionare OK.
  9. Selezionare la cartella creata, quindi selezionare Accesso nella barra dei comandi.
  10. Selezionare Aggiungi, quindi nel campo Seleziona immettere il nome della macchina virtuale e selezionare Seleziona.
  11. Selezionare Seleziona autorizzazioni, quindi Lettura, Scrittura ed Esecuzione. Aggiungere a Questa cartella, quindi aggiungere come voce di autorizzazione di accesso e una voce di autorizzazione predefinita.
  12. Selezionare OK. L'autorizzazione deve essere aggiunta correttamente.

L'identità gestita assegnata dal sistema della macchina virtuale può ora eseguire tutte le operazioni sui file nella cartella creata. Per 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.

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. Quindi, in Panoramica selezionare Connetti.

  2. Immettere il nome utente e la password aggiunti al momento della creazione della macchina virtuale Windows.

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

  4. Usando il cmdlet di PowerShell Invoke-WebRequest , effettuare una richiesta all'endpoint delle identità gestite locali 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/. Data Lake esegue una corrispondenza esatta sull'identificatore di risorsa, quindi la barra finale è importante.

    $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 il cmdlet di PowerShell Invoke-WebRequest , effettuare 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. Provare ora a caricare un file in Data Lake Store. Creare prima di tutto un file da caricare.

    echo "Test file." > Test1.txt
    
  7. Usando il cmdlet di PowerShell Invoke-WebRequest , inviare una richiesta all'endpoint REST di Data Lake Store per caricare il file nella cartella creata in precedenza. Questa richiesta prevede due passaggi.

    1. Effettuare una richiesta e ottenere un reindirizzamento alla posizione in cui deve essere caricato il file.
    2. Carica il file . Ricordarsi di impostare il nome della cartella e del file in modo appropriato se sono stati usati valori diversi rispetto a quelli indicati in 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
    

Infine, è possibile usare altre API del file system di Data Lake Store per aggiungere e scaricare file e altro ancora.

Disabilita

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

Screenshot che mostra la scheda Assegnata dal sistema per una macchina virtuale in cui è possibile disattivare lo stato Assegnata dal sistema.

Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Archiviazione di Azure

Questa esercitazione illustra come usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Archiviazione di Azure. Scopri come:

  • Creare un contenitore BLOB nell'account di archiviazione
  • Concedere l'accesso a un account di archiviazione all'identità gestita assegnata dal sistema della macchina virtuale Windows
  • Ottenere un accesso e usarlo per chiamare l'archiviazione di Azure

Abilitare

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 che mostra la scheda Assegnata dal sistema per una macchina virtuale in cui è possibile attivare lo stato Assegnata dal sistema.

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

  1. Accedere al portale di Azure.

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

Creare un account di archiviazione

In questa sezione, si crea un account di archiviazione.

  1. Selezionare il pulsante + Crea una risorsa nell'angolo superiore sinistro del portale di Azure.

  2. Selezionare Archiviazione, quindi Account di archiviazione - BLOB, file, tabella, coda.

  3. Nel campo Nome immettere un nome per l'account di archiviazione.

  4. Modello di distribuzione e Tipologia account devono essere impostati su Gestione di risorse e Archiviazione (utilizzo generico v1).

  5. Verificare che le impostazioni in Sottoscrizione e Gruppo di risorse corrispondano a quelle specificate al momento della creazione della macchina virtuale nel passaggio precedente.

  6. Seleziona Crea.

    Screenshot che mostra come creare un nuovo account di archiviazione.

Creare un contenitore BLOB e caricare un file nell'account di archiviazione

Poiché i file richiedono l'archiviazione BLOB, è necessario creare un contenitore BLOB in cui archiviare il file. Nel contenitore BLOB caricare un file con il nuovo account di archiviazione.

  1. Tornare all'account di archiviazione appena creato.

  2. Nella sezione Servizio BLOB selezionare Contenitori.

  3. Selezionare + Contenitore nella parte superiore della pagina.

  4. Nel campo Nuovo contenitore immettere un nome per il contenitore, quindi nell'opzione Livello di accesso pubblico mantenere il valore predefinito.

    Screenshot che mostra come creare un contenitore di archiviazione.

  5. Utilizzando un editor di propria scelta, creare un file denominato hello world.txt nel computer locale. Aprire il file e aggiungere il testo Hello world!, quindi salvarlo.

  6. Selezionare il nome del contenitore per caricare il file nel contenitore appena creato e quindi selezionare Carica.

  7. Nella sezione File del riquadro Carica BLOB selezionare l'icona della cartella e passare al file hello_world.txt nel computer locale. Selezionare quindi il file e Carica. Screenshot che mostra la schermata di caricamento del file di testo.

Concedi accesso

Questa sezione illustra come concedere alla macchina virtuale l'accesso a un contenitore di Archiviazione di Azure. È possibile usare l'identità gestita assegnata dal sistema della macchina virtuale per recuperare i dati nel BLOB di archiviazione di Azure.

  1. Tornare all'account di archiviazione appena creato.

  2. Seleziona Controllo di accesso (IAM).

  3. Selezionare Aggiungi>Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.

  4. Assegnare il ruolo seguente. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

    Impostazione Valore
    Ruolo Lettore dei dati del BLOB di archiviazione
    Assegna accesso a Identità gestita
    Assegnata dal sistema Macchina virtuale
    Seleziona <macchina virtuale>

    Screenshot che mostra la pagina per l'aggiunta di un'assegnazione di ruolo.

Accedere ai dati

Archiviazione di Azure supporta in modo nativo l'autenticazione di Microsoft Entra, in modo che possa accettare direttamente i token di accesso ottenuti usando un'identità gestita. Questo approccio usa l'integrazione di Archiviazione di Azure con Microsoft Entra ID ed è diverso dall'inserimento delle credenziali nel stringa di connessione.

Ecco un esempio di codice .NET per aprire una connessione a Archiviazione di Azure. L'esempio usa un token di accesso e quindi legge il contenuto del file creato in precedenza. Questo codice deve essere eseguito nella macchina virtuale per poter accedere all'endpoint dell'identità gestita della macchina virtuale. Per usare il metodo del token di accesso, è necessario .NET Framework 4.6 o versione successiva. Sostituire il valore di <URI to blob file> di conseguenza. È possibile ottenere questo valore spostandosi sul file creato e caricato in archiviazione BLOB e copiando l'URL in Proprietà nella pagina Panoramica.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Web.Script.Serialization;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace StorageOAuthToken
{
    class Program
    {
        static void Main(string[] args)
        {
            //get token
            string accessToken = GetMSIToken("https://storage.azure.com/");

            //create token credential
            TokenCredential tokenCredential = new TokenCredential(accessToken);

            //create storage credentials
            StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);

            Uri blobAddress = new Uri("<URI to blob file>");

            //create block blob using storage credentials
            CloudBlockBlob blob = new CloudBlockBlob(blobAddress, storageCredentials);

            //retrieve blob contents
            Console.WriteLine(blob.DownloadText());
            Console.ReadLine();
        }

        static string GetMSIToken(string resourceID)
        {
            string accessToken = string.Empty;
            // Build request to acquire MSI token
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" + resourceID);
            request.Headers["Metadata"] = "true";
            request.Method = "GET";

            try
            {
                // Call /token endpoint
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Pipe response Stream to a StreamReader, and extract access token
                StreamReader streamResponse = new StreamReader(response.GetResponseStream());
                string stringResponse = streamResponse.ReadToEnd();
                JavaScriptSerializer j = new JavaScriptSerializer();
                Dictionary<string, string> list = (Dictionary<string, string>)j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
                accessToken = list["access_token"];
                return accessToken;
            }
            catch (Exception e)
            {
                string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
                return accessToken;
            }
        }
    }
}

La risposta contiene il contenuto del file:

Hello world! :)

Disabilita

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

Screenshot che mostra la scheda Assegnata dal sistema per una macchina virtuale in cui è possibile disattivare lo stato Assegnata dal sistema.

Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Archiviazione di Azure tramite credenziali di firma di accesso condiviso

Questa esercitazione illustra come usare un'identità assegnata dal sistema per una macchina virtuale Windows per ottenere credenziali di firma di accesso condiviso (SAS) di archiviazione.

Una firma di accesso condiviso del servizio consente di concedere l'accesso limitato agli oggetti in un account di archiviazione per un periodo di tempo limitato e per un servizio specifico (in questo caso, un servizio BLOB). La firma di accesso condiviso esegue questa operazione senza esporre una chiave di accesso dell'account. È possibile usare le credenziali di firma di accesso condiviso come di consueto per le operazioni di archiviazione; ad esempio quando si usa un SDK di archiviazione. Questa esercitazione illustra il caricamento e il download di un BLOB usando Archiviazione di Azure PowerShell.

Si apprenderà come:

  • Creare un account di archiviazione
  • Concedere alla macchina virtuale l'accesso alla firma di accesso condiviso dell'account di archiviazione in Resource Manager
  • Ottenere un token di accesso tramite l'identità della macchina virtuale e usarlo per recuperare la firma di accesso condiviso da Resource Manager

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Creare un account di archiviazione

Se non è già disponibile, è necessario creare un account di archiviazione. In caso contrario, seguire questa procedura per concedere all'identità gestita assegnata dal sistema della macchina virtuale l'accesso alle credenziali di firma di accesso condiviso di un account di archiviazione esistente.

  1. Selezionare Archiviazione e quindi Account di archiviazione.

  2. Nel pannello Crea account di archiviazione immettere un nome per l'account di archiviazione.

  3. Assicurarsi che il modello di distribuzione e il tipo di account siano impostati su Resource Manager e Utilizzo generico.

  4. Verificare che la sottoscrizione e il gruppo di risorse corrispondano agli elementi specificati al momento della creazione della macchina virtuale nel passaggio precedente.

  5. Selezionare Crea per creare l'account di archiviazione.

    Screenshot che mostra come creare un nuovo account di archiviazione.

Creare un contenitore BLOB nell'account di archiviazione

Più avanti nell'esercitazione si caricherà e si scarierà un file nel nuovo account di archiviazione. Poiché i file richiedono l'archiviazione BLOB, è necessario creare un contenitore BLOB in cui archiviare il file.

  1. Tornare all'account di archiviazione appena creato.

  2. Selezionare il collegamento Contenitori nel pannello sinistro, in Servizio BLOB.

  3. Selezionare + Contenitore nella parte superiore della pagina, quindi verrà visualizzato un pannello Nuovo contenitore .

  4. Assegnare un nome al contenitore, determinare il livello di accesso e quindi selezionare OK. Il nome specificato qui viene usato più avanti nell'esercitazione.

    Screenshot che mostra come creare un contenitore di archiviazione.

Concedere l'accesso per l'uso di una firma di accesso condiviso di archiviazione all'identità gestita assegnata dal sistema della macchina virtuale

Archiviazione di Azure non supporta l'autenticazione di Microsoft Entra in modo nativo. È tuttavia possibile usare un'identità gestita per recuperare una firma di accesso condiviso di archiviazione da Gestione risorse e quindi usarla per accedere alle risorse di archiviazione. In questo passaggio si concede l'accesso alla firma di accesso condiviso dell'account di archiviazione all'identità gestita assegnata dal sistema della macchina virtuale.

  1. Tornare all'account di archiviazione appena creato.

  2. Seleziona Controllo di accesso (IAM).

  3. Selezionare Aggiungi>Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.

  4. Assegnare il ruolo seguente. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

    Impostazione Valore
    Ruolo Collaboratore dell'account di archiviazione
    Assegna accesso a Identità gestita
    Assegnata dal sistema Macchina virtuale
    Seleziona <macchina virtuale Windows>

    Screenshot che mostra la pagina per l'aggiunta di un'assegnazione di ruolo.

Ottenere un token di accesso usando l'identità della macchina virtuale e usarlo per chiamare Azure Resource Manager

Per la parte restante di questa esercitazione, si lavora dalla macchina virtuale. In questa parte è necessario usare i cmdlet di PowerShell di Azure Resource Manager. Se PowerShell non è installato, scaricare la versione più recente prima di continuare.

  1. Nella portale di Azure passare a Macchine virtuali, passare alla macchina virtuale Windows e quindi nella pagina Panoramica Selezionare Connetti nella parte superiore.

  2. Immettere il nome utente e la password aggiunti al momento della creazione della macchina virtuale Windows.

  3. Stabilire una connessione Desktop remoto con la macchina virtuale.

  4. Aprire PowerShell nella sessione remota, quindi usare il cmdlet di PowerShell Invoke-WebRequest per ottenere un token di Azure Resource Manager dall'identità gestita locale per l'endpoint delle risorse di Azure.

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

    Nota

    Il valore del resource parametro deve essere una corrispondenza esatta per ciò che è previsto dall'ID Microsoft Entra. Quando si usa l'ID risorsa di Azure Resource Manager, è necessario includere la barra finale nell'URI.

    Estrarre quindi l'elemento content archiviato come stringa in formato JSON (JavaScript Object Notation) nell'oggetto $response .

    $content = $response.Content | ConvertFrom-Json
    

    Estrarre poi il token di accesso dalla risposta.

    $ArmToken = $content.access_token
    

Ottenere credenziali di firma di accesso condiviso da Azure Resource Manager per eseguire chiamate al servizio di archiviazione

Infine, usare PowerShell per chiamare Resource Manager usando il token di accesso recuperato nella sezione precedente. Questo token viene usato per creare credenziali di firma di accesso condiviso di archiviazione. Dopo aver ottenuto le credenziali di firma di accesso condiviso, è possibile chiamare altre operazioni di archiviazione.

Per questa richiesta, usare i parametri di richiesta HTTP seguenti per creare le credenziali di firma di accesso condiviso:

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite. Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

I parametri qui sono inclusi nel corpo POST della richiesta per le credenziali di firma di accesso condiviso. Per altre informazioni sui parametri per la creazione di una credenziale di firma di accesso condiviso, vedere le informazioni di riferimento sull'elenco rest della firma di accesso condiviso del servizio.For more information on parameters for creating a SAS credential, see the List Service SAS REST reference.

  1. Convertire i parametri in JSON, quindi chiamare l'endpoint di archiviazione per creare le credenziali di firma di accesso listServiceSas condiviso:

    $params = @{canonicalizedResource="/blob/<STORAGE-ACCOUNT-NAME>/<CONTAINER-NAME>";signedResource="c";signedPermission="rcw";signedProtocol="https";signedExpiry="2017-09-23T00:00:00Z"}
    $jsonParams = $params | ConvertTo-Json
    
    $sasResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>/listServiceSas/?api-version=2017-06-01 -Method POST -Body $jsonParams -Headers @{Authorization="Bearer $ArmToken"}
    

    Nota

    L'URL fa distinzione tra maiuscole e minuscole, quindi assicurarsi di usare lo stesso caso usato quando è stato denominato il gruppo di risorse, incluso il carattere maiuscolo "G" in resourceGroups.

  2. Estrarre quindi le credenziali di firma di accesso condiviso dalla risposta:

    $sasContent = $sasResponse.Content | ConvertFrom-Json
    $sasCred = $sasContent.serviceSasToken
    
  3. Se si esaminano le credenziali di firma di accesso condiviso, verrà visualizzato un aspetto simile al seguente:

    PS C:\> $sasCred
    sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D
    
  4. Creare un file denominato test.txt. Usare quindi le credenziali di firma di accesso condiviso per eseguire l'autenticazione con il New-AzStorageContent cmdlet , caricare il file nel contenitore BLOB e quindi scaricare il file.

    echo "This is a test text file." > test.txt
    
  5. Assicurarsi di installare prima i cmdlet di Archiviazione di Azure tramite Install-Module Azure.Storage. Caricare quindi il BLOB appena creato usando il cmdlet di PowerShell Set-AzStorageBlobContent :

    $ctx = New-AzStorageContext -StorageAccountName <STORAGE-ACCOUNT-NAME> -SasToken $sasCred
    Set-AzStorageBlobContent -File test.txt -Container <CONTAINER-NAME> -Blob testblob -Context $ctx
    

    Risposta:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    
  6. È anche possibile scaricare il BLOB caricato usando il Get-AzStorageBlobContent cmdlet di PowerShell:

    Get-AzStorageBlobContent -Blob testblob -Container <CONTAINER-NAME> -Destination test2.txt -Context $ctx
    

    Risposta:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    

Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere a database SQL di Azure

Questa esercitazione illustra come usare un'identità assegnata dal sistema per una macchina virtuale Windows per accedere al database SQL di Azure. Le identità del servizio gestito vengono gestite automaticamente da Azure e consentono di eseguire l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra, senza dover inserire le credenziali nel codice.

Si apprenderà come:

  • Concedere l'accesso della macchina virtuale al database SQL di Azure
  • Abilitare l'autenticazione di Microsoft Entra
  • Creare un utente indipendente nel database che rappresenta l'identità assegnata dal sistema della macchina virtuale
  • Ottenere un token di accesso usando l'identità della macchina virtuale e usarlo per eseguire query sul database SQL di Azure

Abilitare

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 che mostra la scheda Assegnata dal sistema per una macchina virtuale in cui è possibile attivare lo stato Assegnata dal sistema.

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

  1. Accedere al portale di Azure.

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

Concedi accesso

Per concedere alla macchina virtuale l'accesso a un database in database SQL di Azure, usare un server SQL logico esistente o crearne uno nuovo. Per creare un nuovo server e un nuovo database usando il portale di Azure, seguire la guida introduttiva di Azure SQL. Nella documentazione di SQL di Azure sono disponibili anche guide rapide che usano l'interfaccia della riga di comando di Azure e Azure PowerShell.

Seguire questa procedura per concedere alla macchina virtuale l'accesso a un database:

  1. Abilitare l'autenticazione Di Microsoft Entra per il server.
  2. Creare un utente indipendente nel database che rappresenta l'identità assegnata dal sistema della macchina virtuale.

Abilitare l'autenticazione di Microsoft Entra

Per configurare l'autenticazione di Microsoft Entra:

  1. Nella portale di Azure selezionare SQL Server nel riquadro di spostamento a sinistra.
  2. Selezionare il server SQL che si vuole abilitare per l'autenticazione di Microsoft Entra.
  3. Nella sezione Impostazioni del pannello selezionare Amministratore di Active Directory.
  4. Sulla barra dei comandi selezionare Imposta amministratore.
  5. Selezionare un account utente Di Microsoft Entra da impostare come amministratore per il server e selezionare Seleziona.
  6. Sulla barra dei comandi selezionare Salva.

Creare un utente indipendente

Questa sezione illustra come creare un utente indipendente nel database che rappresenta l'identità assegnata dal sistema della macchina virtuale. Per questo passaggio è necessario installare Microsoft SQL Server Management Studio (SSMS). Prima di iniziare, può essere utile esaminare gli articoli seguenti per informazioni generali sull'integrazione di Microsoft Entra:

I database SQL richiedono nomi visualizzati univoci di Microsoft Entra ID. Con questo, gli account Microsoft Entra, ad esempio utenti, gruppi e entità servizio (applicazioni) e i nomi delle macchine virtuali abilitati per l'identità gestita devono essere definiti in modo univoco in Microsoft Entra ID specifico per i nomi visualizzati corrispondenti. SQL controlla i nomi visualizzati di Microsoft Entra ID durante la creazione T-SQL di tali utenti. Se i nomi visualizzati non sono univoci, il comando non riesce e chiede di specificare un nome visualizzato univoco dell'ID Entra di Microsoft per ogni account specificato.

Per creare un utente indipendente

  1. Aprire SQL Server Management Studio.

  2. Nella finestra di dialogo Connetti al server immettere il nome del server nel campo Nome server.

  3. Nel campo Autenticazione selezionare Active Directory - Universale con supporto MFA.

  4. Nel campo Nome utente immettere il nome dell'account Microsoft Entra impostato come amministratore del server, cjensen@fabrikam.comad esempio .

  5. Selezionare Opzioni.

  6. Nel campo Connetti a database immettere il nome del database esterno al sistema che si desidera configurare.

  7. Selezionare Connetti, quindi completare il processo di accesso.

  8. In Esplora oggetti espandere la cartella Database.

  9. Fare clic con il pulsante destro del mouse su un database utente e quindi scegliere Nuova query.

  10. Nella finestra della query immettere la riga seguente e selezionare Esegui sulla barra degli strumenti:

    Nota

    VMName nel comando seguente è il nome della macchina virtuale su cui è stata abilitata l'identità assegnata dal sistema nella sezione Prerequisiti.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    Il comando deve essere completato correttamente creando l'utente indipendente per l'identità assegnata dal sistema della macchina virtuale.

  11. Deselezionare la finestra della query, immettere la riga seguente e selezionare Esegui sulla barra degli strumenti:

    Nota

    VMName nel comando seguente è il nome della macchina virtuale in cui è stata abilitata l'identità assegnata dal sistema nella sezione prerequisiti.

    Se viene visualizzato l'errore "Principal VMName ha un nome visualizzato duplicato", aggiungere l'istruzione CREATE USER con WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    Il comando deve essere completato correttamente concedendo all'utente indipendente la possibilità di leggere l'intero database.

Il codice in esecuzione nella macchina virtuale può ora ottenere un token tramite l'identità gestita assegnata dal sistema e usarlo per l'autenticazione al server.

Accedere ai dati

Questa sezione illustra come ottenere un token di accesso usando l'identità gestita assegnata dal sistema della macchina virtuale e usarla per chiamare Azure SQL. SQL di Azure 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. Questo metodo non richiede l'inserimento delle credenziali nel stringa di connessione.

Di seguito è riportato un esempio di codice .NET per aprire una connessione a SQL usando l'autenticazione dell'identità gestita di Active Directory. Questo codice deve essere eseguito nella macchina virtuale per poter accedere all'endpoint dell'identità gestita assegnata dal sistema della macchina virtuale.

Per usare questo metodo è necessario .NET Framework 4.6.2 o versione successiva o successiva o .NET Core 3.1 . Sostituire i valori di AZURE-SQL-SERVERNAME e DATABASE di conseguenza e aggiungere un riferimento NuGet alla libreria Microsoft.Data.SqlClient.

using Microsoft.Data.SqlClient;

try
{
//
// Open a connection to the server using Active Directory Managed Identity authentication.
//
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>; Authentication=Active Directory Managed Identity; Encrypt=True";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

Nota

È possibile usare le identità gestite mentre si usano altre opzioni di programmazione usando gli SDK.

In alternativa, usare PowerShell per testare la configurazione end-to-end senza dover scrivere e distribuire un'app nella macchina virtuale.

  1. Nel portale passare a Macchine virtuali, passare alla macchina virtuale Windows e quindi in Panoramica selezionare Connetti.

  2. Immettere le credenziali di amministratore della macchina virtuale aggiunte al momento della creazione della macchina virtuale Windows.

  3. Dopo aver creato una connessione Desktop remoto con la macchina virtuale, aprire PowerShell in una sessione remota.

  4. Usando il cmdlet di PowerShell Invoke-WebRequest , effettuare una richiesta all'endpoint dell'identità gestita locale per ottenere un token di accesso per Azure SQL.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.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. Aprire una connessione al server. Ricordarsi di sostituire i valori di AZURE-SQL-SERVERNAME e DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>; Encrypt=True;"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

    Successivamente, creare e inviare una query al server. Ricordarsi di sostituire il valore per TABELLA.

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Esaminare infine il valore di $DataSet.Tables[0] per visualizzare i risultati della query.

Disabilita

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

Screenshot che mostra la scheda Assegnata dal sistema per una macchina virtuale in cui è possibile disattivare lo stato Assegnata dal sistema.

Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Azure Key Vault

Questa esercitazione mostra come usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Azure Key Vault. Key Vault consente all'applicazione client di usare un segreto per accedere alle risorse non protette da Microsoft Entra ID. Le identità gestite vengono gestite automaticamente da Azure. Consentono di eseguire l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra, senza includere le informazioni di autenticazione nel codice.

Si apprenderà come:

  • Concedere alla macchina virtuale l'accesso a un segreto archiviato in un insieme di credenziali delle chiavi
  • Ottenere un token di accesso usando l'identità  della macchina virtuale e usarlo per recuperare il segreto dall'insieme di credenziali delle chiavi

Creare un insieme di credenziali delle chiavi

Suggerimento

I passaggi descritti in questo articolo possono variare leggermente in base al portale da cui si inizia.

Questa sezione illustra come concedere alla macchina virtuale l'accesso a un segreto archiviato in un insieme di credenziali delle chiavi. Quando si usano identità gestite per le risorse di Azure, il codice può ottenere i token di accesso per l'autenticazione alle risorse che supportano l'autenticazione di Microsoft Entra. 

Tuttavia, non tutti i servizi di Azure supportano l'autenticazione di Microsoft Entra. Per usare le identità gestite per le risorse di Azure con questi servizi, archiviare le credenziali del servizio in Azure Key Vault e usare l'identità gestita della macchina virtuale per accedere a Key Vault e recuperare le credenziali.

Prima di tutto, è necessario creare un insieme di credenziali delle chiavi e concedere all'identità gestita assegnata dal sistema della macchina virtuale l'accesso all'insieme di credenziali delle chiavi.

  1. Accedere al portale di Azure.

  2. Nella parte superiore della barra di spostamento a sinistra selezionare Crea una risorsa.

  3. Nella casella Cerca nel Marketplace digitare Key Vault e premere INVIO.

  4. Selezionare Key Vault nei risultati e quindi selezionare Crea.

  5. Specificare un nome per il nuovo insieme di credenziali delle chiavi.

    Screenshot della schermata Crea un insieme di credenziali delle chiavi.

  6. Compilare tutte le informazioni necessarie. Assicurarsi di scegliere la sottoscrizione e il gruppo di risorse usati per questa esercitazione.

  7. Selezionare Rivedi e crea.

  8. Seleziona Crea.

Creare un segreto

Successivamente, è necessario aggiungere un segreto all'insieme di credenziali delle chiavi, in modo da poterlo recuperare in un secondo momento usando il codice in esecuzione nella macchina virtuale. In questa sezione si usa PowerShell, ma gli stessi concetti si applicano a qualsiasi codice eseguito nella macchina virtuale.

  1. Passare all'istanza di Key Vault appena creata.

  2. Selezionare Segreti e quindi Aggiungi.

  3. Seleziona Genera/Importa.

  4. Nella schermata Crea un segreto lasciare selezionata l'opzione Carica manuale.

  5. Specificare un nome e il valore del segreto. È possibile specificare qualsiasi valore. 

  6. Lasciare vuoti i campi della data di attivazione e della data di scadenza e lasciare Abilitato su

  7. Selezionare Crea per creare il segreto.

    Screenshot che mostra come creare un segreto.

Concedi accesso

All'identità gestita usata dalla macchina virtuale deve essere concesso l'accesso per leggere il segreto archiviato dall'insieme di credenziali delle chiavi.

  1. Passare all'istanza di Key Vault appena creata.

  2. Selezionare Criteri di accesso dal menu sul lato sinistro.

  3. Seleziona Aggiungi criteri di accesso.

    Screenshot che mostra la schermata dei criteri di accesso dell'insieme di credenziali delle chiavi.

  4. Nella sezione Aggiungi criteri di accesso, in Configura dal modello (facoltativo) scegliere Gestione segreti dal menu a discesa.

  5. Scegliere Seleziona entità, quindi nel campo di ricerca immettere il nome della macchina virtuale creata in precedenza. 

  6. Selezionare la macchina virtuale nell'elenco dei risultati e quindi scegliere Seleziona.

  7. Selezionare Aggiungi.

  8. Seleziona Salva.

Accedere ai dati

Questa sezione illustra come ottenere un token di accesso usando l'identità della macchina virtuale e usarlo per recuperare il segreto da Key Vault. Se non si dispone di PowerShell 4.3.1 o versione successiva, è necessario scaricare e installare la versione più recente.

Nota

Il metodo di utilizzo di PowerShell per autenticare e recuperare il segreto è preferibile negli scenari in cui le identità gestite sono specificamente necessarie o durante l'incorporamento del processo all'interno del codice di un'applicazione.

Usare prima di tutto l'identità gestita assegnata dal sistema della macchina virtuale per ottenere un token di accesso per l'autenticazione in Key Vault:

  1. Nel portale passare a Macchine virtuali e passare alla macchina virtuale Windows, quindi in Panoramica selezionare Connetti.
  2. Immettere il nome utente e la password aggiunti al momento della creazione della macchina virtuale Windows.
  3. Dopo aver creato una connessione Desktop remoto con la macchina virtuale, aprire PowerShell in una sessione remota.
  4. In PowerShell, richiamare la richiesta Web nel tenant per ottenere il token per l'host locale in una porta specifica della macchina virtuale.

Nota

Se si usa un cloud sovrano, ad esempio GCC-H, usare l'endpoint vault.usgovcloudapi.net anziché nel cmdlet di vault.azure.net PowerShell.

Esempio di richiesta di PowerShell:

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

Nota

Quando si lavora con cloud sovrani, è necessario apportare modifiche all'endpoint specificato alla fine del cmdlet.

Ad esempio, vault.usgovcloudapi.net deve essere usato quando si lavora con Azure per enti pubblici Cloud, con questo risultato finale:

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

Per verificare che il suffisso corrisponda all'ambiente in uso, vedere l'articolo Panoramica della sicurezza di Azure Key Vault.

La risposta dovrebbe essere simile alla seguente:

Screenshot che mostra una richiesta con la risposta del token.

Estrarre poi il token di accesso dalla risposta.

   $KeyVaultToken = $Response.access_token

Infine, usare il cmdlet di PowerShell Invoke-WebRequest per recuperare il segreto creato in precedenza nell'insieme di credenziali delle chiavi, passando il token di accesso nell'intestazione authorization. È necessario l'URL dell'insieme di credenziali delle chiavi che si trova nella sezione Informazioni di base della pagina Panoramica dell'insieme di credenziali delle chiavi.

Invoke-RestMethod -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}

La risposta dovrebbe essere simile alla seguente:

  value       id                                                                                    attributes
  -----       --                                                                                    ----------
  'My Secret' https://mi-lab-vault.vault.azure.net/secrets/mi-test/50644e90b13249b584c44b9f712f2e51 @{enabled=True; created=16…

Dopo aver recuperato il segreto dall'insieme di credenziali delle chiavi, è possibile usarlo per eseguire l'autenticazione a un servizio che richiede un nome e una password.

Pulire le risorse

Infine, quando si vogliono pulire le risorse, accedere al portale di Azure, selezionare Gruppi di risorse, quindi individuare e selezionare il gruppo di risorse creato nel processo di questa esercitazione, ad esempio mi-test. Usare quindi il comando Elimina gruppo di risorse.

In alternativa, è anche possibile pulire le risorse usando PowerShell o l'interfaccia della riga di comando.

Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere a Resource Manager

Suggerimento

I passaggi descritti in questo articolo possono variare leggermente in base al portale da cui si inizia.

Questa esercitazione illustra come creare un'identità assegnata dal sistema, assegnarla a una macchina virtuale Windows e quindi usare tale identità per accedere all'API di Azure Resource Manager . Le identità del servizio gestito vengono gestite automaticamente da Azure. Abilitano l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra, senza dover incorporare le credenziali nel codice.

Si apprenderà come:

  • Concedere alla macchina virtuale l'accesso ad Azure Resource Manager.
  • Ottenere un token di accesso usando l'identità gestita assegnata dal sistema della macchina virtuale per accedere a Resource Manager.
  1. Accedere al portale di Azure con l'account amministratore.

  2. Passare alla scheda Gruppi di risorse.

  3. Selezionare il gruppo di risorse a cui si vuole concedere l'accesso all'identità gestita della macchina virtuale.

  4. Nel pannello sinistro selezionare Controllo di accesso (IAM).

  5. Selezionare Aggiungi e quindi Aggiungi assegnazione di ruolo.

  6. Nella scheda Ruolo selezionare Lettore. Questo ruolo consente di visualizzare tutte le risorse, ma non consente di apportare modifiche.

  7. Nella scheda Membri, per l'opzione Assegna accesso a, selezionare Identità gestita, quindi selezionare + Seleziona membri.

  8. Verificare che la sottoscrizione appropriata sia elencata nell'elenco a discesa Sottoscrizione . Per Gruppo di risorse selezionare Tutti i gruppi di risorse.

  9. Per l'elenco a discesa Gestisci identità selezionare Macchina virtuale.

  10. Per Seleziona scegliere la macchina virtuale nell'elenco a discesa e quindi selezionare Salva.

    Screenshot che mostra l'aggiunta del ruolo lettore all'identità gestita.

Ottenere un token di accesso

Usare l'identità gestita assegnata dal sistema della macchina virtuale e chiamare Resource Manager per ottenere un token di accesso.

Per completare questi passaggi, è necessario disporre di un client SSH. Se si usa Windows, è possibile usare il client SSH nel sottosistema Windows per Linux. Per richiedere assistenza nella configurazione delle chiavi del client SSH, vedere Come usare le chiavi SSH con Windows in Azure o Come creare e usare una coppia di chiavi SSH pubblica e privata per le macchine virtuali Linux in Azure.

  1. Nel portale passare alla macchina virtuale Linux e in Panoramica selezionare Connetti.
  2. Connettersi alla macchina virtuale usando un client SSH di propria scelta.
  3. Nella finestra del terminale, usando curl, effettuare una richiesta alle identità gestite locali per l'endpoint delle risorse di Azure per ottenere un token di accesso per Azure Resource Manager.   La richiesta curl per il token di accesso è mostrata di seguito.
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

Nota

Il valore del resource parametro deve essere una corrispondenza esatta per ciò che è previsto dall'ID Microsoft Entra. Nel caso dell'ID risorsa di Resource Manager, è necessario includere la barra finale sull'URI.

La risposta include il token di accesso necessario per accedere ad Azure Resource Manager.

Risposta:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

Usare questo token di accesso per accedere ad Azure Resource Manager; Ad esempio, per leggere i dettagli del gruppo di risorse a cui è stato precedentemente concesso l'accesso alla macchina virtuale. Sostituire i valori di <SUBSCRIPTION-ID>, <RESOURCE-GROUP> e <ACCESS-TOKEN> con quelli creato in precedenza.

Nota

L'URL fa distinzione tra maiuscole e minuscole, quindi assicurarsi di usare il case esatto usato in precedenza quando è stato denominato il gruppo di risorse e il carattere "G" maiuscolo in "resourceGroup".

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

Risposta con le informazioni specifiche del gruppo di risorse:

{
"id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
  "provisioningState":"Succeeded"
  }
} 

Usare un'identità gestita assegnata dall'utente in una macchina virtuale Windows per accedere ad Azure Resource Manager

Questa esercitazione illustra come creare un'identità assegnata dall'utente, assegnarla a una macchina virtuale Windows e quindi usare tale identità per accedere all'API di Azure Resource Manager . Le identità del servizio gestito vengono gestite automaticamente da Azure. Abilitano l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra, senza dover incorporare le credenziali nel codice.

Si apprenderà come:

  • Creare un'identità gestita assegnata dall'utente
  • Assegnare l'identità assegnata dall'utente alla macchina virtuale Windows
  • Concedere l'accesso a un gruppo di risorse di Azure Resource Manager all'identità assegnata dall'utente
  • Ottenere un token di accesso tramite l'identità assegnata dall'utente e usarlo per chiamare Azure Resource Manager
  • Leggere le proprietà di un gruppo di risorse

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Configurare Azure PowerShell in locale

Per eseguire script in questo esempio, sono disponibili due opzioni:

  • Usare Azure Cloud Shell, che è possibile aprire usando il pulsante Prova nell'angolo superiore destro dei blocchi di codice.
  • Eseguire gli script in locale con Azure PowerShell, come descritto nella sezione successiva.

Per usare Azure PowerShell in locale per questa esercitazione (anziché usare Cloud Shell), completare la procedura seguente:

  1. Installare la versione più recente di Azure PowerShell, se non è già stato fatto.

  2. Accedere ad Azure:

    Connect-AzAccount
    
  3. Installare la versione più recente di PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Potrebbe essere necessario uscire (Exit) dalla sessione corrente di PowerShell dopo aver eseguito questo comando per il passaggio successivo.

  4. Installare la versione rilasciata del Az.ManagedServiceIdentity modulo. Questa operazione è necessaria per eseguire le operazioni di identità gestite assegnate dall'utente in questa esercitazione:

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

Abilitare

Per gli scenari basati su un'identità assegnata dall'utente, è necessario eseguire i passaggi seguenti in questa sezione:

  1. Creare un'identità.
  2. Assegnare l'identità appena creata.

Creare l'identità

Questa sezione illustra come creare un'identità assegnata dall'utente, creata come risorsa di Azure autonoma. Usando il cmdlet New-AzUserAssignedIdentity , Azure crea un'identità nel tenant di Microsoft Entra che è possibile assegnare a una o più istanze del servizio di Azure.

Importante

Quando si creano identità gestite assegnate dall'utente, il nome deve iniziare con una lettera o un numero e può includere una combinazione di caratteri alfanumerici, trattini (-) e caratteri di sottolineatura (_). Per il corretto funzionamento dell'assegnazione a una macchina virtuale o a un set di scalabilità di macchine virtuali, il nome può essere composto da un massimo di 24 caratteri. Per altre informazioni, vedere Domande frequenti e problemi noti.

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

La risposta contiene i dettagli per l'identità assegnata dall'utente creata, simile all'esempio seguente. Definire i valori e ClientId per l'identità Id assegnata dall'utente, come vengono usati nei passaggi successivi:

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: aaaabbbb-0000-cccc-1111-dddd2222eeee
PrincipalId: aaaaaaaa-bbbb-cccc-1111-222222222222
ClientId: 00001111-aaaa-2222-bbbb-3333cccc4444
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

Assegnare l'identità

Questa sezione illustra come assegnare l'identità assegnata dall'utente a una macchina virtuale Windows. Un'identità assegnata dall'utente può essere usata dai client in più risorse di Azure. Usare i comandi seguenti per assegnare l'identità assegnata dall'utente a una singola macchina virtuale. Usare la proprietà Id restituita nel passaggio precedente per il parametro -IdentityID.

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

Concedi accesso

Questa sezione illustra come concedere all'identità assegnata dall'utente l'accesso a un gruppo di risorse in Azure Resource Manager. Le identità gestite per le risorse di Azure forniscono identità che il codice può usare per richiedere token di accesso per l'autenticazione alle API delle risorse che supportano l'autenticazione di Microsoft Entra. In questa esercitazione il codice accede all'API di Azure Resource Manager.

Prima che il codice possa accedere all'API, è necessario concedere all'identità l'accesso a una risorsa in Azure Resource Manager. In questo caso, si accede al gruppo di risorse per il quale è contenuta la macchina virtuale. Aggiornare il valore per <SUBSCRIPTIONID> in base all'ambiente in uso.

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

La risposta contiene i dettagli per l'assegnazione di ruolo creata, in modo analogo all'esempio seguente:

RoleAssignmentId: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000
Scope: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: 00000000-0000-0000-0000-000000000000
ObjectId: aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ObjectType: ServicePrincipal
CanDelegate: False

Accedere ai dati

Suggerimento

I passaggi descritti in questo articolo possono variare leggermente in base al portale da cui si inizia.

Ottenere un token di accesso

Per il resto dell'esercitazione, si lavora dalla macchina virtuale creata in precedenza.

  1. Accedere al portale di Azure.

  2. Nel portale passare a Macchine virtuali e passare alla macchina virtuale Windows. In Panoramica selezionare Connetti.

  3. Immettere il nome utente e la password usati durante la creazione della macchina virtuale Windows.

  4. Dopo aver creato una connessione Desktop remoto con la macchina virtuale, aprire PowerShell in una sessione remota.

  5. Usando il cmdlet di PowerShell Invoke-WebRequest , effettuare una richiesta all'endpoint delle identità gestite locali per le risorse di Azure per ottenere un token di accesso per Azure Resource Manager. client_id è il valore restituito durante la creazione dell'identità gestita assegnata dall'utente.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

Leggere le proprietà

Infine, usare il token di accesso recuperato nel passaggio precedente per accedere ad Azure Resource Manager, quindi leggere le proprietà del gruppo di risorse a cui è stato concesso l'accesso all'identità assegnata dall'utente. Sostituire <SUBSCRIPTION ID> con l'ID sottoscrizione dell'ambiente.

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

La risposta contiene le informazioni sul gruppo di risorse specifico, in modo analogo all'esempio seguente:

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

Altre informazioni