用途
Azure Security Lab Terraform 是一个用于部署、配置和排查 Azure 安全实验环境的 Terraform 项目技能。它面向希望动手学习 Azure 安全控制的用户,通过基础设施即代码的方式快速搭建一个包含网络隔离、防火墙检查、密钥管理和日志审计的紧凑实验环境。
主要能力
该项目部署以下核心组件:
- 中心-分支拓扑:中心 VNet(10.20.0.0/16)承载 Azure Firewall,测试分支(10.23.0.0/16)包含不受信任的客户端,受保护分支(10.22.0.0/16)运行私有工作负载。
- 网络安全:Azure Firewall Basic 用于东西向流量检查,NSG 提供子网级控制,路由表强制流量经过防火墙。
- 计算资源:Windows 测试 VM(可选受限 RDP),Windows IIS Web VM(无公共 IP)。
- 安全功能:Key Vault 存储机密,Log Analytics 用于诊断,Azure Policy 用于态势审计,可选 Bastion 提供私有访问。
- 成本意识:主要成本为 Azure Firewall Basic(约 0.40 美元/小时),适合短期学习部署。
使用方式
前置要求
- Terraform >= 1.9.0
- Azure CLI
- 具有 Contributor 权限的 Azure 订阅
- 可选:用于创建测试用户的 Entra ID 权限
初始设置
# 克隆仓库
git clone https://github.com/Jamonygr/Azure-Security-Lab.git
cd Azure-Security-Lab
# 登录 Azure
az login
az account set --subscription "<subscription-id>"
# 初始化 Terraform
terraform init
配置文件
项目使用两种主要配置方式:
terraform.tfvars- 根级变量environments/lab.tfvars- 环境特定覆盖
# 从示例创建配置
cp terraform.tfvars.example terraform.tfvars
关键配置变量
# terraform.tfvars
# 用于 RDP 访问的公共 IP(必需)
admin_source_ip_cidr = "203.0.113.42/32"
# 核心部署开关
deploy_firewall = true
firewall_sku_tier = "Basic"
force_spoke_egress_to_firewall = false
# 访问方式
enable_test_client_public_ip = true
deploy_bastion = false
# 可选功能
deploy_keyvault = true
deploy_log_analytics = true
deploy_policy = true
deploy_budget = true
# 高级功能(默认禁用)
deploy_entra_test_users = false
deploy_conditional_access = false
deploy_sentinel = false
# 资源命名
environment = "lab"
location = "westeurope"
prefix = "azseclab"
网络架构
# 地址空间配置
hub_vnet_address_space = ["10.20.0.0/16"]
test_vnet_address_space = ["10.23.0.0/16"]
protected_vnet_address_space = ["10.22.0.0/16"]
# 子网分配
firewall_subnet_prefix = "10.20.1.0/24"
firewall_mgmt_subnet_prefix = "10.20.3.0/24"
bastion_subnet_prefix = "10.20.2.0/26"
test_client_subnet_prefix = "10.23.1.0/24"
protected_web_subnet_prefix = "10.22.1.0/24"
核心 Terraform 命令
# 规划部署(审查变更)
terraform plan -var-file="terraform.tfvars"
# 应用并确认
terraform apply -var-file="terraform.tfvars"
# 无需确认应用(CI/CD)
terraform apply -var-file="terraform.tfvars" -auto-approve
# 销毁所有资源
terraform destroy -var-file="terraform.tfvars"
获取实验访问信息
# 显示所有输出
terraform output
# 获取特定输出
terraform output test_client
terraform output protected_web
# 获取敏感密码(原始格式)
terraform output -raw windows_admin_password
# 获取防火墙 IP(部署时)
terraform output firewall_private_ip
terraform output firewall_public_ip
适用场景
该项目提供多种部署模式,适用于不同的学习目标:
- 默认安全实验:启用防火墙和公共 RDP,适合基础安全测试。
- 私有访问与 Bastion:通过 Bastion 进行私有访问,适合更严格的安全场景。
- 无防火墙最小实验:降低成本,测试直接分支间连接,NSG 仍提供安全控制。
- 身份实验:创建 Entra 测试用户,需要额外权限。
- SOC 实验:集成 Sentinel 和 Log Analytics,用于日志查询和分析。
限制
- 主要成本来自 Azure Firewall Basic(约 0.40 美元/小时),长期运行成本较高。
- 需要 Azure 订阅和相应权限,部分高级功能(如 Entra 用户创建)需要额外 Graph API 权限。
- 强制分支出口到防火墙时,公共 RDP 可能导致非对称路由问题。
- 日志摄入可能有 5-15 分钟延迟。
- 预算警报需要 Owner 角色。
- 项目包含 GitHub Actions 验证工作流,但具体配置需参考仓库。
故障排查
项目提供了常见问题的排查指南,包括 Terraform 初始化失败、非对称路由、无法访问受保护 Web、Key Vault 访问被拒、Entra 用户创建失败、预算警报未收到、防火墙日志未出现等。具体命令和解决方案可参考项目文档。
安全最佳实践
- 始终使用 /32 限制管理员源 IP。
- 使用环境变量存储敏感数据。
- 启用所有安全功能(Key Vault、Log Analytics、Policy、Budget)。
- 部署前审查防火墙规则。
成本控制
- 部署前使用 Azure 定价计算器估算。
- 部署限时实验,测试后立即销毁。
- 最小成本配置:禁用防火墙和 Bastion,使用最小 VM 规格。
参考文档
项目包含详细的 Wiki 文档,涵盖入门、架构、场景、参考和运行手册。具体内容可参考仓库中的 wiki 目录。