Terraform e Azure Key Vault - Protegendo nossas chaves

Ontem, estava navegando pela web, quando li uma matéria que realmente alarmou-me. Tratava-se sobre a quantidade de dados que eram perdidos ou roubados na internet. Realizei uma pesquisa mais aprofundada e encontrei esse site "Data Breach Statistics", que mostra a quantidade de dados que já foram perdidos ou hackeados.

O gráfico acima, foi retirado do mesmo site informado anteriormente e mostra a quantidade de dados que foram perdidos ou roubados nos últimos anos segmentado pelo ramo do negócio, podendo ser verificado claramente que o setor com maior incidência é o da tecnologia.



Sendo assim, com o crescimento do movimento DevOps e IAC (Infraestrutura como código), faço um novo questionamento.


Onde estamos guardando as chaves(senhas, certificados, keys, tokens, etc.) das nossas empresas?


Para facilitar nossas vidas de administradores de sistemas, redes, etc., criamos scripts automatizados para construir ambientes, aplicar novas versões, melhorias e até mesmo para remover ambiente legados. Então, em alguns desses scripts acabamos deixando armazenado uma senha, a localização de um certificado ou um token, que acaba facilitando para um hacker roubar informações.


Nessa batida, apresento um recurso que eu uso bastante que é o Azure Key Vault. A sua função é armazenar essas informações de acesso de uma forma segura e eficiente. Nesse artigo, vou demonstrar como utilizar essa ferramenta com o Terraform, por exemplo.


Vou criar um segredo para armazenar uma chave privada de SSH e iremos utilizar essa chave para uma maquina virtual linux que será provisionado pelo Terraform.


az keyvault secret set --vault-name myKV-clairodorneles --subscription $id --name clairodorneles --file ~/.ssh/mysshkey.pub


Nesse caso, eu já tenho um Key Vault criado (myKV-clairodorneles) e estou criando um segredo que eu chamei de "clairodorneles", apontei a localização do minha chave de SSH (~/.ssh/mysshkey.pub).

Para o Terraform poder utilizar o vault, o mesmo precisa ter permissão para ler o segredo, nessa demo, eu criei um conta rbac para utiliza-lo e concedi permissão para o mesmo no key vault.

900

Na playbook do Terraform, vou adicionar o seguinte código:


data "azurerm_key_vault_secret" "secretdemo" {

 name     = "clairodorneles"

 vault_uri = "https://myKV-clairodorneles.vault.azure.net/"

}


Ele irá buscar dentro do meu vault, o segredo "clairodorneles".

E vou adicionar as chamadas dentro da criação da VM.


os_profile {

 computer_name = "vm-linux-demo"

 admin_username = "${data.azurerm_key_vault_secret.secretdemo.name}"

}


os_profile_linux_config {

 disable_password_authentication = true

 ssh_keys {

 path = "/home/${data.azurerm_key_vault_secret.secretdemo.name}/.ssh/authorized_keys"

 key_data = "${data.azurerm_key_vault_secret.secret-demo.value}"

 }

}


No processo de criação, o terraform irá ler o segredo "clairodorneles" no meu vault e irá adicioná-lo dentro do arquivo de ssh permitidos da minha vm-linux-demo.


Esse exemplo foi simples, somente com a intenção de demonstrar como podemos melhorar a segurança dos nossos dados sensíveis.


Espero que tenham gostado. Qualquer duvida ou sugestão, por favor, deixem me saber.

Escrito por:

Clairo Dorneles

Cloud Solutions Architect - Security/Compliance at SOU.cloud ☁️ ☁️

Blog SOU.cloud