Como usar o Azure Key Vault para armazenar senhas do ARM Templates

O que é o Azure Key Vault

Em vez de colocar um valor seguro (como uma senha) diretamente no seu modelo ou arquivo de parâmetro, você pode recuperar o valor de um Azure Key Vault durante a implantação. Você recupera o valor fazendo referência ao cofre de chaves e ao segredo no arquivo de parâmetros. O valor nunca é exposto porque você apenas fazer referência à sua ID de cofre de chaves.

O Azure Key Vault ajuda a proteger chaves criptográficas e segredos usados por aplicativos e serviços em nuvem. Usando o Key Vault, você pode criptografar chaves e segredos (como chaves de autenticação, chaves de conta de armazenamento, chaves de criptografia de dados, . Arquivos PFX e senhas) usando chaves protegidas por módulos de segurança de hardware (HSMs).
O Key Vault agiliza o processo de gerenciamento de chaves e permite que você mantenha o controle das chaves que acessam e criptografam seus dados. Os desenvolvedores podem criar chaves para desenvolvimento e testes em minutos e, em seguida, migrar perfeitamente para chaves de produção. Os administradores de segurança podem conceder (e revogar) permissão às chaves, conforme necessário.
Qualquer pessoa com uma assinatura do Azure pode criar e usar cofres-chave. Embora o Key Vault beneficie desenvolvedores e administradores de segurança, ele pode ser implementado e gerenciado pelo administrador de uma organização que gerencia outros serviços do Azure para uma organização.

Cenário atual

No cenário atual estamos utilizando o Key Vault para o provisionamento de arm resources. Em vez de qualquer nome de usuário e senhas, o modelo contém apenas referências a esses valores armazenados no Azure Key Vault.
Esses segredos são extraídos enquanto os recursos estão sendo implantados usando o modelo e o arquivo do parâmetro juntos.

Implantar Key Vaults e segredos

01 – Faça login no portal do Azure.

https://portal.azure.com

02 – No portal do Azure abra o Azure Cloud Shell.

03 – No Azure Cloud Shell certifique-se de está utilizando o PowerShell, em seguida execute o script abaixo para criar o Key Vault e secret.

Observação: Ao executar o script você deve está logado no portal com o usuário que esta definido na variavel UserPrincipalName.

# Variáveis
$RGName = “RG-Keyvaultjadson”
$Location = “East US”
$VaultName = “keyvaultarmjadsonalves”
$secret = “Pa$$w0rd@J.456”
$secretname = “secretearm”
$UserPrincipalName = “adm.jadson@jadsonalvess.com”

# Criar Grupo de Recursos
New-AzResourceGroup -Name $RGName -Location $Location

# Criar Key vault
New-AzKeyVault `
-VaultName $VaultName `
-resourceGroupName $RGName `
-Location $Location `
-EnabledForTemplateDeployment

# Dar permissões à sua conta de usuário para gerenciar segredos no Key Vault
Set-AzKeyVaultAccessPolicy `
-VaultName $VaultName `
-UserPrincipalName $UserPrincipalName `
-PermissionsToSecrets set,delete,get,list

# Criar Secret
$secretvalue = ConvertTo-SecureString $secret -AsPlainText -Force
$secret = Set-AzKeyVaultSecret -VaultName $VaultName -Name $secretname -SecretValue $secretvalue

Como podemos obervar na imagem abaixo o recurso foi provionado.

04 – No portal do Azure pesquise por Key vault, selecione o Key Vault que criamos “keyvaultarmjadsonalves”.

05 – Após selecionar o Key vault que deseja em Settings clique em Access policies.

06 – Em Access Policies a opção Azure Resource Manager for template deployment tem que está habilitada, definimos essa configuração no script de criação do recurso no parâmetro EnabledForTemplateDeployment, observe também que nosso usuário foi adicionado a política com as permissões que definimos.

07 – Na tela do Key vault keyvaultarmjadsonalves em Settings clique em Properties.

08 – Na tela Properties copie o Resource ID, vamos precisar dessa informação para adicionar no ARM template.

09 – Ainda no Key vault clique em Secrets, cópia o nome do secret vamos precisar adicionar essa informação no ARM template.

Segredos de referência com ID estático

Com esta abordagem, você faz referência ao cofre da chave no arquivo do parâmetro, não ao modelo. A imagem a seguir mostra como o arquivo do parâmetro faz referência ao segredo e passa esse valor para o modelo.

Diagrama de ID estático de integração do cofre do gerenciador de recursos

Fazendo referência ao secret

O ARM template está disponível para download em meu Github, para baixar clique na imagem abaixo.

GitHub (@github) / Twitter

Atualmente estamos fazendo referência aos secrets armazenados no key vault usando o ARM template.

O ARM template provisiona uma máquina virtual Windows Server, temos dois arquivos conforme a imagem abaixo.

O arquivo main.json contém os parametros necessários para provisionar a máquina virtual Windows Server, já o parameter.json contém as informações relacionadas ao Key vaul como o id do recurso.

No arquivo main.json no parâmetro adminPassword o tipo agora passa a ser “securestring”.

10 – No arquivo parameters.json no parâmetro adminPassword em KeyVault na opção id adicione o Resource ID que copiamos, e para a opção secretName adicione o secret que copiamos “secretearm”.

11 – No vídeo abaixo mostro a estrutura do ARM template.

Deploy ARM template

Podemos provisionar o ARM templete com algumas ferramentas, particular prefiro PowerShell ou Visual Studio Code, nesse artigo vou utilizar o Visual Studio Code para provisionar o ARM template.

Observação: Instale a extensão do Azure no Visual Studio Code.

12 – No Visual Studio Code clique em Terminal e selecione New Terminal.

13 – Entre no diretório que os arquivos main.json e parameters.json estão.

cd D:\VM_Windows_ARM_Template_to_Keyvault

14 – Execute o comando abaixo para provisionar o ARM template, informe o nome do grupo de recurso que a máquina será provisionada, para a opção –template-file informe o nome do ARM template e para a opção –parameters informe o arquivo com os parametros

Faça login no portal do Azure com o comando az login

Execute o comando a baixo para provisionar o ARM template

az group deployment create –resource-group RG-Keyvaultjadson –template-file main.json –parameters parameters.json

Como podemos observar na imagem abaixo o recurso está sendo provisionado.

15 – Como podemos observar no Visual Studio Code o recurso foi provisionado.

16 – Faça login no portal do Azure, em seguida pesquise por virtual machines.

17 – Em virtual machines observe que temos a máquina virtual criada SimpleWinVM, copie o Public IP address da vm “20.121.19.109”

Conectando na máquina virtual

Para conectar na máquina virtual vamos precisar do endereço IP público, nome do usuário administrador e o valor que definido no secret.

18 – Podemos verificar o nome do usuário administrador no arquivo parameters.json.

19 – Para verificar o valor do secret faça login no portal do Azure, pesquise por Key vaults selecione keyvaultarmjadsonalves em Settings clique em Secrets.

20 – Em Secrets clique em secretearm.

21 – Na tela secretearm clique em CURRENT VERSION.

22 – Clique em Show Secret Value e copie o Secrete value.

23 – No vídeo abaixo demostro a conexão por RDP a máquina virtual utilizando o valor do secret do Key vault.

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.