V. Azure Vault¶
1. Lil' intro ?¶
â Une Vault est un terme gĂ©nĂ©rique (dĂ©mocratisĂ© un peu par HashiCorp Vault) pour un machin qui permet de stocker, gĂ©rer et rĂ©cupĂ©rer des secrets.
C'est un cas plutÎt récurrent désormais, avec l'Úre du Cloud et des outils comme Terraform : on écrit des secrets en clair un peu partout si on fait rien de particulier.
L'idĂ©e d'une Vault est donc de proposer un endroit centralisĂ© et sĂ©curisĂ© oĂč stocker ces secrets.
On peut ensuite accéder à ces secrets aprÚs authentification (lecture/écriture). Souvent ça passe par le protocole HTTP (une API REST quoi) pour la plupart des Vaults.
â Azure propose une Vault, permettant de partager des secrets entre plusieurs VMs ou ressources.
Et avec Terraform, on peut les définir à la volée de façon aléatoire, ou les prédéfinir manuellement.
Note
On imagine facilement dans la vie réelle de passer sous forme de secrets stockés en Vault :
- des mots de passe de base de données (pour qu'un site accÚde à a sa DB)
- un token de monitoring (pour que la VM envoie ses datas)
- etc.

2. Do it !¶
đ ComplĂ©ter votre plan Terraform et mettez en place une Azure Key Vault
- je vous recommande de créer un nouveau fichier
keyvault.tfà cÎté de votremain.tf -
ce fichier doit :
- ajouter une ressource pour créer un Azure Key Vault
- définir ensuite un secret aléatoire avec Terraform
Note
Encore une fois, en situation rĂ©elle, cette variable d'environnement pourrait ensuite ĂȘtre consommĂ©e par une application qui tourne sur la VM par exemple.
On peut aussi facilement imaginer un templating de fichiers à partir d'un secret récupéré dans la Azure Key Vault.
đ Fichiers attendus
main.tfkeyvault.tf- tout autre fichier Terraform utilisé
Tip
Perso j'ai ajouté dans mon output.tf l'affichage du secret, pour vérifier que ça fonctionne bien pendant les tests.
Help : Exemple de fichiers Terraform¶
- Il faut créer un Azure Key Vault et donner à votre VM les droits dessus
Example
resource "azurerm_key_vault" "meow_vault" {
name = "<Le nom de ta Azure Key Vault ici>"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
soft_delete_retention_days = 7
purge_protection_enabled = false
access_policy {
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = data.azurerm_client_config.current.object_id
secret_permissions = [
"Get", "List", "Set", "Delete", "Purge", "Recover"
]
}
access_policy {
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = azurerm_linux_virtual_machine.main.identity[0].principal_id
secret_permissions = [
"Get", "List"
]
}
}
- Terraform peut générer des strings random, y'a une ressource dédiée à ça
Example
- On peut ensuite récupérer la valeur dans une autre ressource
Example
-
vous pouvez alors voir dans la WebUI Azure si vous voulez :
- dans
Key vaults>Le nom de ta Azure Key Vault>Secrets>Le nom de ton secret>Current version>Show Secret value
- dans
3. Proof proof proof¶
đ Avec une commande az, afficher le secret
- depuis votre poste, et votre compte Azure, vous avez les droits pour voir le secret normalement
- ça va se faire avec un
az keyvault secret show --name "<Le nom de ton secret ici>" --vault-name "<Le nom de ta Azure Key Vault ici>"
đ Depuis la VM, afficher le secret
- il faut donc faire une requĂȘte Ă la Azure Key Vault depuis la VM Azure
- un ptit script shell ça le fait !
Note
En situation rĂ©elle, ce serait l'application qui a besoin de ce secret qui effecturait la requĂȘte.
Si c'est pour templater un fichier de conf, on imagine facilement un Ansible, cloud-init, ou équivalent qui se charge de ça !
