55 lines
2.2 KiB
Terraform
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 = {}
|
|
}]
|
|
}
|