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
- Grundläggande förståelse för hanterade identiteter. Om du vill veta mer om hanterade identiteter för Azure-resurser innan du fortsätter kan du läsa översikten över hanterade identiteter.
- Du måste ha ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Du kan behöva antingen PowerShell eller CLI.
- Visual Studio Community Edition eller någon annan utvecklingsmiljö som du väljer.
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 resursgrupp med hjälp av Azure Portal
- Skapa en resursgrupp med hjälp av CLI
- Skapa en resursgrupp med PowerShell
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 Portal söka 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 Identitet på fliken Hantering och markera kryssrutan bredvid Systemtilldelad hanterad identitet
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.
I dag stöder Azure Portal 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 Portal
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 Portal
Å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.
Logga in på Azure-portalen.
Välj den resurs som du vill ta bort.
Välj Ta bort.
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: