kogunlowo123/terraform-azure-hub-spoke-network

GitHub: kogunlowo123/terraform-azure-hub-spoke-network

面向企业的 Azure Hub-Spoke 网络拓扑 Terraform 模块,集成了防火墙、堡垒机、VPN/ExpressRoute 网关等核心网络组件,实现集中式安全管控与混合云互联。

Stars: 0 | Forks: 0

# Terraform Azure Hub-Spoke 网络 在 Azure 上部署 Hub-Spoke 网络拓扑,包含 Azure Firewall、Bastion、VPN Gateway、ExpressRoute 和 Route Server。 ## 架构 ``` flowchart TB subgraph Hub["Hub Virtual Network"] style Hub fill:#0078D4,color:#fff Firewall["Azure Firewall\n(Standard/Premium)"] Bastion["Azure Bastion"] VPNGw["VPN Gateway"] RouteServer["Route Server"] end subgraph SpokeA["Spoke VNet - App"] style SpokeA fill:#3F8624,color:#fff FrontendSubnet["Frontend Subnet"] BackendSubnet["Backend Subnet"] end subgraph SpokeB["Spoke VNet - Data"] style SpokeB fill:#FF9900,color:#fff DBSubnet["Database Subnet"] StorageSubnet["Storage Subnet"] end subgraph SpokeC["Spoke VNet - DMZ"] style SpokeC fill:#DD344C,color:#fff PublicSubnet["Public Subnet"] PrivateSubnet["Private Subnet"] end subgraph Routing["Route Tables"] style Routing fill:#8C4FFF,color:#fff UDR["UDR: 0.0.0.0/0\n--> Azure Firewall"] end OnPrem["On-Premises Network"] --> VPNGw Hub -- "Peering" --> SpokeA Hub -- "Peering" --> SpokeB Hub -- "Peering" --> SpokeC Firewall --> Routing Routing --> SpokeA Routing --> SpokeB Routing --> SpokeC ``` ### ASCII 图表 ``` ┌─────────────────────────────────────────────┐ │ Hub Virtual Network │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ │ On-Premises ───────┤ │ VPN Gateway / │ │ Azure Bastion │ │ Network │ │ ExpressRoute GW │ │ │ │ │ └─────────────────┘ └─────────────────┘ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ Azure Firewall │ │ Route Server │ │ │ │ (Premium/Std) │ │ │ │ │ │ + IDPS │ │ │ │ │ │ + DNS Proxy │ │ │ │ │ └────────┬────────┘ └─────────────────┘ │ │ │ │ └───────────┼─────────────────────────────────┘ │ ┌──────────────┼──────────────┐ │ │ │ ┌──────┴──────┐ ┌────┴────┐ ┌──────┴──────┐ │ Spoke VNet │ │ Spoke │ │ Spoke VNet │ │ (App) │ │ VNet │ │ (DMZ) │ │ │ │ (Data) │ │ │ │ ┌─────────┐ │ │┌──────┐ │ │ ┌─────────┐ │ │ │Frontend │ │ ││ DB │ │ │ │ Public │ │ │ ├─────────┤ │ │├──────┤ │ │ ├─────────┤ │ │ │Backend │ │ ││Store │ │ │ │ Private │ │ │ └─────────┘ │ │└──────┘ │ │ └─────────┘ │ └─────────────┘ └─────────┘ └─────────────┘ ◄── UDR: 0.0.0.0/0 → Azure Firewall ──► ``` ## 功能 - **Hub Virtual Network**,包含预留子网(AzureFirewallSubnet、GatewaySubnet、AzureBastionSubnet、RouteServerSubnet) - **Azure Firewall**(Standard 或 Premium),配备防火墙策略、IDPS、DNS 代理以及可配置的规则集合组 - **Azure Bastion**(Basic 或 Standard SKU),用于安全的 VM 访问 - **VPN Gateway**,用于站点到站点和点到站点 VPN 连接 - **ExpressRoute Gateway**,用于连接本地私有网络 - **Azure Route Server**,用于与 NVA 动态交换路由 - **Spoke Virtual Networks**,自动与 Hub 建立对等互连,可选通过防火墙的 UDR 路由 - **Diagnostic Settings**,集成 Log Analytics workspace - **User-Defined Routes (UDR)** 自动应用于通过防火墙路由的 Spoke 子网 ## 用法 ``` module "hub_spoke" { source = "github.com/kogunlowo123/terraform-azure-hub-spoke-network" name_prefix = "myproject" resource_group_name = "rg-networking" location = "East US" hub_vnet_address_space = ["10.0.0.0/16"] spoke_vnets = { workload = { address_space = ["10.1.0.0/16"] subnets = { default = { address_prefixes = ["10.1.0.0/24"] } } route_through_firewall = true } } enable_firewall = true enable_bastion = true enable_vpn_gateway = false tags = { Environment = "production" } } ``` ## 需求 | Name | Version | |------|---------| | terraform | >= 1.5.0 | | azurerm | >= 3.80.0 | ## 输入变量 | Name | Description | Type | Default | |------|-------------|------|---------| | name_prefix | 所有资源名称的前缀 | string | n/a | | resource_group_name | Resource group 名称 | string | n/a | | location | Azure 区域 | string | n/a | | hub_vnet_address_space | Hub VNet 地址空间 | list(string) | n/a | | hub_subnets | 额外的 Hub 子网 | map(object) | `{}` | | spoke_vnets | 包含子网和防火墙路由的 Spoke VNet | map(object) | `{}` | | enable_firewall | 部署 Azure Firewall | bool | `true` | | firewall_sku_tier | Firewall SKU 层级 | string | `"Premium"` | | firewall_threat_intel_mode | 威胁情报模式 | string | `"Deny"` | | firewall_policy_rule_collection_groups | 防火墙策略规则集合组 | list(object) | `[]` | | enable_bastion | 部署 Azure Bastion | bool | `true` | | bastion_sku | Bastion SKU | string | `"Standard"` | | enable_vpn_gateway | 部署 VPN Gateway | bool | `false` | | vpn_gateway_sku | VPN Gateway SKU | string | `"VpnGw1"` | | vpn_gateway_type | VPN Gateway 类型 | string | `"Vpn"` | | enable_expressroute | 部署 ExpressRoute Gateway | bool | `false` | | expressroute_sku | ExpressRoute Gateway SKU | string | `"Standard"` | | enable_route_server | 部署 Azure Route Server | bool | `false` | | enable_dns_proxy | 在防火墙策略上启用 DNS 代理 | bool | `true` | | log_analytics_workspace_id | Log Analytics workspace ID | string | `null` | | tags | 所有资源的标签 | map(string) | `{}` | ## 输出 | Name | Description | |------|-------------| | hub_vnet_id | Hub virtual network ID | | hub_vnet_name | Hub virtual network 名称 | | hub_subnet_ids | Hub subnet ID 映射 | | spoke_vnet_ids | Spoke VNet ID 映射 | | spoke_vnet_names | Spoke VNet 名称映射 | | spoke_subnet_ids | Spoke subnet ID 映射 | | firewall_id | Azure Firewall ID | | firewall_private_ip | Azure Firewall 私有 IP | | firewall_public_ip | Azure Firewall 公网 IP | | firewall_policy_id | Azure Firewall Policy ID | | bastion_id | Azure Bastion Host ID | | bastion_dns_name | Azure Bastion DNS 名称 | | vpn_gateway_id | VPN Gateway ID | | vpn_gateway_public_ip | VPN Gateway 公网 IP | | expressroute_gateway_id | ExpressRoute Gateway ID | | route_server_id | Azure Route Server ID | | spoke_route_table_ids | Spoke 路由表 ID | ## 示例 - [基础](./examples/basic/) - 包含防火墙、Bastion 和单个 Spoke 的 Hub - [高级](./examples/advanced/) - 多个 Spoke、VPN Gateway、防火墙规则和诊断设置 - [完整](./examples/complete/) - 启用包括 ExpressRoute 和 Route Server 在内的所有功能 ## 许可证 MIT License - 详见 [LICENSE](LICENSE)。
标签:Azure, Azure Bastion, Azure Firewall, EC2, ECS, ExpressRoute, Hub-Spoke, IaC, Microsoft Azure, PE 加载器, Route Server, Site-to-Site VPN, Terraform, UDR, VNet Peering, VPN Gateway, 专线连接, 中心辐射, 云基础设施, 企业网络, 安全网关, 拓扑, 模块化, 混合云, 网络安全, 网络架构, 网络连接, 路由表, 跳板机, 远程访问, 隐私保护