Tutorial: Usar o Azure Key Vault com uma máquina virtual no .NET

O Azure Key Vault ajuda a proteger segredos como chaves de API, as cadeias de conexão de banco de dados que você precisa para acessar seus aplicativos, serviços e recursos de TI.

Neste tutorial, você aprenderá como fazer um aplicativo de console ler as informações no Azure Key Vault. O aplicativo usará a identidade gerenciada da máquina virtual para se autenticar no Key Vault.

Este tutorial mostra como:

  • Crie um grupos de recursos.
  • Crie um cofre da chave.
  • Adicionar um segredo ao cofre de chaves.
  • Recuperar um segredo do cofre de chaves.
  • Crie uma máquina virtual do Azure.
  • Habilitar uma identidade gerenciada para a Máquina Virtual.
  • Atribuir permissões à identidade da VM.

Antes de começar, leia Conceitos básicos do Key Vault.

Se você não tiver uma assinatura do Azure, crie uma conta gratuita.

Pré-requisitos

Para Windows, Mac e Linux:

Criar recursos e atribuir permissões

Antes de começar a codificar, você precisará criar alguns recursos, colocar um segredo no cofre de chaves e atribuir permissões.

Entrar no Azure

Para entrar no Azure usando o seguinte comando:

az login

Criar um grupo de recursos e um cofre de chaves

Este início rápido usa um Azure Key Vault pré-criado. Você pode criar um cofre de chaves seguindo as etapas no Início rápido da CLI do Azure, no Início rápido do Azure PowerShell ou no Início rápido do portal do Azure.

Como alternativa, você pode simplesmente executar os comandos da CLI do Azure ou o Azure PowerShell abaixo.

Importante

Cada cofre de chaves deve ter um nome exclusivo. Substitua <seu-nome-de cofre-de-chaves-exclusivo> 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"

Preencher seu cofre de chaves com um segredo

Vamos criar um segredo chamado mySecret, com um valor de Êxito! . Um segredo pode ser uma senha, uma cadeia de conexão SQL ou qualquer outra informação que você precise manter em segurança e disponível para o 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 do Windows ou Linux usando um dos seguintes métodos:

Windows Linux
CLI do Azure CLI do Azure
PowerShell PowerShell
Azure portal Azure portal

Atribuir uma identidade à VM

Crie uma identidade atribuída pelo sistema para a máquina virtual com o seguinte exemplo:

az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>

Observe a identidade atribuída pelo 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

Atribua as permissões de identidade criadas anteriormente ao cofre de chaves, com o comando az keyvault set-policy:

az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions  get list set delete

Entrar na máquina virtual

Para entrar na máquina virtual, siga as instruções em Conectar-se e entrar em uma máquina virtual do Azure do Windows ou Conectar-se e fazer logon em uma máquina virtual do Azure do Linux.

Configurar o aplicativo de console

Criar um aplicativo de console e instalar os pacotes necessários usando o comando dotnet.

Instalar o .NET Core

Para instalar o .NET Core, acesse a página Downloads do .NET.

Criar e executar um aplicativo .NET de exemplo

Abra um prompt de comando.

Você pode exibir "Olá, Mundo" no console executando os comandos a seguir:

dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run

Instalar o pacote

Na janela do console, instale a biblioteca de clientes de Segredos do Azure Key Vault para .NET:

dotnet add package Azure.Security.KeyVault.Secrets

Para este guia de início rápido, você precisará instalar o seguinte pacote de identidade para autenticação no Azure Key Vault:

dotnet add package Azure.Identity

Editar o aplicativo de console

Abra o arquivo Program.cs e adicione esses pacotes:

using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

Adicione essas linhas, atualizando o URI para refletir o vaultUri do cofre de chaves. O código abaixo está usando 'DefaultAzureCredential()' para autenticação no cofre de chaves, que está usando o token da identidade gerenciada do aplicativo para autenticar. Ele também está usando retirada exponencial para novas tentativas, caso o cofre de chaves esteja 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.");

        }
    }

Limpar os recursos

Quando eles não forem mais necessários, exclua a máquina virtual e o cofre de chaves.

Próximas etapas