Dela via


Så här använder du hanterade identiteter för att ansluta till Azure Cosmos DB från en virtuell Azure-dator

I den här artikeln konfigurerar vi en virtuell dator för att använda hanterade identiteter för att ansluta till Azure Cosmos DB. Azure Cosmos DB är en fullständigt hanterad NoSQL-databas för modern apputveckling. Hanterade identiteter för Azure-resurser gör det möjligt för dina program att autentisera vid åtkomst till tjänster som stöder Microsoft Entra-autentisering med hjälp av en identitet som hanteras av Azure.

Förutsättningar

Skapa en resursgrupp

Skapa en resursgrupp med namnet mi-test. Vi använder den här resursgruppen för alla resurser som används i den här självstudien.

Skapa en virtuell Azure-dator med en hanterad identitet

I den här självstudien behöver du en virtuell Azure-dator(VM). Skapa en virtuell dator med en systemtilldelad hanterad identitet aktiverad med namnet mi-vm-01. Du kan också skapa en användartilldelad hanterad identitet med namnet mi-ua-01 i resursgruppen som vi skapade tidigare (mi-test). Om du använder en användartilldelad hanterad identitet kan du tilldela den till en virtuell dator när den skapas.

Skapa en virtuell dator med en systemtilldelad hanterad identitet

Om du vill skapa en virtuell Azure-dator med den systemtilldelade hanterade identiteten aktiverad behöver ditt konto rolltilldelningen Virtuell datordeltagare . Inga andra Microsoft Entra-rolltilldelningar krävs.

  • Från Azure-portalen söker du efter virtuella datorer.
  • Välj Skapa
  • På fliken Grundläggande anger du nödvändig information.
  • Välj Nästa: Diskar >
  • Fortsätt att fylla i information efter behov och leta upp avsnittet Identitetfliken Hantering och markera kryssrutan bredvid Systemtilldelad hanterad identitet

Bild som visar hur du aktiverar systemtilldelade hanterade identiteter när du skapar en virtuell dator.

Mer information finns i dokumentationen om virtuella Azure-datorer:

Skapa en virtuell dator med en användartilldelad hanterad identitet

Stegen nedan visar hur du skapar en virtuell dator med en användartilldelad hanterad identitet konfigurerad.

Azure-portalen stöder i dag inte tilldelning av en användartilldelad hanterad identitet när en virtuell dator skapas. Du bör skapa en virtuell dator och sedan tilldela en användartilldelad hanterad identitet till den.

Konfigurera hanterade identiteter för Azure-resurser på en virtuell dator med hjälp av Azure-portalen

Skapa ett Azure Cosmos DB-konto

Nu när vi har en virtuell dator med antingen en användartilldelad hanterad identitet eller en systemtilldelad hanterad identitet behöver vi ett Azure Cosmos DB-konto där du har administrativa rättigheter. Om du behöver skapa ett Azure Cosmos DB-konto för den här självstudien innehåller Azure Cosmos DB-snabbstarten detaljerade steg om hur du gör det.

Kommentar

Hanterade identiteter kan användas för att komma åt alla Azure-resurser som stöder Microsoft Entra-autentisering. Den här självstudien förutsätter att ditt Azure Cosmos DB-konto konfigureras enligt nedan.

Inställning Värde beskrivning
Prenumeration Prenumerationsnamn Välj den Azure-prenumeration som du vill använda för det här Azure Cosmos DB-kontot.
Resursgrupp Namn på resursgrupp Välj mi-test eller välj Skapa ny och ange sedan ett unikt namn för den nya resursgruppen.
Kontonamn Ett unikt namn Ange ett namn för att identifiera ditt Azure Cosmos DB-konto. Eftersomdocuments.azure.com läggs till det namn du anger för att skapa din URI måste du använda ett unikt namn.

Namnet får endast innehålla gemener, siffror och bindestreck (-). Den måste vara mellan 3 och 44 tecken lång.
API Typ av konto som skapas Välj Azure Cosmos DB för NoSQL för att skapa en dokumentdatabas och fråga med hjälp av SQL-syntax.

Läs mer om SQL-API:et.
Plats Den region som är närmast dina användare Välj en geografisk plats som värd för ditt Azure Cosmos DB-konto. Använd den plats som är närmast dina användare för att ge dem så snabb åtkomst till data som möjligt.

Kommentar

Om du testar kanske du vill använda rabatten på den kostnadsfria nivån i Azure Cosmos DB. Med den kostnadsfria Azure Cosmos DB-nivån får du de första 1 000 RU/s och 25 GB lagringsutrymme kostnadsfritt på ett konto. Lär dig mer om kostnadsfri nivå. Tänk på att det här valet inte spelar någon roll i den här självstudien.

Bevilja åtkomst

Nu bör vi ha både en virtuell dator konfigurerad med en hanterad identitet och ett Azure Cosmos DB-konto. Innan vi fortsätter måste vi ge den hanterade identiteten ett par olika roller.

  • Bevilja först åtkomst till Azure Cosmos DB-hanteringsplanet med hjälp av Azure RBAC. Den hanterade identiteten måste ha rollen DocumentDB-kontodeltagare tilldelad för att skapa databaser och containrar.

  • Du måste också bevilja den hanterade identiteten en deltagarroll med hjälp av Azure Cosmos DB RBAC. Du kan se specifika steg nedan.

Kommentar

Vi använder rollen inbyggd Datadeltagare i Cosmos DB. Om du vill bevilja åtkomst måste du associera rolldefinitionen med identiteten. I vårt fall den hanterade identitet som är associerad med vår virtuella dator.

För närvarande finns det inget alternativ för rolltilldelning i Azure-portalen

Åtkomst till data

Du kan få åtkomst till Azure Cosmos DB med hanterade identiteter med hjälp av Azure.identity-biblioteket för att aktivera autentisering i ditt program. Du kan anropa ManagedIdentityCredential direkt eller använda DefaultAzureCredential.

Klassen ManagedIdentityCredential försöker autentisering med hjälp av en hanterad identitet som tilldelats distributionsmiljön. Klassen DefaultAzureCredential går igenom olika autentiseringsalternativ i ordning. Det andra autentiseringsalternativet som DefaultAzureCredential försöker sig på är Hanterade identiteter.

I exemplet nedan skapar du en databas, en container, ett objekt i containern och läser tillbaka det nyligen skapade objektet med hjälp av den virtuella datorns systemtilldelade hanterade identitet. Om du vill använda en användartilldelad hanterad identitet måste du ange den användartilldelade hanterade identiteten genom att ange den hanterade identitetens klient-ID.

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

Om du vill använda exemplet nedan måste du ha följande NuGet-paket:

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

Förutom NuGet-paketen ovan måste du även aktivera Inkludera förhandsversion och sedan lägga till 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();
        }
    }
}

Språkspecifika exempel med ManagedIdentityCredential:

.NET

Initiera Azure Cosmos DB-klienten:

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

Läs och skriv sedan data.

Java

Initiera Azure Cosmos DB-klienten:

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

Läs och skriv sedan data enligt beskrivningen i de här exemplen

JavaScript

Initiera Azure Cosmos DB-klienten:

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

Läs och skriv sedan data enligt beskrivningen i de här exemplen

Rensa steg

Dricks

Stegen i den här artikeln kan variera något beroende på vilken portal du börjar från.

  1. Logga in på Azure-portalen.

  2. Välj den resurs som du vill ta bort.

  3. Välj Ta bort.

  4. Bekräfta borttagningen när du uppmanas att göra det.

Nästa steg

Läs mer om hanterade identiteter för Azure-resurser:

Läs mer om Azure Cosmos DB: