Como usar o Azure Key Vault em .NET Core

O Azure Key Vault é serviço de nuvem para armazenar e acessar segredos de maneira segura. Um segredo é qualquer coisa a qual você queira controlar rigidamente o acesso, como chaves de API, senhas, certificados ou chaves criptográficas. O serviço do Key Vault oferece suporte a dois tipos de contêineres: cofres e pools HSM (módulo de segurança de hardware) gerenciados. Os cofres oferecem suporte ao armazenamento de chaves, segredos e certificados apoiados por software e HSM.

Autenticação

Para realizar operações com o Key Vault, primeiro você precisará autenticar-se a ele. Existem três maneiras de autenticar-se ao Key Vault:

  • Managed identities for Azure resources: ao implantar um aplicativo em uma máquina virtual no Azure, você pode atribuir uma identidade à sua máquina virtual que tenha acesso ao Key Vault. Você também pode atribuir identidades a outros recursos do Azure. O benefício dessa abordagem é que o aplicativo ou serviço não está gerenciando a rotação do primeiro segredo. O Azure gira a identidade automaticamente. Recomendamos essa abordagem como uma prática recomendada.
  • Service principal and certificate: você pode usar um service principal e um certificado associado que tenha acesso ao Key Vault. Não recomendamos essa abordagem porque o proprietário ou desenvolvedor do aplicativo deve alternar o certificado.
  • Service principal and secret: embora você possa usar um service principal e secret  para se autenticar no Key Vault, não o recomendamos. É difícil girar automaticamente o segredo de bootstrap que é usado para autenticar no Key Vault.

Usando o Key Vault do Azure para seus aplicativos da Web

Passo a Passo

Criar o Azure App Service

01 – Faça login no portal do Azure.

02 – No portal do Azure, abra o Cloud Shell e selecione PowerShell.

03 – Execute o script abaixo para criar o App Service Plan e o App Service no East US.

O script está disponível para download em meu GitHub, clique na imagem abaixo para conferir.

 

 

 

 

# Variáveis
$Location =”East US”
$AppName = “AppService-dev-01”
$RGname = “RG-App_Service”
$tier = “Standard”
$Planname = “AppService-dev-01”

# Criar um grupo de recursos
New-AzResourceGroup -Name $RGname -Location $Location

# Criar App Service Plan
New-AzAppservicePlan -Name $Planname -ResourceGroupName $RGname -Location $Location -Tier $tier

# Criar App Service
New-AzWebApp -Name $AppName -ResourceGroupName $RGname -Location $Location -AppServicePlan $Planname

04 – Como podemos observar na imagem abaixo o App Service foi provisionado.

Configurando Managed Identities

As identidades gerenciadas fornecem uma identidade para os aplicativos usarem ao se conectarem a recursos que dão suporte à autenticação do Azure AD (Azure Active Directory). Os aplicativos podem usar a identidade gerenciada para obter tokens do Azure AD. Por exemplo, um aplicativo pode usar uma identidade gerenciada para acessar recursos como Azure Key Vault.

Para maiores informações sobre managed identities acesse o link abaixo.

https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview

05 – No portal do Azure pesquise por App services.

06 – Na tela App Services, selecione o App Service que provisionamos appService-dev-01.

07 – Após selecionar o App service desejado, em Settings clique em Identity.

08 – Na tela Identity, selecione system assigned, para a opção Status selecione On e clique em Save.

09 – Como podemos observar na imagem abaixo o recurso foi habilitado.

Criar o Key vault

10 – No portal do Azure, pesquise por Key vaults.

11- Na tela Key vaults, clique em + Create.

12 – Na tela Create Key vault, selecione a assinatura, grupo de recursos.

Para a opção Instance details, selecione um nome para o Key vault, região e para a opção Princing tier podemos escolher entre Standard  e Premium, para nosso exemplo vamos selecionar Standard.

Para a opção Recovery options, vamos deixar o valor padrão que é 90 e a opção Disable purge protection (allow key vault and objects to be purged during retention period) selecionada, em seguida clique em Next: Access policy.

13 – Na tela Acces policy, em Permission model deixe selecionado Vault access policy, percebam que meu usuário é adicionado automaticamente a policy com algumas permissões, deixe as configurações padrão e clique em Next: Networking.

14 – Na tela Networking, deixe a configuração padrão Public endpoint (all networks) selecionada e clique em Review + create.

15 – Na tela Review + create, verifique se todas as informações estão corretas e clique em Create.

16 – Aguarde o deployment ser finalizado.

17 – Como podemos observar o recurso foi provisionado, clique em Go to resource.

18 – Na tela do Key vault que criamos, em Settings clique em Secrets.

19 – Na tela Secrets, clique em + Generate/Import.

20 – Na tela Create a secret para a opção Upload option selecione Manual, em Name digite um nome para o secret em value digite o valor para o secret, também podemos definir uma data de expiração para o secret, deixe as demais configurações como padrão e clique em Create.

O valor que foi utilizado para o secret MyPassword é jadsonalves.com.br

21 – Abra o Azure Cloud Shell, selecione a opção Bash e execute o comando abaixo para saber o valor que foi definido no secret.

MyPassword = Nome do Secret

keyvaultappservicedev = Nome do Key Vault

az keyvault secret show -n MyPassword –vault-name keyvaultappservicedev

Observe que o valor do secret é jadsonalves.com.br

22 – Na tela do Key vault, em Settings clique em Access policies.

23 – Na tela Access policies, clique em + Add Access Policy.

24 – Na tela Add access policy, em Configure from template selecione Secret Management, ao selecionar Secret Management em Secret permissions temos 7 permissões que são atribuídas automaticamente (Get, List, Set, Delete, Recover, Backup e Restore), na opção Select principal clique em None selected, digite o nome do App service que criamos AppService-dev-01 e clique em Select.

Em seguida clique em Add.

25 – Na tela Access policies, perceba que adicionamos o AppService-dev-01, clique em Save.

Demos permissão ao AppService-dev-01 para gerenciar os secrets em nosso Key vault.

26 – Guarde o secret name (MyPassword) e Vault (URI https://keyvaultappservicedev.vault.azure.net/), porque vamos precisar dessas informações para adicionar em nossa aplicação .NET.

Implantar aplicação .NET Core

A aplicação abaixo consulta o valor de um secret em um Key vault e imprime esse valor na tela.

O script da aplicação está disponível para download em GitHub, clique na imagem abaixo para conferir.

 

 

 

 

27 – É importante que você tenha baixo e instalado o Visual Studio para prosseguir nesse tutorial, caso ainda não tenha feito o download do Visual Studio acesse o link abaixo, em seguida faça a instalação.

https://visualstudio.microsoft.com/downloads/

28 – Abra o Visual Studio, em Get started clique em Open a project or solution, em seguida selecione a pasta onde está a aplicação e clique no arquivo key-vault-dotnet-core-quickstart.

29 – Após abrir a aplicação, expanda Key-vault-dotnet-core-quickstart, clique em Program.cs, role a barra de rolagem até a ultima linha.

Para a opção private static string GetKeyVaultEndpoint() vamos adicionar o valor da URI do Key vault, devendo ficar da seguinte forma:

private static string GetKeyVaultEndpoint() => “https://keyvaultappservicedev.vault.azure.net/”;

Com essa configuração a aplicação vai da um get no Key vault e pegar o valor do secret.

30 – Na aplicação Key-vault-dotnet-core-quickstart, expanda Pages também expanda About.cshtml e clique em About.cshtml.cs, role a barra de rolagem até a ultima linha.

Na linha Message = “My key vault = ” + _configuration[“AppSecret”] vamos adicionar o nome da nossa secre MyPassword, deixando a configuração da seguinte forma:

Message = “My key vault = ” + _configuration[“MyPassword”];

Essa configuração imprimi o valor do secret na tela.

31 – Na tela do Visual Studio, clique em Build, e clique em Publish key-vault-dotnet-core-quickstart.

32 –  Na tela Publish, em Target selecione Azure.

33 – Em Specific target selecione Azure App service (Windows) e clique em Next.

34 – Em App Service, seleciona a subscription, em View selecione Resource type para a opção App Service instances expanda Web App e selecione o AppService-dev-01, em seguida clique em Finish.

35 – Voltamos para a tela inicial do Publish, após definirmos todas as configurações necessárias clique em Publish.

36 – Aguarde a publicação da aplicação no Azure App Service finalizar

37 – Como podemos observar a aplicação foi publicada com sucesso, automaticamente a aplicação será aberta em seu navegador padrão.

38 – Após a aplicação ser aberta em seu navegador padrão, clique em About e observe que temos o valor do secret My password sendo exibido em nossa tela.

Comente suas sugestões e observações! 

Forte abraço, obrigado e até o próximo post

Deixe um comentário

O seu endereço de e-mail não será publicado.