sawarnee/Zero-Trust-Dynamic-Access-Control-at-Scale
GitHub: sawarnee/Zero-Trust-Dynamic-Access-Control-at-Scale
该方案利用 AWS Client VPN、Transit Gateway 与 Network Firewall 实现基于用户组的端口级动态访问控制,解决大规模多云环境下精细化零信任网络权限管控问题。
Stars: 0 | Forks: 0
# AWS Client VPN + Transit Gateway + Network Firewall — 基于用户的端口级访问控制
一个基于 CloudFormation 的解决方案,演示了如何使用原生终结于 Transit Gateway 上的 AWS Client VPN 以及 AWS Network Firewall(Suricata 状态规则)进行集中化管控,从而实现**针对每个用户/用户组的精细化端口级访问控制**。
## 架构
```
Remote Users ──► Client VPN (TGW, No SNAT) ──► Transit Gateway ──► Network Firewall ──► Workload VPC
│
Suricata Rules:
• Dev → SSH, HTTP, HTTPS ✅
• DBA → PostgreSQL, MySQL ✅
• All other → DROP ❌
```
## 核心功能
- **保留源 IP** — Client VPN 原生终结于 Transit Gateway(无 SNAT),支持根据分配的 IP 实现基于用户的防火墙规则
- **端口级粒度** — Network Firewall Suricata 规则可在单个端口级别针对每个用户组控制访问权限
- **集中化管控** — 所有 VPN 流量的单一检测点;工作负载账户无需管理基于用户的规则
- **多账户就绪** — 通过 AWS RAM 在组织内将 Transit Gateway 共享给各个工作负载账户
- **SAML 就绪** — 支持通过 IAM Identity Center 进行联合身份验证,实现基于组的自动访问控制
- **完整审计追踪** — 使用 DynamoDB 会话追踪,并利用 CloudWatch 日志记录所有连接和访问事件
## 仓库结构
```
├── cfn-dynamic-port-access.yaml # CloudFormation template (SAML + mutual cert, dynamic rules)
├── docs/
│ ├── architecture-diagram.md # Architecture diagrams (Mermaid — rendered by GitHub)
│ ├── design-document.md # Detailed design document
│ ├── cost-breakdown.md # Monthly cost estimates and optimization options
│ ├── testing-guide.md # End-to-end testing walkthrough
│ └── saml-setup-guide.md # IAM Identity Center SAML configuration
├── admin-ui/
│ ├── README.md # Admin panel deployment and usage guide
│ ├── cfn-admin-api.yaml # Admin API CloudFormation template
│ └── index.html # Admin UI for managing group permissions
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
└── README.md
```
## 前置条件
- AWS 账户需具备创建 VPC、TGW、Client VPN、Network Firewall、Lambda、DynamoDB、ACM PCA 的权限
- 已配置适当凭证的 AWS CLI v2
- 区域:`ap-south-1` (Mumbai) — 若使用其他区域请调整参数
- 兼容 OpenVPN 的客户端(AWS VPN Client、Tunnelblick 或 OpenVPN Connect)
## 部署
### 部署(仅证书认证)
```
aws cloudformation create-stack \
--stack-name NHA-CVPN-ANF \
--template-body file://cfn-dynamic-port-access.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--region ap-south-1
```
### 结合 SAML 部署(证书 + 联合身份认证)
```
aws cloudformation create-stack \
--stack-name NHA-CVPN-ANF \
--template-body file://cfn-dynamic-port-access.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--parameters \
ParameterKey=SAMLProviderArn,ParameterValue=arn:aws:iam::ACCOUNT_ID:saml-provider/ClientVPN-IdP \
--region ap-south-1
```
有关创建 IAM SAML provider 的信息,请参阅 [docs/saml-setup-guide.md](docs/saml-setup-guide.md)。
## 部署后
### 1. 下载客户端证书
```
mkdir -p ~/poc-clientvpn && cd ~/poc-clientvpn
aws secretsmanager get-secret-value \
--secret-id POC-DynAccess/ClientCert \
--query SecretString --output text > client-cert.pem
aws secretsmanager get-secret-value \
--secret-id POC-DynAccess/ClientKey \
--query SecretString --output text > client-key.pem
aws secretsmanager get-secret-value \
--secret-id POC-DynAccess/CAChain \
--query SecretString --output text > ca-chain.pem
```
### 2. 生成 .ovpn 配置
```
ENDPOINT_ID=$(aws cloudformation describe-stacks \
--stack-name NHA-CVPN-ANF \
--query "Stacks[0].Outputs[?OutputKey=='ClientVpnEndpointId'].OutputValue" \
--output text)
aws ec2 export-client-vpn-client-configuration \
--client-vpn-endpoint-id $ENDPOINT_ID \
--output text > client-config.ovpn
# 嵌入证书
echo "" >> client-config.ovpn
cat client-cert.pem >> client-config.ovpn
echo " " >> client-config.ovpn
echo "" >> client-config.ovpn
cat client-key.pem >> client-config.ovpn
echo " " >> client-config.ovpn
```
### 3. 连接并测试
使用 AWS VPN Client、Tunnelblick 或 OpenVPN Connect 进行连接,然后使用堆栈输出中的 `WorkloadEC2PrivateIp` 验证端口访问权限:
```
# 从 stack outputs 获取目标 EC2 IP
TARGET_IP=$(aws cloudformation describe-stacks \
--stack-name NHA-CVPN-ANF \
--query "Stacks[0].Outputs[?OutputKey=='WorkloadEC2PrivateIp'].OutputValue" \
--output text)
# Developer (10.200.0.x) — 应该连接
nc -zv -w 10 $TARGET_IP 22 # ✅ SSH allowed
nc -zv -w 10 $TARGET_IP 443 # ✅ HTTPS allowed
nc -zv -w 10 $TARGET_IP 5432 # ❌ PostgreSQL blocked
# DBA (10.200.1.x) — 应该连接
nc -zv -w 10 $TARGET_IP 5432 # ✅ PostgreSQL allowed
nc -zv -w 10 $TARGET_IP 22 # ❌ SSH blocked
```
完整的测试操作步骤请参阅 [docs/testing-guide.md](docs/testing-guide.md)。
## 管理 UI — 管理组权限
`admin-ui/` 文件夹包含一个基于 Web 的管理面板,供安全团队直接管理基于组的访问规则,而无需直接编辑 DynamoDB。
**主要功能:**
- 查看、创建和删除用户组
- 添加或删除各个组的端口级访问规则(目标 IP/CIDR + 端口 + 协议)
- 更改会立即持久化到 `GroupPermissions` DynamoDB 表中
- 新规则将在用户下次连接 VPN 时生效
**快速开始:**
```
# 1. 部署 Admin API stack
aws cloudformation create-stack \
--stack-name NHA-CVPN-AdminAPI \
--template-body file://admin-ui/cfn-admin-api.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey=GroupPermissionsTableName,ParameterValue=POC-GroupPermissions \
--region ap-south-1
# 2. 获取 API URL
aws cloudformation describe-stacks \
--stack-name NHA-CVPN-AdminAPI \
--query "Stacks[0].Outputs[?OutputKey=='ApiUrl'].OutputValue" --output text
# 3. 在浏览器中打开 admin-ui/index.html,粘贴 API URL,点击 Connect
```
完整的部署和使用详情,请参阅 [admin-ui/README.md](admin-ui/README.md)。
## 访问控制矩阵
| SAML 组 | SSH (22) | HTTP (80) | HTTPS (443) | PostgreSQL (5432) | MySQL (3306) | RDP (3389) |
|:---|:---:|:---:|:---:|:---:|:---:|:---:|
| Developers | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| DBAdmins | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
| Developers + DBAdmins (多组) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| 无匹配规则 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
## 成本估算
| 组件 | 每月成本 |
|-----------|-------------|
| AWS Client VPN (平均 80 个并发) | ~$923 |
| AWS Network Firewall (2 个可用区) | ~$580 |
| ACM Private CA | ~$400 |
| Transit Gateway (3 个连接) | ~$154 |
| 其他 (CloudWatch, Lambda, DynamoDB) | ~$46 |
| **总计** | **~$2,103/月** |
## 清理
```
aws cloudformation delete-stack --stack-name NHA-CVPN-ANF --region ap-south-1
```
## 文档
| 文档 | 描述 |
|----------|-------------|
| [架构图](docs/architecture-diagram.md) | 包含 Mermaid 图表的可视化架构 |
| [设计文档](docs/design-document.md) | 详细的设计、数据流和容量规划 |
| [成本明细](docs/cost-breakdown.md) | 组件级成本分析与优化 |
| [测试指南](docs/testing-guide.md) | 端到端测试操作步骤 |
| [SAML 设置指南](docs/saml-setup-guide.md) | IAM Identity Center SAML 配置 |
| [管理 UI 指南](admin-ui/README.md) | 管理面板的部署与使用 |
## 许可证
本项目基于 MIT 许可证授权 — 详情请参阅 [LICENSE](LICENSE) 文件。
## 免责声明
这是一个概念验证实现。若用于生产环境,请审查并强化安全配置、启用多可用区以实现高可用性,并遵守贵组织的安全与合规要求。
标签:AWS, DPI, Metaprompt, PE 加载器, VPN, 云原生架构, 后端开发, 网络访问控制, 运维工具, 防火墙规则