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, 基础架构即代码, 漏洞利用检测, 漏洞探索, 身份与访问管理