Files
terraform-cloudflare-tunnel…/Networks-Routes-Remote_Sites.tf
T
hcornet 04e0f318f4
Terraform Apply / Terraform Apply (push) Failing after 20s
Update 31-07-2026
2026-07-31 09:50:42 +02:00

69 lines
3.0 KiB
Terraform

# =============================================================================
# CLOUDFLARE : Networks : Routes : Remote Sites (sites distants d'entreprise)
# =============================================================================
# BRIQUE SITES DISTANTS (1/2) : approche "tunnel cloudflared par site".
#
# Scénario simulé : une grande entreprise avec plusieurs agences (Paris,
# Lyon...). Chaque site héberge un connecteur cloudflared et publie son
# réseau local dans Cloudflare.
#
# Point clé de l'exemple : les deux sites utilisent LE MÊME CIDR
# (10.100.0.0/16). C'est un cas très réaliste (agences déployées sur le même
# template réseau, fusions/acquisitions...). Les réseaux virtuels Cloudflare
# permettent de faire cohabiter ces plages identiques : chaque site vit dans
# son propre réseau virtuel, et le client WARP choisit le réseau virtuel
# actif pour lever l'ambiguïté.
#
# ACTIONS EXTERNES (voir ACTIONS_EXTERNES.md) :
# - Sur chaque site, installer cloudflared et le connecter avec son token :
# terraform output -json remote_site_tunnel_tokens
# cloudflared service install <token du site>
# - Pour basculer un poste WARP d'un site à l'autre :
# warp-cli vnet <id> (ou via l'UI du client WARP)
# =============================================================================
#======================================================
# Un réseau virtuel par site
#======================================================
resource "cloudflare_zero_trust_tunnel_cloudflared_virtual_network" "remote_sites" {
for_each = var.remote_sites
account_id = local.cloudflare_account_id
name = "vnet-${each.key}"
comment = each.value.comment
is_default_network = false
}
#======================================================
# Un tunnel cloudflared par site
#======================================================
resource "cloudflare_zero_trust_tunnel_cloudflared" "remote_sites" {
for_each = var.remote_sites
account_id = local.cloudflare_account_id
name = "Tunnel Site ${each.key}"
config_src = "cloudflare"
}
# Token du connecteur de chaque site (à installer sur la machine du site)
data "cloudflare_zero_trust_tunnel_cloudflared_token" "remote_sites" {
for_each = var.remote_sites
account_id = local.cloudflare_account_id
tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.remote_sites[each.key].id
}
#======================================================
# La route de chaque site, isolée dans son réseau virtuel
# (c'est ce rattachement qui autorise les CIDR identiques)
#======================================================
resource "cloudflare_zero_trust_tunnel_cloudflared_route" "remote_sites" {
for_each = var.remote_sites
account_id = local.cloudflare_account_id
network = each.value.cidr
tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.remote_sites[each.key].id
virtual_network_id = cloudflare_zero_trust_tunnel_cloudflared_virtual_network.remote_sites[each.key].id
comment = "LAN du site ${each.key}"
}