[Azure] Récupérer une valeur dans un keyvault pour Terraform

Par défaut, si vous souhaitez déployer une VM sur Azure avec Terraform, vous devez donner le nom d’utilisateur et le mot de passe en claire dans le fichier de variables (voir mon article précédent). Mais une solution existe, pour sécuriser tout ça 🙂 Il suffit d’utiliser un Azure Keyvault, et de stocker votre mot de passe dedans:

Ensuite, il faut rajouter ces lignes, au début de votre code:

// Get Keyvault Data
data "azurerm_resource_group" "rg_keyvault" {
  name                = "${var.rg_keyvault}"
}
data "azurerm_key_vault" "keyvault" {
  name                = "${var.keyvault_name}"
  resource_group_name = "${data.azurerm_resource_group.rg_keyvault.name}"
}
data "azurerm_key_vault_secret" "secret_Default-Admin-Windows-Linux-VM" {
  name      = "Default-Admin-Windows-Linux-VM"
  vault_uri = "${data.azurerm_key_vault.keyvault.vault_uri}"
}

Ici on va récupérer le RG, le Keyvault, et le secret qui a le nom Default-Admin-Windows-Linux-VM dans mon keyvault et qui contient mon mot de passe par défaut pour mes VMs. Il faut ensuite adapter le code, pour que notre variable admin_password prenne la valeur qui se trouve dans le keyvault:

admin_password            = "${data.azurerm_key_vault_secret.secret_Default-Admin-Windows-Linux-VM.value}"

Vous pouvez maintenant faire un terraform init et terraform plan. Vous devriez avoir l’erreur suivante:

Ceci est normal. En effet, vous devez donner les droits Get et List sur les secret à l’application qui est utilisé pour déployer les ressources dans Azure via Terraform, dans le keyvault:

Vous pouvez refaire un terraform plan et terraform apply pour déployer vos ressources, de façon sécurisé. Notez ce message d’erreur, qui disparaitra lors de la mise à jour vers la version 2 du provider, mais où vous devrez adapter le code:

Tout ce code est disponible sur mon Github: https://github.com/Flodu31/Terraform/tree/master/Deploy_New_Environment_Keyvault

2 Comments, RSS

  1. Paco Bernabe 22 mai 2019 @ 11 h 04 min

    Do the keyvault, the network, and the VM need to be in 3 different resource groups, or can they be in the same one?

    • Florent 22 mai 2019 @ 12 h 05 min

      Hello,
      They can be in the same RG, without any problem.
      Florent

Laisser un commentaire