EXL-1/Zero-Trust-Project
GitHub: EXL-1/Zero-Trust-Project
一个在 AWS 上实现零信任安全原则的毕业设计项目,通过 IAM 和 MFA 解决传统边界安全模型在云环境中的不足。
Stars: 0 | Forks: 0
# 零信任云安全 — AWS IAM 与 MFA
[](https://react.dev/)
[](https://aws.amazon.com/amplify/)
[](https://aws.amazon.com/cognito/)
[](#)
## 项目简介
2024 年报告的网络漏洞总数达到 **40,000 个** —— 是
2020 年记录数字的两倍多。当用户、设备和应用程序在固定网络边界之外运行时,传统的基于边界的安全模型在云环境中就会失效。
这个项目回答了一个问题:
答案是:实施**“永不信任,始终验证”** —— 不断
对每个用户进行身份验证,对每个服务强制执行最小权限访问,
并实时监控每一次登录事件。
## 功能特性
| 功能 | 实现方式 |
|---|---|
| TOTP 多因素身份验证 (MFA) | AWS Cognito + Google Authenticator / Authy |
| 基于角色的访问控制 (RBAC) | AWS IAM 组 — 管理员 / 开发者 / 普通用户 |
| 最小权限强制执行 | 针对每个用户组的细粒度 IAM 策略 |
| 实时安全监控 | AWS CloudWatch — CognitoSecurityEvents 仪表板 |
| 暴力破解检测 | 5 分钟内 4 次以上登录失败触发 CloudWatch 警报 |
| 安全 HTTP 头 | HSTS, CSP, X-Frame-Options, X-Content-Type-Options |
| Serverless 架构 | AWS Amplify — 来自 GitHub 的自动化 CI/CD pipeline |
| 漏洞评估 | OWASP ZAP, Nmap 和 cURL — 实施前后均进行 |
## 架构

## 身份验证如何工作
```
User enters username + password
|
v
AWS Cognito validates credentials
|
+----+----+
| |
Fail Pass
| |
Error Prompt for TOTP code
shown (Google Authenticator / Authy)
|
+----+----+
| |
Fail Pass
| |
Error Session token created
shown --> Redirect to Dashboard
```
每次登录都需要双重因素 —— 密码加上在用户设备上离线生成的基于时间
的代码。无一例外。
## 应用的零信任原则
| 原则 | 实现方式 |
|---|---|
| 永不信任,始终验证 | 每个用户在访问任何内容之前都必须通过密码 + TOTP 验证 |
| 最小权限访问 | IAM 用户仅拥有其角色所需的权限 |
| 假设已被突破 | 通过 CloudWatch 进行持续监控;检测到可疑活动时触发警报 |
| 显式验证 | 对所有 IAM 控制台用户和所有 Cognito 应用用户强制执行 MFA |
| 持续监控 | 具有地理位置、IP 地址和事件追踪功能的实时仪表板 |
## 安全测试结果
使用 OWASP ZAP, Nmap 和 cURL 进行了两次全面的漏洞评估 —— 分别在安全强化
之前和之后进行。
| 严重程度 | 强化前 | 强化后 | 变化 |
|---|---|---|---|
| 高危 | 0 | 0 | 无变化 |
| 中危 | 3 | 5 | 引入了新的 CSP 指令 |
| 低危 | 4 | 2 | 已解决 |
| 信息 | 9 | 10 | +1 |
| **总计** | **16** | **17** | |
修复缺失的安全头引入了新的 CSP 风险。这就是
实践中的零信任 —— 安全是持续改进,而不是
一次性的修复。
### 已确认的安全态势
- 强制执行 HTTPS — HTTP 返回 `301 Moved Permanently`
- 仅开放 80 和 443 端口 — 端口 80 重定向至 443
- 强制执行 HSTS (`max-age=63072000; includeSubDomains; preload`)
- 对所有 IAM 用户和所有 Cognito 用户强制执行 MFA
- 应用最小权限 — 移除了开发者的 AdministratorAccess
- 移除了未使用的 IAM 访问密钥
- 无服务端 `/login` endpoint — 身份验证通过 Cognito 在客户端处理
- ⚠️ CSP 包含 `unsafe-inline` / `unsafe-eval` — 已标记待未来修复
- ⚠️ Session 过期未自动强制执行 — 提供手动登出功能
## 技术栈
| 层级 | 技术 |
|---|---|
| 前端 | React.js (HTML, CSS, JavaScript) |
| 路由 | react-router-dom — GuestRoutes + ProtectedRoutes |
| 身份验证 | AWS Cognito — 通过 Authenticator Apps 进行 TOTP MFA |
| 托管 | AWS Amplify — 来自 GitHub 的 CI/CD |
| 访问控制 | AWS IAM — 组, 用户, 最小权限策略 |
| 监控 | AWS CloudWatch — CognitoSecurityEvents 仪表板 |
| 警报 | AWS SNS — 登录失败达到阈值时发送电子邮件警报 |
| 安全测试 | OWASP ZAP, Nmap, cURL |
## 项目结构
```
zero-trust/
├── src/
│ ├── project/
│ │ └── styles/
│ │ ├── globalStyles.js # Reusable CSS-in-JS styling
│ │ └── colors.js # Centralised colour theming
│ ├── authentication.js # Cognito auth functions
│ ├── login.js # Login + MFA interface
│ └── app.js # Routing — GuestRoutes / ProtectedRoutes
├── .env # Not committed — secrets only
├── customHttp.yml # AWS Amplify security headers
└── package.json
```
## 已知局限与未来工作
- 完善 CSP — 使用基于 nonce 的策略替换 `unsafe-inline` / `unsafe-eval`
- 启用 CloudTrail — 审计跨 AWS 服务的所有 IAM 用户操作
- 实现非活动状态后的自动会话过期
- 为 `/totp-setup` 和 `/mfa` 页面添加路由保护
- 启用 Cognito 阻止模式 — 从仅审计升级为主动威胁拦截
- 集成 AWS WAF 以自动缓解攻击模式
- 添加 AWS RDS 数据库层,为特权用户提供 CRUD 操作
- 在自动化扫描的基础上进展到完整的渗透测试 |
## 法规遵从
| 标准 | 覆盖范围 |
|---|---|
| 英国 GDPR | 严格的访问控制保护个人身份信息 |
| OWASP Top 10 | 解决失效的访问控制、安全配置错误、身份验证失败和日志记录失败问题 |
| 审计准备 | CloudWatch 日志提供所有身份验证事件的可追溯记录 |
## 许可证
版权所有 (c) 2025 Lucas Malik & University of Northampton。保留所有权利。
标签:AWS, AWS Cognito, CTI, DPI, JSONLines, React, Syscalls, 多因素认证, 红队行动, 自定义脚本, 身份与访问管理, 零信任