Managed Identity Identidade Gerenciada (Azure)
Tags: csharp, azure, webdev, programming
Published: 2024-02-21 12:28:30

## Conceitos Importantes:

**Microsoft Entra Id:** O Microsoft Entra Id é um serviço de gerenciamento de acesso e identidade baseado na nuvem que permite aos usuários autenticarem-se e acessarem recursos externos, como o Microsoft 365, o portal do Azure e milhares de outros aplicativos SaaS. Ele fornece uma maneira segura de gerenciar as identidades dos usuários e controlar seu acesso a recursos na nuvem.

**Identidade Gerenciada**: A Identidade Gerenciada (Managed Identity) é um recurso no Azure que fornece credenciais de autenticação de forma segura para os aplicativos e serviços em execução na nuvem. Ela elimina a necessidade de armazenar credenciais de autenticação dentro do código ou configurações de aplicativos, melhorando a segurança e simplificando a gestão de identidades.

A Identidade Gerenciada no Microsoft Entra Id é uma funcionalidade que permite aos aplicativos e serviços em execução na nuvem do Azure obterem automaticamente credenciais de autenticação de forma segura, sem a necessidade de armazenar credenciais explicitamente no código ou em configurações.

## Tipos de Identidades Gerenciadas

Existem dois tipos principais de Identidades Gerenciadas no Azure:

1. **Identidade Gerenciada do Sistema**: Associada a um recurso específico no Azure, como uma máquina virtual ou uma função de aplicativo. Essa identidade é criada automaticamente pelo Azure e é exclusiva para o recurso ao qual está fortemente associada.
2. **Identidade Gerenciada do Serviço**: Associada a um serviço ou aplicativo, em vez de um recurso específico. Ela pode ser usada por vários recursos dentro do mesmo serviço ou aplicativo.

## Vejamos a diferença:

**Antes:**
Antes da introdução da Identidade Gerenciada no Azure, os aplicativos muitas vezes precisavam armazenar credenciais de autenticação, como nomes de usuário e senhas, em arquivos de configuração ou em código fonte. Isso representava um risco de segurança, pois essas credenciais poderiam ser comprometidas se o código ou a configuração fossem acessados por pessoas não autorizadas.

```csharp
// Caminho para o arquivo de certificado
string certFilePath = "caminho/para/seu/certificado.pfx";

// Senha do certificado
string certPassword = "senha-do-certificado";

try {
	// Carregar o certificado
	X509Certificate2 cert = new X509Certificate2(certFilePath, certPassword);

	// Criar um objeto ClientCertificateCredential
	ClientCertificateCredential credential = new ClientCertificateCredential(
	  tenantId: "seu-tenant-id",
	  clientId: "seu-client-id",
    certificate: cert);

	// Autenticar com o Azure
	var azure = Azure.Configure()
	  WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
	  .Authenticate(credential)
    .WithDefaultSubscription();

	// Exemplo de uso: listar VMs
  var vms = azure.VirtualMachines.List();
  foreach (var vm in vms)
  {
	  Console.WriteLine(vm.Name);
  }
} catch (Exception ex) {
	Console.WriteLine($"Erro ao autenticar com o Azure: {ex.Message}");
}
```

**Depois:**
Com a Identidade Gerenciada, os aplicativos podem obter credenciais de autenticação de forma segura e automática, sem a necessidade de **armazenar credenciais diretamente.** Por exemplo, uma máquina virtual no Azure pode ter uma Identidade Gerenciada associada a ela. Quando o aplicativo em execução na máquina virtual precisa acessar recursos no Azure, ele pode usar a Identidade Gerenciada para autenticar-se de forma segura, sem precisar armazenar ou gerenciar credenciais explicitamente. Isso melhora a segurança e simplifica a gestão de identidades em ambientes de nuvem.

```csharp 
// Configure a autenticação usando AzureCliCredential ou InteractiveBrowserCredential
var credential = new DefaultAzureCredential();

// Crie um cliente do Key Vault
var client = new SecretClient(new Uri(keyVaultUri), credential);

// Recupere um segredo do Key Vault
string secretName = "seu-segredo";
KeyVaultSecret secret = client.GetSecret(secretName);
```