TP 20 : Intégration de HashiCorp Vault
Flux d’exécution : Vault expose une API de secrets KV -> Terraform interroge Vault via le provider -> les valeurs récupérées sont injectées dans les ressources AWS déployées sur LocalStack -> les ressources sont détruites en fin de TP.
Lancer Vault et LocalStack en local
Section intitulée « Lancer Vault et LocalStack en local »Exécuter Vault avec Docker :
docker run --cap-add=IPC_LOCK -d --name vault -p 8200:8200 hashicorp/vaultExécuter LocalStack avec Docker :
docker run --rm -d --name localstack -p 4566:4566 -e SERVICES=ec2 localstack/localstackExporter l’URL de Vault :
$env:VAULT_ADDR="http://127.0.0.1:8200"Activer Vault en mode développement :
Conseil : En mode
-dev, Vault démarre avec un token rootrootet un backend en mémoire — les données sont perdues a l’arret. Ce mode est uniquement pour le développement et les TP. La commande bloque le terminal : lancer en arrière-plan.
Sur Windows (PowerShell) :
Start-Process -NoNewWindow vault -ArgumentList "server -dev"$env:VAULT_TOKEN="root"Sur Linux/macOS :
vault server -dev &export VAULT_TOKEN="root"Stocker un secret dans Vault
Section intitulée « Stocker un secret dans Vault »Activer le moteur de secrets KV :
vault secrets enable -path=secret kvAjouter un secret :
vault kv put secret/my-secret username=admin password=SuperSecure123Vérifier le stockage du secret :
vault kv get secret/my-secretUtiliser Terraform pour récupérer et utiliser les secrets de Vault avec LocalStack
Section intitulée « Utiliser Terraform pour récupérer et utiliser les secrets de Vault avec LocalStack »Créer un dossier de projet :
mkdir terraform-vault; cd terraform-vaultCréer un fichier main.tf :
provider "vault" { address = "http://127.0.0.1:8200"}
provider "aws" { access_key = "test" secret_key = "test" region = "us-east-1" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true
endpoints { ec2 = "http://localhost:4566" }}
data "vault_kv_secret_v2" "example" { mount = "secret" name = "my-secret"}
resource "aws_instance" "example" { ami = "ami-12345678" instance_type = "t3.micro" provider = aws user_data = <<-EOT #!/bin/bash echo "Username: ${data.vault_kv_secret_v2.example.data["username"]}" > /tmp/credentials.txt echo "Password: ${data.vault_kv_secret_v2.example.data["password"]}" >> /tmp/credentials.txt EOT}
output "username" { value = data.vault_kv_secret_v2.example.data["username"] sensitive = true}Initialiser et appliquer Terraform :
terraform initterraform apply -auto-approveterraform outputNettoyage des ressources
Section intitulée « Nettoyage des ressources »Supprimer les conteneurs Docker :
docker stop vault localstack; docker rm vault localstackSupprimer les fichiers Terraform :
Remove-Item -Recurse -Force .terraform terraform.tfstate* terraform.tfvars