69 lines
3.0 KiB
Terraform
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}"
|
|
}
|