This commit is contained in:
99
tunnel.tf
Normal file
99
tunnel.tf
Normal file
@@ -0,0 +1,99 @@
|
||||
# =============================================================================
|
||||
# CLOUDFLARE TUNNEL
|
||||
# =============================================================================
|
||||
|
||||
# Création du tunnel Cloudflare
|
||||
resource "cloudflare_zero_trust_tunnel_cloudflared" "home_tunnel" {
|
||||
account_id = local.cloudflare_account_id
|
||||
name = var.tunnel_name
|
||||
config_src = "cloudflare"
|
||||
}
|
||||
|
||||
# Récupération du token pour l'agent cloudflared
|
||||
data "cloudflare_zero_trust_tunnel_cloudflared_token" "home_tunnel_token" {
|
||||
account_id = local.cloudflare_account_id
|
||||
tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.home_tunnel.id
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# DNS RECORDS (un par application)
|
||||
# =============================================================================
|
||||
|
||||
resource "cloudflare_dns_record" "applications" {
|
||||
for_each = var.applications
|
||||
|
||||
zone_id = local.cloudflare_zone_id
|
||||
name = each.value.subdomain
|
||||
content = "${cloudflare_zero_trust_tunnel_cloudflared.home_tunnel.id}.cfargotunnel.com"
|
||||
type = "CNAME"
|
||||
ttl = var.dns_ttl
|
||||
proxied = var.dns_proxied
|
||||
comment = "Managed by Terraform - ${each.key} via Cloudflare Tunnel"
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# TUNNEL CONFIGURATION
|
||||
# =============================================================================
|
||||
|
||||
resource "cloudflare_zero_trust_tunnel_cloudflared_config" "home_tunnel_config" {
|
||||
tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.home_tunnel.id
|
||||
account_id = local.cloudflare_account_id
|
||||
|
||||
config = {
|
||||
warp_routing = {
|
||||
enabled = var.tunnel_warp_routing_enabled
|
||||
}
|
||||
|
||||
ingress = local.ingress_rules
|
||||
}
|
||||
|
||||
lifecycle {
|
||||
# Ignorer les changements manuels dans Cloudflare Dashboard
|
||||
ignore_changes = [config]
|
||||
}
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# ACCESS POLICIES (optionnel)
|
||||
# =============================================================================
|
||||
|
||||
# Exemple de politique d'accès réutilisable
|
||||
# Décommentez si vous souhaitez utiliser Cloudflare Access
|
||||
/*
|
||||
resource "cloudflare_zero_trust_access_policy" "allow_emails" {
|
||||
account_id = local.cloudflare_account_id
|
||||
name = "Allow specific emails"
|
||||
decision = "allow"
|
||||
|
||||
include = [
|
||||
{
|
||||
email = {
|
||||
email = local.cloudflare_email
|
||||
}
|
||||
},
|
||||
{
|
||||
email_domain = {
|
||||
domain = var.cloudflare_zone
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Application Access pour chaque application qui l'exige
|
||||
resource "cloudflare_zero_trust_access_application" "applications" {
|
||||
for_each = {
|
||||
for app_name, app_config in var.applications :
|
||||
app_name => app_config
|
||||
if app_config.access_enabled
|
||||
}
|
||||
|
||||
account_id = local.cloudflare_account_id
|
||||
type = "self_hosted"
|
||||
name = "Access for ${each.key}"
|
||||
domain = "${each.value.subdomain}.${var.cloudflare_zone}"
|
||||
|
||||
policies = [
|
||||
cloudflare_zero_trust_access_policy.allow_emails.id
|
||||
]
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user