Share via


Come usare le identità gestite per connettersi ad Azure Cosmos DB da una macchina virtuale di Azure

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato EOL (End of Life, fine del ciclo di vita). Prendere in considerazione l'uso e il piano di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

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

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 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

Immagine che mostra come abilitare le identità gestite assegnate dal sistema durante la creazione di una macchina virtuale.

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.

Configurare le identità gestite per le risorse di Azure in una macchina virtuale usando il portale di Azure

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

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

  1. Accedere al portale di Azure.

  2. Selezionare la risorsa da eliminare.

  3. Selezionare Elimina.

  4. Quando richiesto, confermare l'eliminazione.

Passaggi successivi

Altre informazioni sulle identità gestite per le risorse di Azure

Altre informazioni su Azure Cosmos DB: