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, 云原生架构, 后端开发, 网络访问控制, 运维工具, 防火墙规则