Secret Manager con Azure Keyvault desde Terraform

Es de todos conocido, la práctica de no almacenar datos sensibles en los repositorios de código, como contraseñas, claves de cifrado, certificados, tokens, etc, y cuando trabajamos con IaC por tanto, es igualmente recomendable utilizar un gestor de secretos.

La solución de Hashicorp Vault, o la propuesta de Conjur (CyberArk) son soluciones muy populares pero que pueden implicar cierta complejidad en algunos escenarios.

En este ejemplo, en cambio, mostramos como utilizar Azure KeyVault junto con Terraform.

Esta solución tiene sentido cuando nuestra nube preferente es Azure y toda nuestra IaC la desplegamos en ese proveedor.

#Estos son los parámetros obligatorios a la hora de crear un #keyvault:
resource "azurerm_key_vault" "kvname" {
  location                   = "westeurope"
  name                       = "kv-name-01"
  resource_group_name        = "rg-lab-01"
  sku_name                   = "standard"
  soft_delete_retention_days = 7
  tenant_id                  = "d2cc43fc-6c18-4213-bf42-f2001e89e4548"
}

#Definimos los data sources con los que accedemos a los secrets almacenados:
data "azurerm_key_vault" "kvname" {
  name                = "kv-name-01"
  resource_group_name = "rg-lab-01"
}

data "azurerm_key_vault_secret" "dbpassword" {
  name         = "dbpassword"
  key_vault_id = data.azurerm_key_vault.kvname.id
}

data "azurerm_key_vault_secret" "dbusername" {
  name         = "dbusername"
  key_vault_id = data.azurerm_key_vault.kvname.id
}

Ya solo nos falta definir un output.tf con el siguiente contenido:

output "dbpassword" {
  value = "${data.azurerm_key_vault_secret.dbpassword.value}"
  description = "The database password"
  sensitive = true
}

output "dbusername" {
  value = "${data.azurerm_key_vault_secret.dbusername.value}"
  description = "The database username"
  sensitive = true
}

El parámetro sensitive = true evitará que se muestren datos sensibles en los logs de ejecución de Terraform.

Leave a Comment

Your email address will not be published.