Securite et compliance as Code 25 min de lecture

Securite des secrets et scanning

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