markthedev12/aws-secure-s3-lab
GitHub: markthedev12/aws-secure-s3-lab
一个演示 AWS S3 安全最佳实践的手动实验项目,通过 IAM 最小权限、加密、访问日志和 CloudTrail 等控制手段,帮助学习者掌握云存储安全加固的核心技能。
Stars: 0 | Forks: 0
# AWS Secure S3 实验
**演示技能:** IAM 最小权限、S3 加密、访问日志、CloudTrail、存储桶策略加固
## 概述
本实验演示了如何遵循 AWS 安全最佳实践来架构和保护 Amazon S3 环境。重点是通过 IAM 应用最小权限原则,启用静态加密,以及通过访问日志和 CloudTrail 建立完整的审计跟踪。
本项目反映了医疗保健、金融服务和受监管行业中常见的现实世界云安全需求。
## 架构
```
┌─────────────────────────────────────────────────────┐
│ IAM Layer │
│ ┌──────────────────────────────────────────────┐ │
│ │ IAM Policy (Least Privilege) │ │
│ │ • s3:GetObject, s3:PutObject only │ │
│ │ • Scoped to specific bucket ARN │ │
│ │ • Denies s3:DeleteObject explicitly │ │
│ └──────────────────┬───────────────────────────┘ │
└─────────────────────┼───────────────────────────────┘
│
┌───────────▼────────────┐
│ Primary S3 Bucket │
│ • SSE-S3 Encryption │
│ • Block Public Access │
│ • Versioning Enabled │
│ • HTTPS-only Policy │
└───────────┬────────────┘
│ Access Logs
┌───────────▼────────────┐
│ Logging S3 Bucket │
│ • Stores access logs │
│ • Separate IAM policy │
└────────────────────────┘
│
┌───────────▼────────────┐
│ CloudTrail │
│ • API call logging │
│ • Immutable log trail │
└────────────────────────┘
```
## 实施的安全控制
### 1. IAM 最小权限策略
**原因:** 向任何用户或角色授予 `s3:*` 都违反了最小权限原则,并且是云安全漏洞中最常见的一种错误配置。此策略仅授予所需的最低权限。
**决策细节:**
- 明确限定在单一的存储桶 ARN 范围内(而不是 `*`)
- 即使未授予权限,也明确拒绝 `s3:DeleteObject` —— 纵深防御
- 不包含 `s3:ListAllMyBuckets` —— 用户无法枚举账户中的其他存储桶
### 2. 服务端加密 (SSE-S3)
**原因:** 默认加密所有静态对象。在本实验中选择 SSE-S3 而不是 SSE-KMS,是因为它不需要额外的 KMS 密钥管理成本,适合非受监管的工作负载。在 HIPAA 或 PCI-DSS 环境中,需要使用带有客户托管密钥 (CMK) 和密钥轮换的 SSE-KMS。
### 3. 阻止公共访问(所有四项设置)
**原因:** 即使有私有的存储桶策略,配置不当的 ACL 也可能意外暴露对象。启用所有四项“阻止公共访问”设置提供了一个强制覆盖,无论对象级别的 ACL 设置如何,都能阻止任何公开暴露。
### 4. S3 访问日志
**原因:** 记录对存储桶发出的每一个请求(请求者、IP、操作、时间戳)。存储在专用的日志存储桶中,以防止日志篡改。这满足了 ISO 27001、SOC 2 和 HIPAA 中的审计跟踪要求。
### 5. 仅限 HTTPS 的存储桶策略
**原因:** 拒绝任何通过 HTTP(未加密)发出的请求。这可以防止针对传输中数据的中间人攻击 —— 这是 HIPAA 安全规则 §164.312(e)(1) 所要求的。
### 6. CloudTrail 集成
## 本仓库中的文件
| 文件 | 描述 |
|------|-------------|
| `README.md` | 项目概述和安全原理 |
| `iam-policy.json` | 包含内联注释的最小权限 IAM 策略 |
| `steps.md` | 包含 CLI 命令的完整实验指南 |
| `screenshot/` | 证明各项配置的控制台截图 |
## 关键要点
- 具有私有 ACL 但未启用“阻止公共访问”的存储桶仍然可能被公开 —— 始终启用所有四项 BPA 设置
- SSE-S3 与 SSE-KMS 的选择是由合规要求和成本驱动的架构决策
- 访问日志和 CloudTrail 服务于不同的目的,两者都是实现完全可审计性所必需的
- IAM 中的显式拒绝始终优先于允许 —— 对于像删除这样的关键操作应使用显式拒绝
## 作者
Mark Schwinn | [LinkedIn](https://www.linkedin.com/in/mark-schwinn-994625362/) | CompTIA Security+ | AWS SAA (进行中)
标签:AWS, CloudTrail, DevSecOps, DPI, EC2, ECS, HTTPS强制, IaC, IAM, JSONLines, ProjectDiscovery, S3, S3访问日志, SSE加密, Streamlit, Terraform, 上游代理, 人工智能安全, 公共访问拦截, 医疗安全, 合规性, 存储安全, 安全可观测性, 安全基线, 安全实验, 安全架构, 审计追踪, 教学环境, 数据保护, 数据加密, 最小权限原则, 版本控制, 网络安全实验, 访问控制, 金融安全, 零信任