giselleevita/secure-docs-aws
GitHub: giselleevita/secure-docs-aws
基于 AWS 无服务器架构的安全文档存储教学项目,通过完整的 IAM、KMS 加密、所有权校验和审计日志设计来教授云安全核心概念。
Stars: 3 | Forks: 0
# SecureDocs AWS
_一个基于 AWS 的安全文档存储服务,旨在教授 IAM、S3、KMS、CloudTrail 和所有权强制执行模式。_
## 概述
SecureDocs AWS 是一个 serverless 文档服务,通过身份验证的用户只能上传、列出、下载和删除属于他们自己的文件。该项目规模虽刻意保持小巧,但却涵盖了在多用户云系统中至关重要的核心安全控制。
它的存在是作为一个动手实践的学习系统,而不是一个生产就绪的产品。其目标是通过一个实际运行的 AWS 设计,使身份、授权、存储安全、最小权限访问和可审计性变得具体可见。
## 架构
用户通过 Cognito 进行身份验证,并通过 HTTP API Gateway 发送基于 JWT 的请求。API Gateway 验证 token,将请求传递给 Lambda,Lambda 将已通过验证的身份作为该操作的所有权边界。
DynamoDB 存储以 owner_id 和 object_key 为键的文件元数据,这允许应用程序在返回数据访问权限之前验证所有权。S3 将实际文件存储在启用了阻止公开访问、使用 KMS 进行服务端加密 (SSE) 以及开启了版本控制的私有 bucket 中。
访问权限被拆分到专门用于上传、读取和删除操作的 IAM 角色中,因此每个 Lambda 函数仅拥有其所需的权限。客户端接收的是短期的 presigned URLs,而不是直接的 S3 凭证,同时 CloudTrail 和 CloudWatch Logs 为 API 和存储活动提供了审计追踪。
## 安全相关功能
- 身份和授权通过 Cognito 和 API Gateway 中的 JWT 验证进行处理。
- 所有权在应用层强制执行:在授予文件访问权限之前,会针对 DynamoDB 进行 owner_id 检查。
- S3 默认为私有,阻止公开访问,使用 SSE-KMS,并启用了版本控制。
- IAM 权限按 Lambda 函数进行拆分,因此上传、读取和删除路径不共享宽泛的角色。
- Presigned URLs 有效期仅为 5 分钟,并且不会向客户端暴露直接的 S3 密钥。
- CloudTrail 和 CloudWatch Logs 跨 API、Lambda 和存储活动提供审计可见性。
- 仓库中包含一个可测试的威胁模型以及记录在 [docs/security/security-decisions.md](docs/security/security-decisions.md) 中的安全决策文档。
## 如何运行
使用 aws configure 配置 AWS 凭证,然后使用 terraform init 和 terraform apply 初始化并应用 Terraform 配置。该配置位于 infra/environments/dev 目录下。
- 前置条件:AWS CLI 和 Terraform
执行 apply 之后,API endpoint 将显示在 Terraform 输出中。
## 存在意义
SecureDocs AWS 是一个学习系统,而不是一个产品。它旨在通过强制系统回答关于请求归属于谁、该用户是否已获授权、静态数据如何受保护以及操作如何被审计等实际问题,来教授与云安全相关的概念。
这使得它非常适合那些从事云安全、DevSecOps 和后端工程,并希望获得关于 IAM 设计、S3 防护、基于 KMS 的加密、presigned 访问模式以及由威胁模型驱动的实现的具体案例的人员。
## 后续计划
自然的后续步骤包括通过 AWS Config 和基于 Lambda 的补救措施来扩展控制集,集成 GuardDuty 和 Security Hub,实施速率限制以及更强的数据丢失防护 (DLP) 模式。
这是一个路线图,而不是一个检查清单。
## 许可证 / 致谢
采用 MIT 许可证授权。
标签:AWS, DPI, ECS, Terraform, 基础架构即代码, 漏洞利用检测, 漏洞探索, 身份与访问管理