Gestion des secrets
Ne stockez JAMAIS de secrets en clair dans le code Terraform. Utilisez des solutions dediees.
Vault (HashiCorp)
provider "vault" {
address = "https://vault.example.com"
}
data "vault_generic_secret" "db" {
path = "secret/database"
}
resource "aws_db_instance" "db" {
username = data.vault_generic_secret.db.data["username"]
password = data.vault_generic_secret.db.data["password"]
}
# Marquer les outputs sensibles
output "db_password" {
value = data.vault_generic_secret.db.data["password"]
sensitive = true
}
AWS Secrets Manager
data "aws_secretsmanager_secret_version" "db" {
secret_id = "production/database"
}
locals {
db_creds = jsondecode(data.aws_secretsmanager_secret_version.db.secret_string)
}
resource "aws_db_instance" "db" {
username = local.db_creds["username"]
password = local.db_creds["password"]
}
Variables sensibles
variable "db_password" {
type = string
sensitive = true # Masque la valeur dans les logs
}
# Passer via variable d'environnement
# export TF_VAR_db_password="mon-secret"
Attention au state
Les secrets apparaissent en clair dans le state ! Protegez le state avec :
- Chiffrement au repos (S3 encryption, GCS encryption)
- Acces restreint (IAM policies)
- Ne jamais commiter le state dans Git