Esercitazione: Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Archiviazione 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.

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

Nota

L'autenticazione di Microsoft Entra per Archiviazione di Azure è disponibile in anteprima pubblica.

Prerequisiti

  • Se non si ha familiarità con la funzionalità delle identità gestite per le risorse di Azure, vedere questa panoramica.
  • Se non si ha un account Azure, registrarsi per ottenere un account gratuito prima di continuare.
  • Per eseguire le attività richieste di creazione delle risorse e gestione dei ruoli, l'account deve disporre delle autorizzazioni "Proprietario" nell'ambito appropriato (sottoscrizione o gruppo di risorse). Se è necessaria assistenza per l'assegnazione di ruolo, vedere Assegnare i ruoli di Azure per gestire l'accesso alle risorse della sottoscrizione 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 l'identità assegnata dal sistema abilitata

Concedi accesso

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 della portale di Azure.

  2. Selezionare Archiviazione, quindi Archiviazione account - BLOB, file, tabella, coda.

  3. In Nome, immettere il nome dell'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. In Servizio BLOB selezionare Contenitori.

  3. Selezionare + Contenitore nella parte superiore della pagina.

  4. In Nuovo contenitore, immettere il nome del contenitore e in 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 (senza virgolette) "Hello world! :)"e quindi salvare il file.

  6. Per caricare un file nel nuovo contenitore creato, fare clic sul nome del contenitore, quindi fare clic su Carica

  7. Nel riquadro Carica BLOB, in File selezionare l'icona della cartella e passare al file hello_world.txt nel computer locale, selezionare il file e quindi selezionare 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.

Passaggi successivi

In questa esercitazione si è appreso come abilitare un'identità assegnata dal sistema di una macchina virtuale Windows per accedere ad Archiviazione di Azure. Per altre informazioni sulle Archiviazione di Azure, vedere: