Tutorial: Use o Azure Key Vault com uma máquina virtual em .NET

O Azure Key Vault ajuda-o a proteger segredos como chaves de API e cadeias de ligação à base de dados que as suas aplicações, serviços e recursos precisam.

Neste tutorial, configura uma aplicação de consola para ler informações do Azure Key Vault. A aplicação utiliza a identidade gerida da VM para autenticar no Key Vault.

Este tutorial mostra-lhe como:

  • Crie um grupo de recursos.
  • Crie um cofre de chaves.
  • Adicione um segredo ao cofre de chaves.
  • Obter um segredo do cofre de chaves.
  • Crie uma máquina virtual Azure.
  • Habilite uma identidade gerenciada para a Máquina Virtual.
  • Atribua permissões à identidade da VM.

Antes de começares, lê Key Vault conceitos básicos.

Se não tiver uma subscrição Azure, crie uma conta free.

Pré-requisitos

Para Windows, Mac e Linux:

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

Iniciar sessão no Azure com a CLI do Azure ou Azure PowerShell:

az login

Criar um grupo de recursos e um cofre de chaves

Este quickstart utiliza um cofre de chaves Azure pré-criado. Você pode criar um cofre de chaves seguindo as etapas nestes guias rápidos:

Em alternativa, pode executar estes comandos CLI do Azure ou Azure PowerShell.

Importante

Cada cofre de chaves deve ter um nome exclusivo. Substitua <vault-name> pelo nome do seu cofre de chaves nos exemplos seguintes.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Preencha o cofre das chaves com um segredo

Vamos criar um segredo chamado mySecret, com um valor de Sucesso!. Um segredo pode ser uma palavra-passe, uma cadeia de ligação SQL ou qualquer outra informação que precise para manter segura e disponível para a sua aplicação.

Para adicionar um segredo ao cofre de chaves recém-criado, use o seguinte comando:

az keyvault secret set --vault-name "<vault-name>" --name "mySecret" --value "Success!"

Criar uma máquina virtual

Crie uma VM 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 gerida atribuída pelo sistema para a VM:

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

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 obter permissões para o seu cofre de chaves através de Role-Based Controlo de Acesso (RBAC), atribua uma função ao seu "Nome Principal do Utilizador" (UPN) usando o comando CLI do Azure az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

Substitua <upn>, <subscription-id>, e <vault-name> pelos seus valores reais. Se usaste um nome diferente de grupo de recursos, substitui também "myResourceGroup". Seu UPN normalmente estará no formato de um endereço de e-mail (por exemplo, username@domain.com).

Iniciar sessão na VM

Para iniciar sessão na VM, siga as instruções em Connect e inicie sessão numa máquina virtual Azure Windows ou Connect e inicie sessão numa máquina virtual Azure Linux.

Configurar a aplicação da consola

Cria uma aplicação de consola e instala os pacotes necessários com o dotnet comando.

Instalar .NET

Para instalar o .NET, vá à página de downloads do .NET.

Crie e execute uma aplicação .NET de exemplo

Abra uma linha de comando e execute:

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

A aplicação imprime "Hello World" na consola.

Instale os pacotes

A partir da janela da consola, instale a biblioteca cliente Azure Key Vault Secrets e a biblioteca Azure Identity:

dotnet add package Azure.Security.KeyVault.Secrets
dotnet add package Azure.Identity

Editar o aplicativo de console

Abra Program.cs e adicione as seguintes using diretivas:

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

Substitua o Main método pelo seguinte código, atualizando <vault-name> para o nome do seu cofre de chaves. Este código utiliza o DefaultAzureCredential para autenticar no Key Vault, que utiliza um token da identidade gerida da VM. Também configura um backoff exponencial para tentativas no caso de o Key Vault ser limitado.

  class Program
    {
        static void Main(string[] args)
        {
            string secretName = "mySecret";
            string keyVaultName = "<vault-name>";
            var kvUri = "https://<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.");

        }
    }

Limpeza de recursos

Quando já não precisares deles, apaga a VM e o cofre de chaves.

Próximos passos