SuperAPI AI 工具集

azure-security-lab-terraform

安全与审计

查看项目

更新于 10-15 12:07

技能介绍

用途

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

适用场景

该项目提供多种部署模式,适用于不同的学习目标:

  1. 默认安全实验:启用防火墙和公共 RDP,适合基础安全测试。
  2. 私有访问与 Bastion:通过 Bastion 进行私有访问,适合更严格的安全场景。
  3. 无防火墙最小实验:降低成本,测试直接分支间连接,NSG 仍提供安全控制。
  4. 身份实验:创建 Entra 测试用户,需要额外权限。
  5. 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 目录。