Como usar identidades gerenciadas para se conectar ao Azure Cosmos DB a partir de uma máquina virtual do Azure
Neste artigo, configuramos uma máquina virtual para usar identidades gerenciadas para se conectar ao Azure Cosmos DB. O Azure Cosmos DB é um banco de dados NoSQL totalmente gerenciado para desenvolvimento de aplicativos modernos. As identidades gerenciadas para recursos do Azure permitem que seus aplicativos se autentiquem ao acessar serviços que dão suporte à autenticação do Microsoft Entra usando uma identidade gerenciada pelo Azure.
Pré-requisitos
- Uma compreensão básica de identidades gerenciadas. Se quiser saber mais sobre identidades gerenciadas para recursos do Azure antes de continuar, revise a visão geral de identidades gerenciadas.
- Você deve ter uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Você pode precisar do PowerShell ou da CLI.
- Visual Studio Community Edition ou algum outro ambiente de desenvolvimento de sua escolha.
Criar um grupo de recursos
Crie um grupo de recursos chamado mi-test. Usamos esse grupo de recursos para todos os recursos usados neste tutorial.
- Criar um grupo de recursos usando o portal do Azure
- Criar um grupo de recursos usando a CLI
- Criar um grupo de recursos usando o PowerShell
Criar uma VM do Azure com uma identidade gerenciada
Para este tutorial, você precisa de uma máquina virtual (VM) do Azure. Crie uma máquina virtual com uma identidade gerenciada atribuída ao sistema habilitada chamada mi-vm-01. Você também pode criar uma identidade gerenciada atribuída pelo usuário chamada mi-ua-01 no grupo de recursos que criamos anteriormente (mi-test). Se você usar uma identidade gerenciada atribuída pelo usuário, poderá atribuí-la a uma VM durante a criação.
Criar uma VM com uma identidade gerenciada atribuída ao sistema
Para criar uma VM do Azure com a identidade gerenciada atribuída ao sistema habilitada, sua conta precisa da atribuição de função de Colaborador de Máquina Virtual . Nenhuma outra atribuição de função do Microsoft Entra é necessária.
- No portal do Azure, procure máquinas virtuais.
- Selecione Criar
- Na guia Noções básicas, forneça as informações necessárias.
- Escolha Next: Discos >
- Continue preenchendo as informações conforme necessário e, na guia Gerenciamento, localize a seção Identidade e marque a caixa ao lado de Identidade gerenciada atribuída ao sistema
Para obter mais informações, consulte a documentação das máquinas virtuais do Azure:
Criar uma VM com uma identidade gerenciada atribuída pelo usuário
As etapas abaixo mostram como criar uma máquina virtual com uma identidade gerenciada atribuída pelo usuário configurada.
Atualmente, o portal do Azure não oferece suporte à atribuição de uma identidade gerenciada atribuída pelo usuário durante a criação de uma VM. Você deve criar uma máquina virtual e, em seguida, atribuir um usuário atribuído identidade gerenciada a ela.
Configurar identidades gerenciadas para recursos do Azure em uma VM usando o portal do Azure
Criar uma conta do Azure Cosmos DB
Agora que temos uma VM com uma identidade gerenciada atribuída pelo usuário ou uma identidade gerenciada atribuída pelo sistema, precisamos de uma conta do Azure Cosmos DB disponível onde você tenha direitos administrativos. Se você precisar criar uma conta do Azure Cosmos DB para este tutorial, o início rápido do Azure Cosmos DB fornece etapas detalhadas sobre como fazer isso.
Nota
As identidades gerenciadas podem ser usadas para acessar qualquer recurso do Azure que ofereça suporte à autenticação do Microsoft Entra. Este tutorial pressupõe que sua conta do Azure Cosmos DB será configurada conforme mostrado abaixo.
Definição | valor | Description |
---|---|---|
Subscrição | Nome da subscrição | Selecione a subscrição do Azure que pretende utilizar para esta conta do Azure Cosmos DB. |
Grupo de Recursos | Nome do grupo de recursos | Selecione mi-test ou Create new (Criar novo) e insira um nome exclusivo para o novo grupo de recursos. |
Nome da Conta | Um nome exclusivo | Insira um nome para identificar sua conta do Azure Cosmos DB. Uma vez que documents.azure.com é anexado ao nome que indicar para criar o URI, utilize um nome exclusivo. O nome só pode conter letras minúsculas, números e o caráter de hífen (-). Deve ter entre 3 e 44 caracteres de comprimento. |
API | O tipo de conta a criar | Selecione Azure Cosmos DB para NoSQL para criar um banco de dados de documentos e consultar usando a sintaxe SQL. Saiba mais sobre a API SQL. |
Location | A região mais próxima dos seus utilizadores | Selecione a localização geográfica para alojar a sua conta do Azure Cosmos DB. Utilize a localização mais próxima dos utilizadores para lhes dar o acesso mais rápido aos dados. |
Nota
Se você estiver testando, talvez queira aplicar o desconto de camada gratuita do Azure Cosmos DB. Com o nível gratuito do Azure Cosmos DB, você receberá os primeiros 1000 RU/s e 25 GB de armazenamento gratuitamente em uma conta. Saiba mais sobre o nível gratuito. Tenha em mente que, para o propósito deste tutorial, essa escolha não faz diferença.
Conceder acesso
Neste ponto, devemos ter uma máquina virtual configurada com uma identidade gerenciada e uma conta do Azure Cosmos DB. Antes de continuarmos, precisamos conceder à identidade gerenciada algumas funções diferentes.
Primeiro, conceda acesso ao plano de gerenciamento do Azure Cosmos DB usando o Azure RBAC. A identidade gerenciada precisa ter a função de Colaborador da Conta do Banco de Dados de Documentos atribuída para criar bancos de dados e contêineres.
Você também precisa conceder à identidade gerenciada uma função de colaborador usando o Azure Cosmos DB RBAC. Você pode ver etapas específicas abaixo.
Nota
Usaremos a função de contribuidor de dados internos do Cosmos DB. Para conceder acesso, você precisa associar a definição de função à identidade. No nosso caso, a identidade gerenciada associada à nossa máquina virtual.
No momento, não há nenhuma opção de atribuição de função disponível no portal do Azure
Aceder a dados
Obter acesso ao Azure Cosmos DB usando identidades gerenciadas pode ser obtido usando a biblioteca Azure.identity para habilitar a autenticação em seu aplicativo. Você pode chamar ManagedIdentityCredential diretamente ou usar DefaultAzureCredential.
A classe ManagedIdentityCredential tenta autenticar usando uma identidade gerenciada atribuída ao ambiente de implantação. A classe DefaultAzureCredential passa por diferentes opções de autenticação na ordem. A segunda opção de autenticação que DefaultAzureCredential tenta é Identidades gerenciadas.
No exemplo mostrado abaixo, você cria um banco de dados, um contêiner, um item no contêiner e lê de volta o item recém-criado usando a identidade gerenciada atribuída ao sistema da máquina virtual. Se você quiser usar uma identidade gerenciada atribuída pelo usuário, precisará especificar a identidade gerenciada atribuída pelo usuário especificando a ID do cliente da identidade gerenciada.
string userAssignedClientId = "<your managed identity client Id>";
var tokenCredential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId });
Para usar o exemplo abaixo, você precisa ter os seguintes pacotes NuGet:
- Azure.Identity
- Microsoft.Azure.Cosmos
- Microsoft.Azure.Management.CosmosDB
Além dos pacotes NuGet acima, você também precisa habilitar Incluir pré-lançamento e adicionar 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();
}
}
}
Exemplos específicos do idioma usando ManagedIdentityCredential:
.NET
Inicialize seu cliente do Azure Cosmos DB:
CosmosClient client = new CosmosClient("<account-endpoint>", new ManagedIdentityCredential());
Em seguida, leia e grave dados.
Java
Inicialize seu cliente do Azure Cosmos DB:
CosmosAsyncClient Client = new CosmosClientBuilder().endpoint("<account-endpoint>") .credential(new ManagedIdentityCredential()) .build();
Em seguida, leia e grave os dados conforme descrito nestes exemplos
JavaScript
Inicialize seu cliente do Azure Cosmos DB:
const client = new CosmosClient({ "<account-endpoint>", aadCredentials: new ManagedIdentityCredential() });
Em seguida, leia e grave os dados conforme descrito nestes exemplos
Etapas de limpeza
Gorjeta
As etapas neste artigo podem variar ligeiramente com base no portal a partir do qual você começou.
Inicie sessão no portal do Azure.
Selecione o recurso que deseja excluir.
Selecione Eliminar.
Quando lhe for perguntado, confirme a eliminação.
Próximos passos
Saiba mais sobre identidades gerenciadas para recursos do Azure:
Saiba mais sobre o Azure Cosmos DB: