Tutorial: Usar o Azure Key Vault com uma máquina virtual no .NET
O Azure Key Vault ajuda você a proteger segredos como chaves de API, as cadeias de conexão de banco de dados necessárias para acessar seus aplicativos, serviços e recursos de TI.
Neste tutorial, você aprenderá a fazer com que um aplicativo de console leia informações do Cofre de Chaves do Azure. O aplicativo usaria a identidade gerenciada pela máquina virtual para autenticar no Cofre da Chave.
Este tutorial mostra-lhe como:
- Crie um grupo de recursos.
- Criar um cofre de chaves.
- Adicione um segredo ao cofre de chaves.
- Obter um segredo do cofre de chaves.
- Crie uma máquina virtual do Azure.
- Habilite uma identidade gerenciada para a Máquina Virtual.
- Atribua permissões à identidade da VM.
Antes de começar, leia os conceitos básicos do Key Vault.
Se não tiver uma subscrição do Azure, crie uma conta gratuita.
Pré-requisitos
Para Windows, Mac e Linux:
- Git
- O SDK do .NET Core 3.1 ou posterior.
- CLI do Azure ou Azure PowerShell
Criar recursos e atribuir permissões
Antes de começar a codificar, você precisa criar alguns recursos, colocar um segredo no cofre de chaves e atribuir permissões.
Iniciar sessão no Azure
Para entrar no Azure usando o seguinte comando:
az login
Criar um grupo de recursos e um cofre de chaves
Este guia de início rápido usa um cofre de chaves do Azure pré-criado. Você pode criar um cofre de chaves seguindo as etapas no início rápido da CLI do Azure, início rápido do Azure PowerShell ou início rápido do portal do Azure.
Como alternativa, você pode executar esses comandos da CLI do Azure ou do Azure PowerShell.
Importante
Cada cofre de chaves deve ter um nome exclusivo. Substitua <your-unique-keyvault-name> pelo nome do seu cofre de chaves nos exemplos a seguir.
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization
Preencha o cofre das chaves com um segredo
Vamos criar um segredo chamado mySecret, com um valor de Sucesso!. Um segredo pode ser uma senha, uma cadeia de conexão SQL ou qualquer outra informação que você precise manter segura e disponível para seu aplicativo.
Para adicionar um segredo ao cofre de chaves recém-criado, use o seguinte comando:
az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"
Criar uma máquina virtual
Crie uma máquina virtual Windows ou Linux usando um dos seguintes métodos:
Windows | Linux |
---|---|
CLI do Azure | CLI do Azure |
PowerShell | PowerShell |
Portal do Azure | Portal do Azure |
Atribuir uma identidade à VM
Crie uma identidade atribuída ao sistema para a máquina virtual com o seguinte exemplo:
az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>
Observe a identidade atribuída ao sistema que é exibida no código a seguir. A saída do comando anterior seria:
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
Atribuir permissões à identidade da VM
Para conceder permissões ao seu aplicativo para seu cofre de chaves por meio do RBAC (Controle de Acesso Baseado em Função), atribua uma função usando o comando az role assignment create da CLI do Azure.
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Substitua <app-id>
, <subscription-id>
<resource-group-name>
, e <your-unique-keyvault-name>
pelos seus valores reais. <app-id>
é o ID do Aplicativo (cliente) do seu aplicativo registrado no Microsoft Entra.
Entrar na máquina virtual
Para entrar na máquina virtual, siga as instruções em Conectar e entrar em uma máquina virtual do Windows do Azure ou Conectar e entrar em uma máquina virtual do Azure Linux.
Configurar a aplicação da consola
Crie um aplicativo de console e instale os pacotes necessários usando o dotnet
comando.
Instale o .NET Core
Para instalar o .NET Core, vá para a página de downloads do .NET.
Criar e executar um aplicativo .NET de exemplo
Abra uma linha de comandos.
Você pode imprimir "Hello World" no console executando os seguintes comandos:
dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run
Instalar o pacote
Na janela do console, instale a biblioteca de cliente Azure Key Vault Secrets para .NET:
dotnet add package Azure.Security.KeyVault.Secrets
Para este início rápido, você precisará instalar o seguinte pacote de identidade para autenticar no Cofre da Chave do Azure:
dotnet add package Azure.Identity
Editar o aplicativo de console
Abra o arquivo Program.cs e adicione estes pacotes:
using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
Adicione essas linhas, atualizando o URI para refletir o vaultUri
cofre de chaves. O código abaixo está usando 'DefaultAzureCredential()' para autenticação no cofre de chaves, que está usando token da identidade gerenciada do aplicativo para autenticar. Ele também está usando backoff exponencial para novas tentativas no caso de cofre de chaves está sendo limitado.
class Program
{
static void Main(string[] args)
{
string secretName = "mySecret";
string keyVaultName = "<your-key-vault-name>";
var kvUri = "https://<your-key-vault-name>.vault.azure.net";
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(),options);
Console.Write("Input the value of your secret > ");
string secretValue = Console.ReadLine();
Console.Write("Creating a secret in " + keyVaultName + " called '" + secretName + "' with the value '" + secretValue + "' ...");
client.SetSecret(secretName, secretValue);
Console.WriteLine(" done.");
Console.WriteLine("Forgetting your secret.");
secretValue = "";
Console.WriteLine("Your secret is '" + secretValue + "'.");
Console.WriteLine("Retrieving your secret from " + keyVaultName + ".");
KeyVaultSecret secret = client.GetSecret(secretName);
Console.WriteLine("Your secret is '" + secret.Value + "'.");
Console.Write("Deleting your secret from " + keyVaultName + " ...");
client.StartDeleteSecret(secretName);
System.Threading.Thread.Sleep(5000);
Console.WriteLine(" done.");
}
}
Clean up resources (Limpar recursos)
Quando não forem mais necessários, exclua a máquina virtual e o cofre de chaves.