EXL-1/Zero-Trust-Project

GitHub: EXL-1/Zero-Trust-Project

一个在 AWS 上实现零信任安全原则的毕业设计项目,通过 IAM 和 MFA 解决传统边界安全模型在云环境中的不足。

Stars: 0 | Forks: 0

# 零信任云安全 — AWS IAM 与 MFA [![React](https://img.shields.io/badge/Frontend-React-61DAFB?logo=react)](https://react.dev/) [![AWS Amplify](https://img.shields.io/badge/Hosting-AWS%20Amplify-FF9900?logo=amazonaws)](https://aws.amazon.com/amplify/) [![AWS Cognito](https://img.shields.io/badge/Auth-AWS%20Cognito-FF9900?logo=amazonaws)](https://aws.amazon.com/cognito/) [![许可证: 保留所有权利](https://img.shields.io/badge/License-All%20Rights%20Reserved-red.svg)](#) ## 项目简介 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 — 实施前后均进行 | ## 架构 ![系统架构设计](https://static.pigsec.cn/wp-content/uploads/repos/cas/bd/bdc8b99313c7adb2d1cfedb893496b150e3cc1cbd5978949610fd00fca4a24dc.jpg) ## 身份验证如何工作 ``` 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, 多因素认证, 红队行动, 自定义脚本, 身份与访问管理, 零信任