Esercitazione: Usare una macchina virtuale/set di scalabilità di macchine virtuali Windows per accedere alle risorse di Azure
Identità gestite per le risorse di Azure è 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
- Conoscenza delle identità gestite. Se non si ha familiarità con la funzionalità delle identità gestite per le risorse di Azure, vedere questa panoramica.
- Un account Azure. Iscriversi per riceverne uno gratuito.
- Autorizzazioni di Proprietario nell'ambito appropriato (sottoscrizione o gruppo di risorse) per eseguire le procedure di creazione delle risorse e gestione dei ruoli. Se è necessaria assistenza con l'assegnazione dei ruoli, vedere Assegnare i ruoli di Azure per gestire l'accesso alle risorse della sottoscrizione di Azure.
- Macchina virtuale Windows con identità gestite assegnate dal sistema abilitate.
- Se è necessario creare una macchina virtuale per questa esercitazione, vedere Creare una macchina virtuale con l'identità assegnata dal sistema abilitata.
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.
Per abilitare l'identità gestita assegnata dal sistema in una nuova VM:
Accedere al portale di Azure.
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:
- Nella portale di Azure selezionare Data Lake Store nel riquadro di spostamento a sinistra.
- Selezionare Data Lake Store da usare per questa esercitazione.
- Selezionare Esplora dati nella barra dei comandi.
- Viene selezionata la cartella radice dell'istanza di Data Lake Store. Selezionare Accesso nella barra dei comandi.
- Selezionare Aggiungi. Nel campo Seleziona immettere il nome della VM, ad esempio DevTestVM. Selezionare la macchina virtuale nei risultati della ricerca e quindi selezionare Selezionare.
- Selezionare Seleziona autorizzazioni, quindi Lettura ed esecuzione. Aggiungi a Questa cartella, quindi seleziona Solo un'autorizzazione di accesso.
- Selezionare OK, quindi chiudere il pannello Accesso . L'autorizzazione verrà aggiunta correttamente.
- 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.
- Selezionare la cartella creata, quindi selezionare Accesso nella barra dei comandi.
- Selezionare Aggiungi, quindi nel campo Seleziona immettere il nome della macchina virtuale e selezionare Seleziona.
- 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.
- 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 tramite 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.
Nel portale passare a Macchine virtuali, passare alla macchina virtuale Windows. Quindi, in Panoramica selezionare Connetti.
Immettere il nome utente e la password aggiunti al momento della creazione della macchina virtuale Windows.
Dopo aver creato una connessione Desktop remoto con la macchina virtuale, aprire PowerShell nella sessione remota.
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
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 stringaBearer
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
Provare ora a caricare un file in Data Lake Store. Creare prima di tutto un file da caricare.
echo "Test file." > Test1.txt
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.- Effettuare una richiesta e ottenere un reindirizzamento alla posizione in cui deve essere caricato il file.
- 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.
Disabilitazione
Per disabilitare l'identità assegnata dal sistema nella VM, impostare il relativo stato su Disattivato.
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.
Per abilitare l'identità gestita assegnata dal sistema in una nuova VM:
Accedere al portale di Azure.
Creare una macchina virtuale con identità assegnata dal sistema abilitata.
Creare un account di archiviazione
In questa sezione, si crea un account di archiviazione.
Selezionare il pulsante + Crea una risorsa nell'angolo superiore sinistro del portale di Azure.
Selezionare Archiviazione, quindi Account di archiviazione - BLOB, file, tabella, coda.
Nel campo Nome immettere un nome per l'account di archiviazione.
Modello di distribuzione e Tipologia account devono essere impostati su Gestione di risorse e Archiviazione (utilizzo generico v1).
Verificare che le impostazioni in Sottoscrizione e Gruppo di risorse corrispondano a quelle specificate al momento della creazione della macchina virtuale nel passaggio precedente.
Seleziona Crea.
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.
Tornare all'account di archiviazione appena creato.
Nella sezione Servizio BLOB selezionare Contenitori.
Selezionare + Contenitore nella parte superiore della pagina.
Nel campo Nuovo contenitore immettere un nome per il contenitore, quindi nell'opzione Livello di accesso pubblico mantenere il valore predefinito.
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.
Selezionare il nome del contenitore per caricare il file nel contenitore appena creato e quindi selezionare Carica.
Nel riquadro Carica BLOB, nella sezione File, selezionare l'icona della cartella e passare al file hello_world.txt nel computer locale. Selezionare quindi il file e Carica.
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.
Tornare all'account di archiviazione appena creato.
Seleziona Controllo di accesso (IAM).
Selezionare Aggiungi>Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.
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>
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! :)
Disabilitazione
Per disabilitare l'identità assegnata dal sistema nella VM, impostare il relativo stato su Disattivato.
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.
Selezionare Archiviazione e quindi Account di archiviazione.
Nel pannello Crea account di archiviazione immettere un nome per l'account di archiviazione.
Assicurarsi che il modello di distribuzione e il tipo di account siano impostati su Resource Manager e Utilizzo generico.
Verificare che la sottoscrizione e il gruppo di risorse corrispondano agli elementi specificati al momento della creazione della macchina virtuale nel passaggio precedente.
Selezionare Crea per creare l'account di archiviazione.
Creare un contenitore BLOB nell'account di archiviazione
Più avanti nell'esercitazione si caricherà e si scaricherà un file nel nuovo account di archiviazione. Poiché i file richiedono l'archiviazione BLOB, è necessario creare un contenitore BLOB in cui archiviare il file.
Tornare all'account di archiviazione appena creato.
Selezionare il collegamento Contenitori nel pannello a sinistra, in Servizio BLOB.
Selezionare + Contenitore nella parte superiore della pagina, quindi verrà visualizzato un pannello Nuovo contenitore .
Assegnare un nome al contenitore, determinare il livello di accesso e quindi selezionare OK. Il nome specificato qui viene usato più avanti nell'esercitazione.
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 in modo nativo l'autenticazione di Microsoft Entra. È 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.
Tornare all'account di archiviazione appena creato.
Seleziona Controllo di accesso (IAM).
Selezionare Aggiungi>Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.
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>
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.
Nella portale di Azure passare a Macchine virtuali, passare alla macchina virtuale Windows e quindi nella pagina Panoramica Selezionare Connetti nella parte superiore.
Immettere il nome utente e la password aggiunti al momento della creazione della macchina virtuale Windows.
Stabilire una connessione Desktop remoto con la macchina virtuale.
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 parametro
resource
deve corrispondere esattamente a quello previsto da Microsoft Entra ID. 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 creare le credenziali di firma di accesso condiviso in questa richiesta usare i parametri della richiesta HTTP seguenti:
{
"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.
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
.Estrarre quindi le credenziali di firma di accesso condiviso dalla risposta:
$sasContent = $sasResponse.Content | ConvertFrom-Json $sasCred = $sasContent.serviceSasToken
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
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
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 PowerShellSet-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
È 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à di servizio gestito vengono gestite automaticamente da Azure e consentono di eseguire l'autenticazione ai servizi che supportano l'autenticazione Microsoft Entra senza la necessità di inserire 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.
Per abilitare l'identità gestita assegnata dal sistema in una nuova VM:
Accedere al portale di Azure.
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:
- Abilitare l'autenticazione Di Microsoft Entra per il server.
- 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:
- Nella portale di Azure selezionare SQL Server nel riquadro di spostamento a sinistra.
- Selezionare il server SQL che si vuole abilitare per l'autenticazione di Microsoft Entra.
- Nella sezione Impostazioni del pannello selezionare Amministratore di Active Directory.
- Sulla barra dei comandi selezionare Imposta amministratore.
- Selezionare un account utente Di Microsoft Entra da impostare come amministratore per il server e selezionare Seleziona.
- 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:
- Autenticazione universale con il database SQL e Azure Synapse Analytics (supporto di SSMS per MFA)
- Configurare e gestire l'autenticazione di Microsoft Entra con database SQL o Azure Synapse Analytics
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
Aprire SQL Server Management Studio.
Nella finestra di dialogo Connetti al server immettere il nome del server nel campo Nome server.
Nel campo Autenticazione selezionare Active Directory - Universale con supporto MFA.
Nel campo Nome utente immettere il nome dell'account Microsoft Entra impostato come amministratore del server, cjensen@fabrikam.comad esempio .
Selezionare Opzioni.
Nel campo Connetti a database immettere il nome del database esterno al sistema che si desidera configurare.
Selezionare Connetti, quindi completare il processo di accesso.
In Esplora oggetti espandere la cartella Database.
Fare clic con il pulsante destro del mouse su un database utente e quindi scegliere Nuova query.
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.
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.
Nel portale passare a Macchine virtuali, passare alla macchina virtuale Windows e quindi in Panoramica selezionare Connetti.
Immettere le credenziali di amministratore della macchina virtuale aggiunte al momento della creazione della macchina virtuale Windows.
Dopo aver creato una connessione Desktop remoto con la macchina virtuale, aprire PowerShell in una sessione remota.
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
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.
Disabilitazione
Per disabilitare l'identità assegnata dal sistema nella VM, impostare il relativo stato su Disattivato.
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.
Accedere al portale di Azure.
Nella parte superiore della barra di spostamento a sinistra selezionare Crea una risorsa.
Nella casella Cerca nel Marketplace digitare Key Vault e premere INVIO.
Selezionare Key Vault nei risultati e quindi selezionare Crea.
Specificare un nome per il nuovo insieme di credenziali delle chiavi.
Compilare tutte le informazioni necessarie. Assicurarsi di scegliere la sottoscrizione e il gruppo di risorse usati per questa esercitazione.
Selezionare Rivedi e crea.
Seleziona Crea.
Creare un segreto
Successivamente, è necessario aggiungere un segreto a Key Vault, in modo che sia possibile recuperarlo 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.
Passare all'istanza di Key Vault appena creata.
Selezionare Segreti, quindi Aggiungi.
Seleziona Genera/Importa.
Nella schermata Crea un segreto lasciare selezionata l'opzione Carica manuale.
Specificare un nome e il valore del segreto. È possibile specificare qualsiasi valore.
Lasciare vuoti i campi della data di attivazione e della data di scadenza e lasciare Abilitato su Sì.
Selezionare Crea per creare il 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.
Passare all'istanza di Key Vault appena creata.
Selezionare Criteri di accesso dal menu sul lato sinistro.
Seleziona Aggiungi criteri di accesso.
Nella sezione Aggiungi criteri di accesso, in Configura dal modello (facoltativo) scegliere Gestione segreti dal menu a discesa.
Scegliere Selezionare un'entità e nel campo di ricerca immettere il nome della macchina virtuale creata in precedenza.
Selezionare la macchina virtuale nell'elenco dei risultati e quindi scegliere Seleziona.
Selezionare Aggiungi.
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:
- Nel portale passare a Macchine virtuali e passare alla macchina virtuale Windows, quindi in Panoramica selezionare Connetti.
- Immettere il nome utente e la password aggiunti al momento della creazione della macchina virtuale Windows.
- Dopo aver creato una connessione Desktop remoto con la macchina virtuale, aprire PowerShell in una sessione remota.
- 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:
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
La procedura descritta in questo articolo può variare leggermente in base al portale di partenza.
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. Si abilita l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra senza la necessità di 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.
Accedere al portale di Azure con un account amministratore.
Passare alla scheda Gruppo di risorse.
Selezionare il gruppo di risorse a cui si vuole concedere l'accesso all'identità gestita della macchina virtuale.
Selezionare Controllo di accesso (IAM) nel riquadro a sinistra.
Selezionare Aggiungi e quindi Aggiungi assegnazione di ruolo.
Nella scheda Ruolo selezionare Lettore. Questo ruolo consente di visualizzare tutte le risorse, ma non consente di apportare modifiche.
Nella scheda Membri, per l'opzione Assegna accesso a, selezionare Identità gestita, quindi selezionare + Seleziona membri.
Verificare che nell'elenco a discesa Sottoscrizione sia elencata la sottoscrizione corretta. Per Gruppo di risorse selezionare Tutti i gruppi di risorse.
Per l'elenco a discesa Gestisci identità selezionare Macchina virtuale.
Per Seleziona scegliere la macchina virtuale nell'elenco a discesa e quindi selezionare Salva.
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.
- Nel portale, passare alla macchina virtuale Linux e in Panoramica selezionare Connetti.
- Connettersi alla macchina virtuale usando un client SSH di propria scelta.
- 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 richiestacurl
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 parametro resource
deve corrispondere esattamente a quello previsto da Microsoft Entra ID. 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>"
La risposta restituisce 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. Si abilita l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra senza la necessità di 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 con il pulsante Prova nell'angolo in alto a destra 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:
Installare la versione più recente di Azure PowerShell, se non è già stato fatto.
Accedere ad Azure:
Connect-AzAccount
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.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:
- Creare un'identità.
- 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
La procedura descritta in questo articolo può variare leggermente in base al portale di partenza.
Ottenere un token di accesso
Per il resto dell'esercitazione, si lavora dalla macchina virtuale creata in precedenza.
Accedere al portale di Azure.
Nel portale passare a Macchine virtuali e passare alla macchina virtuale Windows. In Panoramica selezionare Connetti.
Immettere il nome utente e la password usati durante la creazione della macchina virtuale Windows.
Dopo aver creato una connessione Desktop remoto con la macchina virtuale, aprire PowerShell in una sessione remota.
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"}}