Použití spravovaných identit pro připojení ke službě Azure Cosmos DB z virtuálního počítače Azure

Upozornění

Tento článek odkazuje na CentOS, linuxovou distribuci, která se blíží stavu Konec životnosti (EOL). Zvažte své použití a odpovídajícím způsobem naplánujte. Další informace najdete v doprovodných materiálech CentOS End Of Life.

V tomto článku jsme nastavili virtuální počítač tak, aby používal spravované identity pro připojení ke službě Azure Cosmos DB. Azure Cosmos DB je plně spravovaná databáze NoSQL pro moderní vývoj aplikací. Spravované identity pro prostředky Azure umožňují vašim aplikacím ověřovat se při přístupu ke službám, které podporují ověřování Microsoft Entra pomocí identity spravované v Azure.

Požadavky

  • Základní znalost spravovaných identit Pokud chcete před pokračováním získat další informace o spravovaných identitách pro prostředky Azure, projděte si přehled spravovaných identit.
  • Musíte mít účet Azure s aktivním předplatným. Vytvoření účtu zdarma
  • Možná budete potřebovat PowerShell nebo rozhraní příkazového řádku.
  • Visual Studio Community Edition nebo jiné vývojové prostředí podle vašeho výběru.

Vytvoření skupiny zdrojů

Vytvořte skupinu prostředků s názvem mi-test. Tuto skupinu prostředků používáme pro všechny prostředky použité v tomto kurzu.

Vytvoření virtuálního počítače Azure se spravovanou identitou

Pro účely tohoto kurzu potřebujete virtuální počítač Azure. Vytvořte virtuální počítač s spravovanou identitou přiřazenou systémem s názvem mi-vm-01. Můžete také vytvořit spravovanou identitu přiřazenou uživatelem s názvem mi-ua-01 ve skupině prostředků, kterou jsme vytvořili dříve (mi-test). Pokud používáte spravovanou identitu přiřazenou uživatelem, můžete ji přiřadit k virtuálnímu počítači během vytváření.

Vytvoření virtuálního počítače se spravovanou identitou přiřazenou systémem

Pokud chcete vytvořit virtuální počítač Azure s povolenou spravovanou identitou přiřazenou systémem, váš účet potřebuje přiřazení role Přispěvatel virtuálních počítačů. Nejsou vyžadována žádná další přiřazení rolí Microsoft Entra.

  • Na webu Azure Portal vyhledejte virtuální počítače.
  • Zvolte Vytvořit.
  • Na kartě Základy zadejte požadované informace.
  • Zvolte Další: Disky >
  • Pokračujte v vyplňování informací podle potřeby a na kartě Správa vyhledejte část Identita a zaškrtněte políčko vedle spravované identity přiřazené systémem.

Obrázek znázorňující, jak při vytváření virtuálního počítače povolit spravované identity přiřazené systémem

Další informace najdete v dokumentaci k virtuálním počítačům Azure:

Vytvoření virtuálního počítače se spravovanou identitou přiřazenou uživatelem

Následující postup ukazuje, jak vytvořit virtuální počítač s nakonfigurovanou spravovanou identitou přiřazenou uživatelem.

Azure Portal v současné době nepodporuje přiřazování spravované identity přiřazené uživatelem při vytváření virtuálního počítače. Měli byste vytvořit virtuální počítač a přiřadit mu spravovanou identitu přiřazenou uživatelem.

Konfigurace spravovaných identit pro prostředky Azure na virtuálním počítači pomocí webu Azure Portal

Vytvoření účtu služby Azure Cosmos DB

Teď, když máme virtuální počítač s spravovanou identitou přiřazenou uživatelem nebo spravovanou identitou přiřazenou systémem, potřebujeme účet služby Azure Cosmos DB, který je k dispozici, pokud máte práva správce. Pokud potřebujete vytvořit účet služby Azure Cosmos DB pro účely tohoto kurzu, rychlý start služby Azure Cosmos DB obsahuje podrobný postup.

Poznámka:

Spravované identity se dají použít pro přístup k libovolnému prostředku Azure, který podporuje ověřování Microsoft Entra. V tomto kurzu se předpokládá, že váš účet služby Azure Cosmos DB bude nakonfigurovaný, jak je znázorněno níže.

Nastavení Hodnota Popis
Předplatné Název předplatného Vyberte předplatné Azure, které chcete pro tento účet služby Azure Cosmos DB použít.
Skupina prostředků Název skupiny prostředků Vyberte mi-test nebo vyberte Vytvořit nový a zadejte jedinečný název nové skupiny prostředků.
Název účtu Jedinečný název Zadejte název pro identifikaci účtu služby Azure Cosmos DB. Vzhledem k tomu, že se váš identifikátor URI vytvoří připojením řetězce documents.azure.com k názvu, který zadáte, použijte jedinečný název.

Tento název může obsahovat jenom malá písmena, číslice a znak spojovníku (-). Musí mít délku 3 až 44 znaků.
rozhraní API Typ účtu, který se má vytvořit Výběrem služby Azure Cosmos DB for NoSQL vytvořte databázi dokumentů a dotazování pomocí syntaxe SQL.

Další informace o rozhraní SQL API
Umístění Oblast nejbližší vašim uživatelům Vyberte zeměpisné umístění, ve kterém chcete účet služby Azure Cosmos DB hostovat. Použijte umístění, které je vašim uživatelům nejbližší, abyste jim zajistili nejrychlejší přístup k datům.

Poznámka:

Pokud testujete, můžete chtít uplatnit slevu na úroveň Free služby Azure Cosmos DB. S úrovní Free služby Azure Cosmos DB získáte prvních 1000 RU/s a 25 GB úložiště zdarma v účtu. Další informace o úrovni Free Mějte na paměti, že pro účely tohoto kurzu tato volba nijak nemění.

Udělení přístupu

V tuto chvíli bychom měli mít virtuální počítač nakonfigurovaný se spravovanou identitou i účtem služby Azure Cosmos DB. Než budeme pokračovat, musíme spravované identitě udělit několik různých rolí.

  • Nejprve udělte přístup k rovině správy Azure Cosmos DB pomocí Azure RBAC. Spravovaná identita musí mít přiřazenou roli Přispěvatel účtů DocumentDB k vytváření databází a kontejnerů.

  • Potřebujete také udělit spravované identitě roli přispěvatele pomocí RBAC služby Azure Cosmos DB. Níže najdete konkrétní kroky.

Poznámka:

Použijeme roli přispěvatele dat integrované ve službě Cosmos DB. Pokud chcete udělit přístup, musíte přidružit definici role k identitě. V našem případě spravovaná identita přidružená k našemu virtuálnímu počítači.

V tuto chvíli není na webu Azure Portal k dispozici žádná možnost přiřazení role.

Přístup k datům

Získání přístupu ke službě Azure Cosmos DB pomocí spravovaných identit se dá dosáhnout pomocí knihovny Azure.identity k povolení ověřování ve vaší aplikaci. ManagedIdentityCredential můžete volat přímo nebo použít DefaultAzureCredential.

Třída ManagedIdentityCredential se pokouší ověřit pomocí spravované identity přiřazené k prostředí nasazení. DefaultAzureCredential třída prochází různými možnostmi ověřování v pořadí. Druhou možností ověřování, o kterou se pokusy DefaultAzureCredential pokusí, jsou spravované identity.

V následujícím příkladu vytvoříte databázi, kontejner, položku v kontejneru a znovu přečtete nově vytvořenou položku pomocí spravované identity přiřazené systémem virtuálního počítače. Pokud chcete použít spravovanou identitu přiřazenou uživatelem, musíte určit spravovanou identitu přiřazenou uživatelem zadáním ID klienta spravované identity.

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

Pokud chcete použít následující ukázku, musíte mít následující balíčky NuGet:

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

Kromě výše uvedených balíčků NuGet musíte také povolit předběžné verze Include a pak přidat 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();
        }
    }
}

Příklady specifické pro jazyk pomocí ManagedIdentityCredential:

.NET

Inicializace klienta Služby Azure Cosmos DB:

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

Pak načtěte a zapisujte data.

Java

Inicializace klienta Služby Azure Cosmos DB:

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

Pak načtěte a zapisujte data, jak je popsáno v těchto ukázkách.

JavaScript

Inicializace klienta Služby Azure Cosmos DB:

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

Pak načtěte a zapisujte data, jak je popsáno v těchto ukázkách.

Vyčištění kroků

Tip

Postup v tomto článku se může mírně lišit v závislosti na portálu, od který začínáte.

  1. Přihlaste se k portálu Azure.

  2. Vyberte prostředek, který chcete odstranit.

  3. Vyberte Odstranit.

  4. Po zobrazení výzvy potvrďte odstranění.

Další kroky

Další informace o spravovaných identitách pro prostředky Azure:

Další informace o službě Azure Cosmos DB: