Jak używać tożsamości zarządzanych do nawiązywania połączenia z usługą Azure Cosmos DB z maszyny wirtualnej platformy Azure
W tym artykule skonfigurujemy maszynę wirtualną do używania tożsamości zarządzanych do nawiązywania połączenia z usługą Azure Cosmos DB. Usługa Azure Cosmos DB to w pełni zarządzana baza danych NoSQL do tworzenia nowoczesnych aplikacji. Tożsamości zarządzane dla zasobów platformy Azure umożliwiają aplikacjom uwierzytelnianie podczas uzyskiwania dostępu do usług obsługujących uwierzytelnianie firmy Microsoft Entra przy użyciu tożsamości zarządzanej przez platformę Azure.
Wymagania wstępne
- Podstawowa wiedza na temat tożsamości zarządzanych. Jeśli chcesz dowiedzieć się więcej o tożsamościach zarządzanych dla zasobów platformy Azure przed kontynuowaniem, zapoznaj się z omówieniem tożsamości zarządzanych.
- Musisz mieć konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Może być potrzebny program PowerShell lub interfejs wiersza polecenia.
- Visual Studio Community Edition lub inne wybrane środowisko programistyczne.
Tworzenie grupy zasobów
Utwórz grupę zasobów o nazwie mi-test. Ta grupa zasobów jest używana dla wszystkich zasobów używanych w tym samouczku.
- Tworzenie grupy zasobów przy użyciu witryny Azure Portal
- Tworzenie grupy zasobów przy użyciu interfejsu wiersza polecenia
- Tworzenie grupy zasobów przy użyciu programu PowerShell
Tworzenie maszyny wirtualnej platformy Azure z tożsamością zarządzaną
Na potrzeby tego samouczka potrzebujesz maszyny wirtualnej platformy Azure. Utwórz maszynę wirtualną z włączoną tożsamością zarządzaną przypisaną przez system o nazwie mi-vm-01. Możesz również utworzyć tożsamość zarządzaną przypisaną przez użytkownika o nazwie mi-ua-01 w utworzonej wcześniej grupie zasobów (mi-test). Jeśli używasz tożsamości zarządzanej przypisanej przez użytkownika, możesz przypisać ją do maszyny wirtualnej podczas tworzenia.
Tworzenie maszyny wirtualnej z tożsamością zarządzaną przypisaną przez system
Aby utworzyć maszynę wirtualną platformy Azure z włączoną tożsamością zarządzaną przypisaną przez system, twoje konto wymaga przypisania roli Współautor maszyny wirtualnej. Nie są wymagane żadne inne przypisania ról firmy Microsoft Entra.
- Portal
- Program PowerShell
- Interfejs wiersza polecenia platformy Azure
- Szablon usługi Resource Manager
- W witrynie Azure Portal wyszukaj maszyny wirtualne.
- Wybierz pozycję Utwórz.
- Na karcie Podstawy podaj wymagane informacje.
- Wybierz pozycję Dalej: dyski >
- Kontynuuj wypełnianie informacji zgodnie z potrzebami, a na karcie Zarządzanie znajdź sekcję Tożsamość i zaznacz pole wyboru obok pozycji Tożsamość zarządzana przypisana przez system
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją maszyn wirtualnych platformy Azure:
Tworzenie maszyny wirtualnej z tożsamością zarządzaną przypisaną przez użytkownika
W poniższych krokach pokazano, jak utworzyć maszynę wirtualną ze skonfigurowaną tożsamością zarządzaną przypisaną przez użytkownika.
- Portal
- Program PowerShell
- Interfejs wiersza polecenia platformy Azure
- Szablon usługi Resource Manager
Obecnie witryna Azure Portal nie obsługuje przypisywania tożsamości zarządzanej przypisanej przez użytkownika podczas tworzenia maszyny wirtualnej. Należy utworzyć maszynę wirtualną, a następnie przypisać do niej tożsamość zarządzaną przypisaną przez użytkownika.
Tworzenie konta usługi Azure Cosmos DB
Teraz, gdy mamy maszynę wirtualną z tożsamością zarządzaną przypisaną przez użytkownika lub tożsamością zarządzaną przypisaną przez system, potrzebujemy konta usługi Azure Cosmos DB dostępnego, jeśli masz uprawnienia administracyjne. Jeśli musisz utworzyć konto usługi Azure Cosmos DB na potrzeby tego samouczka, przewodnik Szybki start dotyczący usługi Azure Cosmos DB zawiera szczegółowe instrukcje dotyczące tego, jak to zrobić.
Uwaga
Tożsamości zarządzane mogą służyć do uzyskiwania dostępu do dowolnego zasobu platformy Azure obsługującego uwierzytelnianie firmy Microsoft Entra. W tym samouczku założono, że twoje konto usługi Azure Cosmos DB zostanie skonfigurowane, jak pokazano poniżej.
Ustawienie | Wartość | Opis |
---|---|---|
Subskrypcja | Nazwa subskrypcji | Wybierz subskrypcję platformy Azure, która ma być używana dla tego konta usługi Azure Cosmos DB. |
Grupa zasobów | Nazwa grupy zasobów | Wybierz pozycję mi-test lub wybierz pozycję Utwórz nową, a następnie wprowadź unikatową nazwę nowej grupy zasobów. |
Nazwa konta | Unikatowa nazwa | Wprowadź nazwę, aby zidentyfikować konto usługi Azure Cosmos DB. Ponieważ adres documents.azure.com jest dołączany do podanej nazwy w celu utworzenia identyfikatora URI, użyj unikatowej nazwy. Nazwa może zawierać tylko małe litery, cyfry i znaki łącznika (-). Musi mieć długość od 3 do 44 znaków. |
interfejs API | Typ konta do utworzenia | Wybierz pozycję Azure Cosmos DB for NoSQL , aby utworzyć bazę danych dokumentów i wykonywać zapytania przy użyciu składni JĘZYKA SQL. Dowiedz się więcej o interfejsie API SQL. |
Lokalizacja | Region najbliżej Twoich użytkowników | Wybierz lokalizację geograficzną, w której będzie hostowane konto usługi Azure Cosmos DB. Użyj lokalizacji znajdującej się najbliżej Twoich użytkowników, aby zapewnić im najszybszy dostęp do danych. |
Uwaga
Jeśli testujesz, możesz zastosować rabat na warstwę bezpłatną usługi Azure Cosmos DB. Dzięki warstwie Bezpłatna usługi Azure Cosmos DB uzyskasz pierwsze 1000 RU/s i 25 GB miejsca do magazynowania bezpłatnie na koncie. Dowiedz się więcej o warstwie Bezpłatna. Należy pamiętać, że na potrzeby tego samouczka ten wybór nie ma znaczenia.
Przyznaj dostęp
Na tym etapie powinniśmy mieć zarówno maszynę wirtualną skonfigurowaną przy użyciu tożsamości zarządzanej, jak i konta usługi Azure Cosmos DB. Zanim przejdziemy dalej, musimy udzielić tożsamości zarządzanej kilku różnych ról.
Najpierw przyznaj dostęp do płaszczyzny zarządzania usługi Azure Cosmos DB przy użyciu kontroli dostępu opartej na rolach platformy Azure. Tożsamość zarządzana musi mieć przypisaną rolę Współautor konta usługi DocumentDB w celu utworzenia baz danych i kontenerów.
Musisz również udzielić tożsamości zarządzanej roli współautora przy użyciu kontroli dostępu opartej na rolach usługi Azure Cosmos DB. Poniżej przedstawiono konkretne kroki.
Uwaga
Użyjemy roli współautora danych wbudowanych usługi Cosmos DB. Aby udzielić dostępu, musisz skojarzyć definicję roli z tożsamością. W naszym przypadku tożsamość zarządzana skojarzona z naszą maszyną wirtualną.
- Portal
- Program PowerShell
- Interfejs wiersza polecenia platformy Azure
- Szablon usługi Resource Manager
Obecnie w witrynie Azure Portal nie jest dostępna opcja przypisania roli
Uzyskiwanie dostępu do danych
Uzyskanie dostępu do usługi Azure Cosmos DB przy użyciu tożsamości zarządzanych można osiągnąć przy użyciu biblioteki Azure.identity w celu włączenia uwierzytelniania w aplikacji. Możesz wywołać metodę ManagedIdentityCredential bezpośrednio lub użyć wartości DefaultAzureCredential.
Klasa ManagedIdentityCredential próbuje uwierzytelnić się przy użyciu tożsamości zarządzanej przypisanej do środowiska wdrażania. Klasa DefaultAzureCredential przechodzi przez różne opcje uwierzytelniania w kolejności. Drugą opcją uwierzytelniania domyślnąAzureCredential jest tożsamość zarządzana.
W poniższym przykładzie tworzysz bazę danych, kontener, element w kontenerze i odczytujesz nowo utworzony element przy użyciu przypisanej przez system tożsamości zarządzanej maszyny wirtualnej. Jeśli chcesz użyć tożsamości zarządzanej przypisanej przez użytkownika, musisz określić tożsamość zarządzaną przypisaną przez użytkownika, określając identyfikator klienta tożsamości zarządzanej.
string userAssignedClientId = "<your managed identity client Id>";
var tokenCredential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId });
Aby użyć poniższego przykładu, musisz mieć następujące pakiety NuGet:
- Azure.Identity
- Microsoft.Azure.Cosmos
- Microsoft.Azure.Management.CosmosDB
Oprócz powyższych pakietów NuGet należy również włączyć opcję Uwzględnij wersję wstępną , a następnie dodać usługę 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();
}
}
}
Przykłady specyficzne dla języka korzystające z elementu ManagedIdentityCredential:
.NET
Zainicjuj klienta usługi Azure Cosmos DB:
CosmosClient client = new CosmosClient("<account-endpoint>", new ManagedIdentityCredential());
Następnie odczyt i zapis danych.
Java
Zainicjuj klienta usługi Azure Cosmos DB:
CosmosAsyncClient Client = new CosmosClientBuilder().endpoint("<account-endpoint>") .credential(new ManagedIdentityCredential()) .build();
Następnie odczytaj i zapisz dane zgodnie z opisem w tych przykładach
JavaScript
Zainicjuj klienta usługi Azure Cosmos DB:
const client = new CosmosClient({ "<account-endpoint>", aadCredentials: new ManagedIdentityCredential() });
Następnie odczytaj i zapisz dane zgodnie z opisem w tych przykładach
Kroki czyszczenia
Napiwek
Kroki opisane w tym artykule mogą się nieznacznie różnić w zależności od portalu, od którego zaczynasz.
- Portal
- Program PowerShell
- Interfejs wiersza polecenia platformy Azure
- Szablon usługi Resource Manager
Zaloguj się w witrynie Azure Portal.
Wybierz zasób, który chcesz usunąć.
Wybierz Usuń.
Po wyświetleniu monitu potwierdź usunięcie.
Następne kroki
Dowiedz się więcej o tożsamościach zarządzanych dla zasobów platformy Azure:
Dowiedz się więcej o usłudze Azure Cosmos DB: