Share via


Beheerde identiteiten gebruiken om verbinding te maken met Azure Cosmos DB vanaf een virtuele Azure-machine

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Houd rekening met uw gebruik en plan dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

In dit artikel hebben we een virtuele machine ingesteld voor het gebruik van beheerde identiteiten om verbinding te maken met Azure Cosmos DB. Azure Cosmos DB is een volledig beheerde NoSQL-database voor het ontwikkelen van moderne apps. Met beheerde identiteiten voor Azure-resources kunnen uw toepassingen worden geverifieerd bij toegang tot services die ondersteuning bieden voor Microsoft Entra-verificatie met behulp van een identiteit die wordt beheerd door Azure.

Vereisten

Een brongroep maken

Maak een resourcegroep met de naam mi-test. We gebruiken deze resourcegroep voor alle resources die in deze zelfstudie worden gebruikt.

Een virtuele Azure-machine maken met een beheerde identiteit

Voor deze zelfstudie hebt u een virtuele Azure-machine (VM) nodig. Maak een virtuele machine met een ingeschakelde door het systeem toegewezen beheerde identiteit met de naam mi-vm-01. U kunt ook een door de gebruiker toegewezen beheerde identiteit maken met de naam mi-ua-01 in de resourcegroep die u eerder hebt gemaakt (mi-test). Als u een door de gebruiker toegewezen beheerde identiteit gebruikt, kunt u deze tijdens het maken aan een VM toewijzen.

Een VM met een door het systeem toegewezen beheerde identiteit maken

Als u een Azure-VM wilt maken met de door het systeem toegewezen beheerde identiteit, moet uw account beschikken over de roltoewijzing Inzender voor virtuele machines. Er zijn geen andere Microsoft Entra-roltoewijzingen vereist.

  • Zoek vanuit Azure Portal naar virtuele machines.
  • Kies Maken
  • Geef op het tabblad Basisprincipes de vereiste gegevens op.
  • Kies Volgende: Schijven >
  • Ga door met het invullen van de informatie, ga op het tabblad Beheer naar de sectie Identiteit en schakel het selectievakje in naast Door het systeem toegewezen beheerde identiteit in

Afbeelding die laat zien hoe het inschakelen van door het systeem toegewezen beheerde identiteiten tijdens het maken van een VM werkt.

Raadpleeg de documentatie voor virtuele Azure-machines voor meer informatie:

Een virtuele machine maken met een door de gebruiker toegewezen beheerde identiteit

In de onderstaande stappen ziet u hoe u een virtuele machine maakt met een door de gebruiker toegewezen beheerde identiteit geconfigureerd.

Momenteel ondersteunt Azure Portal het toewijzen van een door de gebruiker toegewezen beheerde identiteit tijdens het maken van een virtuele machine niet. U moet een virtuele machine maken en vervolgens een door de gebruiker toegewezen beheerde identiteit eraan toewijzen.

Beheerde identiteiten configureren voor Azure-resources op een VIRTUELE machine met behulp van Azure Portal

Een Azure Cosmos DB-account maken

Nu we een VIRTUELE machine hebben met een door de gebruiker toegewezen beheerde identiteit of een door het systeem toegewezen beheerde identiteit, hebben we een Azure Cosmos DB-account nodig dat beschikbaar is waar u beheerdersrechten hebt. Als u een Azure Cosmos DB-account voor deze zelfstudie moet maken, bevat de quickstart van Azure Cosmos DB gedetailleerde stappen om dit te doen.

Notitie

Beheerde identiteiten kunnen worden gebruikt voor toegang tot elke Azure-resource die ondersteuning biedt voor Microsoft Entra-verificatie. In deze zelfstudie wordt ervan uitgegaan dat uw Azure Cosmos DB-account wordt geconfigureerd zoals hieronder wordt weergegeven.

Instelling Weergegeven als Beschrijving
Abonnement Abonnementsnaam Selecteer het Azure-abonnement dat u wilt gebruiken voor dit Azure Cosmos DB-account.
Resourcegroep Naam van de resourcegroep Selecteer mi-test of selecteer Nieuwe maken en voer vervolgens een unieke naam in voor de nieuwe resourcegroep.
Accountnaam Een unieke naam Voer een naam in om uw Azure Cosmos DB-account te identificeren. Gebruik een unieke naam omdat documents.azure.com is toegevoegd aan de naam die u hebt opgegeven om uw URI te maken.

De naam mag alleen kleine letters, cijfers en het koppelteken (-) bevatten. De naam moet tussen de 3 en 44 tekens lang zijn.
API Het type account dat moet worden gemaakt Selecteer Azure Cosmos DB for NoSQL om een documentdatabase te maken en query's uit te voeren met behulp van SQL-syntaxis.

Meer informatie over de SQL-API.
Locatie De regio het dichtst bij uw gebruikers Selecteer een geografische locatie waar u het Azure Cosmos DB-account wilt hosten. Gebruik de locatie die zich het dichtst bij uw gebruikers bevindt, zodat ze de snelst mogelijke toegang tot de gegevens hebben.

Notitie

Als u aan het testen bent, kunt u korting voor de gratis laag van Azure Cosmos DB toepassen. Met de gratis laag van Azure Cosmos DB krijgt u de eerste 1000 RU/s en 25 GB opslagruimte gratis in een account. Meer informatie over de gratis laag. Het maakt voor deze zelfstudie geen verschil waarvoor u kiest.

Toegang verlenen

Op dit moment moeten zowel een virtuele machine zijn geconfigureerd met een beheerde identiteit als een Azure Cosmos DB-account. Voordat u verdergaat, moet u een aantal verschillende rollen aan de beheerde identiteit toekennen.

  • Verken eerst toegang tot het Azure Cosmos DB-beheervlak met behulp van Azure RBAC. Aan de beheerde identiteit moet de rol Inzender voor het DocumentDB-account zijn toegewezen om databases en containers te kunnen maken.

  • U moet de beheerde identiteit ook een rol van inzender verlenen met behulp van Azure Cosmos DB RBAC. Hieronder ziet u specifieke stappen.

Notitie

We gebruiken de rol van ingebouwde Cosmos DB-gegevensbijdrager. Als u toegang wilt verlenen, moet u de roldefinitie koppelen aan de identiteit. In dit geval is de beheerde identiteit gekoppeld aan de virtuele machine.

Op dit moment is er geen optie voor roltoewijzing beschikbaar in Azure Portal

Toegang tot gegevens

Het verkrijgen van toegang tot Azure Cosmos DB met behulp van beheerde identiteiten kan worden bereikt met behulp van de Azure.identity-bibliotheek om verificatie in uw toepassing in te schakelen. U kunt ManagedIdentityCredential rechtstreeks aanroepen of DefaultAzureCredential gebruiken.

De klasse ManagedIdentityCredential probeert de verificatie uit te voeren met behulp van een beheerde identiteit die is toegewezen aan de implementatieomgeving. De klasse DefaultAzureCredential doorloopt verschillende verificatieopties in een vaste volgorde. De tweede verificatieoptie die DefaultAzureCredential probeert, is Beheerde identiteiten.

In het onderstaande voorbeeld maakt u een database, een container en een item in de container, en leest u het zojuist gemaakte item terug met behulp van de door het systeem toegewezen beheerde identiteit van de virtuele machine. Als u een door de gebruiker toegewezen beheerde identiteit wilt gebruiken, moet u de door de gebruiker toegewezen beheerde identiteit opgeven door de client-id van de beheerde identiteit op te geven.

string userAssignedClientId = "<your managed identity client Id>";
var tokenCredential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId });

Als u het onderstaande voorbeeld wilt gebruiken, hebt u de volgende NuGet-pakketten nodig:

  • Azure.Identity
  • Microsoft.Azure.Cosmos
  • Microsoft.Azure.Management.CosmosDB

Naast de bovenstaande NuGet-pakketten moet u ook Voorlopige versie opnemen inschakelen en vervolgens Azure.ResourceManager.CosmosDB toevoegen.

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();
        }
    }
}

Taalspecifieke voorbeelden met ManagedIdentityCredential:

.NET

Initialiseer uw Azure Cosmos DB-client:

CosmosClient client = new CosmosClient("<account-endpoint>", new ManagedIdentityCredential());

Lees en schrijf vervolgens gegevens.

Java

Initialiseer uw Azure Cosmos DB-client:

CosmosAsyncClient Client = new CosmosClientBuilder().endpoint("<account-endpoint>") .credential(new ManagedIdentityCredential()) .build();

Lees en schrijf vervolgens gegevens zoals beschreven in deze voorbeelden

JavaScript

Initialiseer uw Azure Cosmos DB-client:

const client = new CosmosClient({ "<account-endpoint>", aadCredentials: new ManagedIdentityCredential() });

Lees en schrijf vervolgens gegevens zoals beschreven in deze voorbeelden

Stappen voor opschonen

Tip

Stappen in dit artikel kunnen enigszins variƫren op basis van de portal waaruit u begint.

  1. Meld u aan bij het Azure-portaal.

  2. Selecteer de resource die u wilt verwijderen.

  3. Selecteer Verwijderen.

  4. Bevestig de verwijdering als u daarom wordt gevraagd.

Volgende stappen

Meer informatie over beheerde identiteiten voor Azure-resources:

Meer informatie over Azure Cosmos DB: