Come usare le identità gestite per connettersi ad Azure Cosmos DB da una macchina virtuale di Azure
In questo articolo viene configurata una macchina virtuale per usare le identità gestite per connettersi ad Azure Cosmos DB. Azure Cosmos DB è un database NoSQL completamente gestito per lo sviluppo di app moderne. Le identità gestite per le risorse di Azure consentono alle applicazioni di eseguire l'autenticazione quando accedono ai servizi che supportano l'autenticazione di Microsoft Entra usando un'identità gestita da Azure.
Prerequisiti
- Conoscenza di base delle identità gestite. Per altre informazioni sulle identità gestite per le risorse di Azure prima di continuare, vedere la panoramica delle identità gestite.
- È necessario disporre di un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Potrebbe essere necessario PowerShell o l'interfaccia della riga di comando.
- Visual Studio Community Edition o un altro ambiente di sviluppo scelto.
Creare un gruppo di risorse
Creare un gruppo di risorse denominato mi-test. Questo gruppo di risorse viene usato per tutte le risorse usate in questa esercitazione.
- Creare un gruppo di risorse usando il portale di Azure
- Creare un gruppo di risorse usando l'interfaccia della riga di comando
- Creare un gruppo di risorse con PowerShell
Creare una macchina virtuale di Azure con un'identità gestita
Per questa esercitazione è necessaria una macchina virtuale (VM) di Azure. Creare una macchina virtuale con un'identità gestita assegnata dal sistema abilitata denominata mi-vm-01. È anche possibile creare un'identità gestita assegnata dall'utente denominata mi-ua-01 nel gruppo di risorse creato in precedenza (mi-test). Se si usa un'identità gestita assegnata dall'utente, è possibile assegnarla a una macchina virtuale durante la creazione.
Creare una macchina virtuale con un'identità gestita assegnata dal sistema
Per creare una macchina virtuale di Azure con l'identità gestita assegnata dal sistema abilitata, all'account deve essere assegnato il ruolo Collaboratore Macchina virtuale. Non sono necessarie altre assegnazioni di ruolo di Microsoft Entra.
- Dalla portale di Azure cercare le macchine virtuali.
- Scegliere Create (Crea)
- Nella scheda Informazioni di base specificare le informazioni necessarie.
- Scegliere Avanti: Dischi >
- Continuare a compilare le informazioni in base alle esigenze e nella scheda Gestione individuare la sezione Identità e selezionare la casella accanto a Identità gestita assegnata dal sistema
Per altre informazioni, vedere la documentazione delle macchine virtuali di Azure:
Creare una macchina virtuale con un'identità gestita assegnata dall'utente
La procedura seguente illustra come creare una macchina virtuale con un'identità gestita assegnata dall'utente configurata.
Attualmente, il portale di Azure non supporta l'assegnazione di un'identità gestita assegnata dall'utente durante la creazione di una macchina virtuale. È necessario creare una macchina virtuale e quindi assegnarvi un'identità gestita assegnata dall'utente.
Creare un account Azure Cosmos DB
Ora che è disponibile una macchina virtuale con un'identità gestita assegnata dall'utente o un'identità gestita assegnata dal sistema, è necessario un account Azure Cosmos DB in cui si dispone dei diritti amministrativi. Se è necessario creare un account Azure Cosmos DB per questa esercitazione, l'avvio rapido di Azure Cosmos DB fornisce passaggi dettagliati su come eseguire questa operazione.
Nota
Le identità gestite possono essere usate per accedere a qualsiasi risorsa di Azure che supporti l'autenticazione di Microsoft Entra. Questa esercitazione presuppone che l'account Azure Cosmos DB venga configurato come illustrato di seguito.
Impostazione | valore | Descrizione |
---|---|---|
Abbonamento | Nome della sottoscrizione | Selezionare la sottoscrizione di Azure da usare per l'account Azure Cosmos DB. |
Gruppo di risorse | Nome gruppo di risorse | Selezionare mi-test oppure selezionare Crea nuovo, quindi immettere un nome univoco per il nuovo gruppo di risorse. |
Nome conto | Un nome univoco | Immettere un nome per identificare l'account Azure Cosmos DB. Dato che al nome specificato viene aggiunto documents.azure.com per creare l'URI, usare un nome univoco. Il nome può contenere solo lettere minuscole, numeri e il segno meno (-). Deve avere una lunghezza compresa tra 3 e 44 caratteri. |
API | Il tipo di account da creare | Selezionare Azure Cosmos DB per NoSQL per creare un database di documenti ed eseguire query usando la sintassi SQL. Altre informazioni sull'API SQL. |
Ufficio | Area più vicina ai propri utenti | Selezionare una posizione geografica in cui ospitare l'account Azure Cosmos DB. Usare la località più vicina agli utenti per offrire loro la massima velocità di accesso ai dati. |
Nota
Se si esegue il test, è possibile applicare lo sconto del livello gratuito di Azure Cosmos DB. Con il livello gratuito di Azure Cosmos DB, si otterranno gratuitamente i primi 1000 UR/sec e 25 GB di spazio di archiviazione in un account. Altre informazioni sul livello gratuito. Tenere presente che ai fini di questa esercitazione questa scelta non fa differenza.
Concedi accesso
A questo punto, è necessario configurare una macchina virtuale con un'identità gestita e un account Azure Cosmos DB. Prima di continuare, è necessario concedere all'identità gestita un paio di ruoli diversi.
Concedere prima l'accesso al piano di gestione di Azure Cosmos DB usando il controllo degli accessi in base al ruolo di Azure. L'identità gestita deve avere il ruolo Collaboratore account DocumentDB assegnato per creare database e contenitori.
È anche necessario concedere all'identità gestita un ruolo di collaboratore usando il controllo degli accessi in base al ruolo di Azure Cosmos DB. Di seguito è possibile visualizzare passaggi specifici.
Nota
Verrà usato il ruolo Collaboratore dati predefinito di Cosmos DB. Per concedere l'accesso, è necessario associare la definizione del ruolo all'identità. In questo caso, l'identità gestita associata alla macchina virtuale.
Al momento non è disponibile alcuna opzione di assegnazione di ruolo nel portale di Azure
Accedere ai dati
È possibile ottenere l'accesso ad Azure Cosmos DB usando le identità gestite usando la libreria Azure.identity per abilitare l'autenticazione nell'applicazione. È possibile chiamare ManagedIdentityCredential direttamente o usare DefaultAzureCredential.
La classe ManagedIdentityCredential tenta di eseguire l'autenticazione usando un'identità gestita assegnata all'ambiente di distribuzione. La classe DefaultAzureCredential passa attraverso diverse opzioni di autenticazione in ordine. La seconda opzione di autenticazione tentata da DefaultAzureCredential è Identità gestite.
Nell'esempio riportato di seguito viene creato un database, un contenitore, un elemento nel contenitore e si legge l'elemento appena creato usando l'identità gestita assegnata dal sistema della macchina virtuale. Se si vuole usare un'identità gestita assegnata dall'utente, è necessario specificare l'identità gestita assegnata dall'utente specificando l'ID client dell'identità gestita.
string userAssignedClientId = "<your managed identity client Id>";
var tokenCredential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId });
Per usare l'esempio seguente, è necessario avere i pacchetti NuGet seguenti:
- Azure.Identity
- Microsoft.Azure.Cosmos
- Microsoft.Azure.Management.CosmosDB
Oltre ai pacchetti NuGet precedenti, è anche necessario abilitare Includi versione preliminare e quindi aggiungere Azure.ResourceManager.CosmosDB.
using Azure.Identity;
using Azure.ResourceManager.CosmosDB;
using Azure.ResourceManager.CosmosDB.Models;
using Microsoft.Azure.Cosmos;
using System;
using System.Threading.Tasks;
namespace MITest
{
class Program
{
static async Task Main(string[] args)
{
// Replace the placeholders with your own values
var subscriptionId = "Your subscription ID";
var resourceGroupName = "You resource group";
var accountName = "Cosmos DB Account name";
var databaseName = "mi-test";
var containerName = "container01";
// Authenticate to Azure using Managed Identity (system-assigned or user-assigned)
var tokenCredential = new DefaultAzureCredential();
// Create the Cosmos DB management client using the subscription ID and token credential
var managementClient = new CosmosDBManagementClient(tokenCredential)
{
SubscriptionId = subscriptionId
};
// Create the Cosmos DB data client using the account URL and token credential
var dataClient = new CosmosClient($"https://{accountName}.documents.azure.com:443/", tokenCredential);
// Create a new database using the management client
var createDatabaseOperation = await managementClient.SqlResources.StartCreateUpdateSqlDatabaseAsync(
resourceGroupName,
accountName,
databaseName,
new SqlDatabaseCreateUpdateParameters(new SqlDatabaseResource(databaseName), new CreateUpdateOptions()));
await createDatabaseOperation.WaitForCompletionAsync();
// Create a new container using the management client
var createContainerOperation = await managementClient.SqlResources.StartCreateUpdateSqlContainerAsync(
resourceGroupName,
accountName,
databaseName,
containerName,
new SqlContainerCreateUpdateParameters(new SqlContainerResource(containerName), new CreateUpdateOptions()));
await createContainerOperation.WaitForCompletionAsync();
// Create a new item in the container using the data client
var partitionKey = "pkey";
var id = Guid.NewGuid().ToString();
await dataClient.GetContainer(databaseName, containerName)
.CreateItemAsync(new { id = id, _partitionKey = partitionKey }, new PartitionKey(partitionKey));
// Read back the item from the container using the data client
var pointReadResult = await dataClient.GetContainer(databaseName, containerName)
.ReadItemAsync<dynamic>(id, new PartitionKey(partitionKey));
// Run a query to get all items from the container using the data client
await dataClient.GetContainer(databaseName, containerName)
.GetItemQueryIterator<dynamic>("SELECT * FROM c")
.ReadNextAsync();
}
}
}
Esempi specifici del linguaggio che usano ManagedIdentityCredential:
.NET
Inizializzare il client Azure Cosmos DB:
CosmosClient client = new CosmosClient("<account-endpoint>", new ManagedIdentityCredential());
Quindi leggere e scrivere dati.
Java
Inizializzare il client Azure Cosmos DB:
CosmosAsyncClient Client = new CosmosClientBuilder().endpoint("<account-endpoint>") .credential(new ManagedIdentityCredential()) .build();
Quindi leggere e scrivere dati come descritto in questi esempi
JavaScript
Inizializzare il client Azure Cosmos DB:
const client = new CosmosClient({ "<account-endpoint>", aadCredentials: new ManagedIdentityCredential() });
Quindi leggere e scrivere dati come descritto in questi esempi
Eseguire la pulizia dei passaggi
Suggerimento
La procedura descritta in questo articolo può variare leggermente in base al portale di partenza.
Accedere al portale di Azure.
Selezionare la risorsa da eliminare.
Selezionare Elimina.
Quando richiesto, confermare l'eliminazione.
Passaggi successivi
Altre informazioni sulle identità gestite per le risorse di Azure
Altre informazioni su Azure Cosmos DB: