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, 专线连接, 中心辐射, 云基础设施, 企业网络, 安全网关, 拓扑, 模块化, 混合云, 网络安全, 网络架构, 网络连接, 路由表, 跳板机, 远程访问, 隐私保护