O Azure Key Vault é um serviço de nuvem que fornece um armazenamento seguro de informações confidenciais do seu ambiente. Você pode armazenar com segurança chaves, senhas, certificados e outros segredos. Para obter mais informações sobre o Azure Key Vault, consulte sua documentação.
O Key Vault é adequado para uso em produção, mas em alguns casos, os desenvolvedores podem querer acessar os segredos do ambiente de desenvolvimento.
Neste artigo, apresentarei como configurar e acessar o Azure Key Vault de uma aplicação .NET.
Pré-requisitos
- Azure
- Visual Studio 2022 (.NET 6.0)
- Packages:
Web API
O primeiro passo é criar o recurso Key Vault na conta Azure. Em seguida, crie a estrutura abaixo no seu appsettings.json:
- Endpoint é o Vault URI informado na tela principal do Key Vault criado:
- Client ID e Tenant ID é o código da sua tenant do Azure, para obter esse valor é necessário criar um App Registration conforme a tela de cadastro abaixo:
Depois de criado você será redirecionado para a tela principal do App Registration, onde é necessário copiar o código do client ID e tenant ID:
- Client Secret é a chave de acesso ao Key Vault. Para criar, clique em Certificates & secrets e crie um secret com a expiração de um ano, em seguida copie o valor do campo Value:
Em seguida, configure o Access policies para obter permissões de acesso ao cofre. Clique em Create e selecione o template Key & Secret Management:
E na guia Principal, escolha o App Registration criado:
E por fim, crie um segredo no Key Vault. Clique em Secrets e insira uma nova chave com o nome de chave-teste, por exemplo e em Secret value insira um valor qualquer:
Na classe Program.cs, configure conforme o código abaixo:
O método de extensão AddKeyVault() contém a configuração de acesso às chaves do Key Vault:
Ao iniciar a aplicação, são carregadas todas as chaves do Key Vault no arquivo IConfiguration, ou seja, caso você tenha variáveis configuradas no arquivo appsettings.json e Key Vault, todas elas serão carregadas no arquivo IConfiguration para acesso estático.
A injeção de dependência ISecretsService é responsável por obter, criar e deletar as chaves no Key Vault. Já a IKeyVaultService é responsável apenas por obter os valores carregados no appsettings.json (IConfiguration).
Repare que em ClientSecretCredential é configurado o acesso ao Key Vault de acordo com as chaves de acesso inseridas no appsettings.json.
E por fim, crie um controller injetando as duas interfaces de dependência para acessar às chaves do seu cofre.
Testando
Para realizar os testes, execute o endpoint POST /secrets no Swagger para criação de chaves no Key Vault. Em seguida execute o endpoint GET /secrets/key-vault para obter o valor da chave inserida, e depois execute o endpoint GET /secrets/configuration para obter os valores das chaves carregadas no IConfiguration.
Finalizando
O Azure Key Vault ajuda você a manter os segredos das suas aplicações de forma segura, confidencial e fora de acessos de pessoas não autorizadas. Esses segredos incluem: ConnectionString, chaves de API e variáveis de ambiente. Você também pode aproveitar o Key Vault para manter os segredos fora do controle do código-fonte em um local de armazenamento centralizado, deixando suas aplicações com mais segurança.
Os detalhes completo desta série você encontra no meu GitHub: https://github.com/hgmauri/sample-key-vault