Aller au contenu

TP 21 : Intégration de HashiCorp Vault

Stocker des secrets dans HashiCorp Vault et les récupérer depuis Terraform pour les injecter dans des ressources AWS simulées avec LocalStack.

Ce TP permet de voir comment :

  • lancer Vault et LocalStack avec Docker
  • stocker un secret dans Vault via le moteur KV
  • configurer le provider vault dans Terraform
  • lire un secret Vault depuis une ressource data
  • injecter le secret dans une ressource AWS (LocalStack)

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.

  • Terraform installé
  • Docker installé et lancé
  • Vault CLI installé
  • AWS CLI installé
Fenêtre de terminal
terraform version
docker version
vault version
aws --version

Exécuter Vault avec Docker :

Fenêtre de terminal
docker run --cap-add=IPC_LOCK -d --name vault -p 8200:8200 hashicorp/vault

Exécuter LocalStack avec Docker :

Fenêtre de terminal
docker run --rm -d --name localstack -p 4566:4566 -e SERVICES=ec2 localstack/localstack

Exporter l’URL de Vault :

Fenêtre de terminal
$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 root root et 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) :

Fenêtre de terminal
Start-Process -NoNewWindow vault -ArgumentList "server -dev"
$env:VAULT_TOKEN="root"

Sur Linux/macOS :

Fenêtre de terminal
vault server -dev &
export VAULT_TOKEN="root"

Activer le moteur de secrets KV :

Fenêtre de terminal
vault secrets enable -path=secret kv

Ajouter un secret :

Fenêtre de terminal
vault kv put secret/my-secret username=admin password=SuperSecure123

Vérifier le stockage du secret :

Fenêtre de terminal
vault kv get secret/my-secret

Utiliser 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 :

Fenêtre de terminal
mkdir terraform-vault; cd terraform-vault

Cré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 :

Fenêtre de terminal
terraform init
terraform apply -auto-approve
terraform output

Supprimer les conteneurs Docker :

Fenêtre de terminal
docker stop vault localstack; docker rm vault localstack

Supprimer les fichiers Terraform :

Fenêtre de terminal
Remove-Item -Recurse -Force .terraform terraform.tfstate* terraform.tfvars