我们将使用cloudformation搭建一套NFW的环境。
cloudformation地址: https://github.com/aws-samples/sample-aws-network-security-workshop/blob/main/cfn-template/template.yaml
下载下来后在自己帐号进行部署:

背景:作为一名新入职的高级网络安全工程师,我们接手了一个AWS环境,里面存在严重的安全漏洞:
针对审计结果,网络团队已配置路由架构,将所有出口流量和东西向流量通过AWS Network Firewall进行转发。然而,目前没有任何防火墙规则,因此所有流量都在不受限制地通过。此外,Route 53 Resolver DNS查询日志记录已启用,但Route 53 Resolver DNS Firewall尚未部署。我们将配置Network Firewall规则并实施DNS Firewall,以保护环境安全并防止未来发生类似事件。

该环境包括用于生产工作负载的Production VPC(10.1.0.0/16)、用于开发的Development VPC(10.2.0.0/16)、作为集中出口点的Egress VPC(172.16.0.0/24)
AWS Transit Gateway连接所有VPC,并通过使用Transit Gateway attachment功能 部署的AWS Network Firewall路由流量。这一功能允许Network Firewall作为Transit Gateway attachment直接部署在AWS托管服务VPC中。
这样消除了手动创建和管理自有检查VPC的需求来简化部署,AWS会为我们处理检查VPC基础设施。
Network Firewall提供对所有东西向和出口流量的有状态检查,并具备IPS/IDS功能。
来自spoke VPC的出口流量通过Transit Gateway路由到Network Firewall进行检查,然后通过NAT Gateway进入互联网。
VPC之间的东西向流量同样通过Transit Gateway和Network Firewall进行检查,然后才能到达目的地。
流量路径示例:
1. EC2 实例发起请求
Production VPC: 10.1.1.0/24
│
▼
2. Workload Subnet RT
0.0.0.0/0 → tgw-id (Transit Gateway)
│
▼
3. Transit Gateway
Spoke RT: 0.0.0.0/0 → Inspection Network Function
│
▼
4. Egress VPC - NFW Endpoint
AWS Network Firewall 检查流量
│
▼
5. Inspection RT
0.0.0.0/0 → Egress VPC Attach
│
▼
6. NAT Gateway (172.16.0.16/28)
私有 IP → 公有 IP
│
▼
7. Internet Gateway
出站到 Internet
Spoke = 自行车轮辐,来自 Hub-and-Spoke(轮毂-辐条)网络拓扑模型:
Spoke 1
│
│
Spoke 4 ──── Hub ──── Spoke 2
│
│
Spoke 3
网络架构中的 Hub-and-Spoke:
| 角色 | 含义 | AWS 对应 |
|---|---|---|
| Hub | 中心枢纽 | Transit Gateway / 共享服务 VPC |
| Spoke | 分支/辐条 | 各业务 VPC(连接到中心) |
示例:
┌─────────────────┐
│ Spoke VPC 1 │
│ (Production) │
└────────┬────────┘
│
┌─────────────────┐ │ ┌─────────────────┐
│ Spoke VPC 3 │ │ │ Spoke VPC 2 │
│ (Testing) │──────────┼──────────│ (Development) │
└─────────────────┘ │ └─────────────────┘
│
┌────────┴────────┐
│ Hub (TGW) │
│ Transit Gateway│
└────────┬────────┘
│
┌────────┴────────┐
│ Egress VPC │
│ (共享出口) │
└─────────────────┘
为什么叫 Spoke:
| 比喻 | 网络 |
|---|---|
| 轮毂(Hub) | 中心路由/服务 |
| 辐条(Spoke) | 各个分支网络 |
| 辐条连接轮毂 | Spoke VPC 连接 Transit Gateway |
| 辐条之间不直连 | Spoke VPC 之间通过 Hub 通信 |
在本节的架构图中:
| VPC | 角色 |
|---|---|
| Production VPC (10.1.0.0/16) | Spoke |
| Development VPC (10.2.0.0/16) | Spoke |
| Transit Gateway | Hub |
| Egress VPC (172.16.0.0/24) | 共享服务 VPC |
常见 Hub-and-Spoke 变体:
简单 Hub-Spoke
Spoke VPCs ──► Transit Gateway ──► Shared Services
带检查的 Hub-Spoke
Spoke VPCs ──► TGW ──► NFW ──► NAT ──► Internet
Region A: Spoke ──► TGW-A ──┐
├──► TGW Peering
Region B: Spoke ──► TGW-B ──┘
cloudformation部署好了自动化测试脚本,用于验证我们的网络配置和安全控制。当我们访问测试脚本URL时,它会触发CloudFront后面的Lambda函数,该函数使用AWS Systems Manager在EC2实例上执行命令。这些命令测试合法流量模式和潜在恶意流量的各种网络连接,然后在浏览器中显示哪些连接成功或失败的结果。
这种方法简化了测试,无需从多个EC2实例手动发出命令。由于SSM命令执行和结果收集,脚本通常需要10-15秒来执行。
访问 CloudFormation控制台 ,选择名为 template 的stack,点击 Outputs 标签,在这里,我们可以访问所有测试脚本URL

对应六个实验内容如下:
Lab 1 - Securing Egress Traffic: 使用 Amazon Route 53 Resolver DNS Firewall 和 AWS Network Firewall 保护出口流量。
Lab 2 - Securing VPC to VPC Traffic: 使用 AWS Network Firewall 保护东西向流量。
Lab 3 - Network Observability: 分析由 AWS Network Firewall 和 Amazon Route 53 Resolver DNS Firewall 生成的日志。
Lab 4 - Command and Control Detection: 检测并阻止命令与控制流量模式。
Lab 5 - Domain Allow Lists: 使用域名允许列表实施限制性出站连接。
Lab 6 - TLS Inspection: 使用 AWS Network Firewall 启用加密流量检测。
Egress测试器验证DEV和PROD环境的出站互联网连接,测试到允许目标的合法连接以及到恶意或未授权目标的被阻止连接。
https://<CloudFront-Distribution-Domain>/egress

DEV到PROD测试器验证开发环境和生产环境之间的连接,测试DEV和PROD服务之间允许的连接以及应被安全控制阻止的连接。
https://<CloudFront-Distribution-Domain>/dev-to-prod

Domain Allow List测试器通过测试到明确允许域的连接同时阻止所有其他连接来验证基于域的过滤,确保我们的允许列表配置正常工作。
https://<CloudFront-Distribution-Domain>/allowlist

TLS检测测试器通过测试加密流量模式并验证Network Firewall能够检测和执行HTTPS流量规则来验证TLS解密和检测能力。
https://<CloudFront-Distribution-Domain>/tls-inspection
