Files
terraform-cloudflare-tunnel…/Access_Controls-Service_Auth-mTLS_Certificates.tf
hcornet f8201d9d06
Terraform Apply / Terraform Apply (push) Successful in 2m26s
New update
2026-07-31 12:57:49 +02:00

55 lines
2.2 KiB
Terraform

# =============================================================================
# CLOUDFLARE : Access Controls : Service Auth : mTLS Certificates
# =============================================================================
# BRIQUE mTLS : en plus de l'identité (IdP), exiger un CERTIFICAT CLIENT
# installé sur le poste pour accéder aux applications sensibles. Même un
# compte compromis ne suffit plus : il faut aussi la machine.
#
# 1. Une autorité de certification (CA) est déposée dans Vault (secret/mtls,
# clé ca_pem — le certificat PUBLIC de la CA, pas sa clé privée !)
# 2. Cloudflare vérifie que le client présente un certificat signé par
# cette CA sur les hostnames associés
# 3. La politique réutilisable ci-dessous ("Allow valid client certificate")
# peut être ajoutée aux applications à durcir
#
# La brique est inerte tant que mtls_enabled = false.
# ACTIONS EXTERNES (voir ACTIONS_EXTERNES.md) : générer la CA, distribuer
# les certificats clients sur les postes, pousser le PEM dans Vault.
# =============================================================================
data "vault_generic_secret" "mtls" {
count = var.mtls_enabled ? 1 : 0
path = var.vault_mtls_path
}
#======================================================
# La CA de confiance, associée aux hostnames à protéger
#======================================================
resource "cloudflare_zero_trust_access_mtls_certificate" "home_ca" {
count = var.mtls_enabled ? 1 : 0
account_id = local.cloudflare_account_id
name = "Home mTLS CA"
certificate = data.vault_generic_secret.mtls[0].data["ca_pem"]
associated_hostnames = [
"home.${var.cloudflare_zone}",
]
}
#======================================================
# Politique réutilisable : certificat client valide exigé
#======================================================
resource "cloudflare_zero_trust_access_policy" "allow_valid_client_certificate" {
count = var.mtls_enabled ? 1 : 0
account_id = local.cloudflare_account_id
name = "Allow valid client certificate"
decision = "non_identity"
session_duration = "24h"
include = [{
certificate = {}
}]
}