ParmeetGill422/AWS-Incident-Response-Lab
GitHub: ParmeetGill422/AWS-Incident-Response-Lab
一个基于AWS的事件响应实战实验,通过三个真实安全场景的完整模拟,配合自定义Python取证工具,系统演练云安全事件的检测、调查、修复和预防全流程。
Stars: 0 | Forks: 0
# 🛡️ AWS 事件响应实验




## 📌 项目概述
本项目模拟了升级工程师每天需要响应的**真实 AWS 安全事件**。从零开始构建了三个完整的突发事件场景,每个场景都贯穿了完整的事件响应生命周期:**检测 → 调查 → 修复 → 预防**。
本项目还包含一个自定义的 **Python 取证工具**,可自动解析 S3 访问日志并生成结构化的事件报告——这与安全运营中心 (SOC) 用于大规模对泄露事件进行分诊的工具类型相同。
此类事件处理工作由 Amazon、Capital One 以及所有以云为先的大型企业中的 **AWS 升级工程师 (ES2)、安全运营团队和事件响应分析师**每天执行。
## 🛠️ 使用的技术
| 服务 / 工具 | 用途 |
|---|---|
| Amazon EC2 | 模拟生产服务器 |
| Amazon CloudWatch | 监控、警报和指标仪表板 |
| AWS CloudTrail | API 调用审计和取证调查 |
| AWS IAM | 身份和访问管理 |
| Amazon S3 | 对象存储和存储桶策略 |
| AWS CloudShell | 基于浏览器的 AWS CLI |
| Python 3 | 自定义取证工具 |
| S3 服务器访问日志 | 泄露分析的取证数据源 |
## 🚨 事件场景
### 事件 1 — CloudWatch 警报分诊 (高 CPU)
**场景:** 触发了一个 CloudWatch 警报,指示 `prod-web-server` 上的 CPU 利用率超过了 40% 的阈值。作为值班工程师,我进行了调查、记录了时间线并解决了该事件。
**严重级别:** P2 性能事件
**响应操作:**
- 配置了带有 SNS 通知的 CloudWatch 警报 `HighCPU-prod-web-server`
- 通过对 EC2 实例进行压力测试触发了受控的 CPU 飙升
- 在 EC2 监控选项卡中调查了 CPU、网络和磁盘指标
- 记录了从检测到解决的事件时间线
- 验证了 CPU 恢复正常后警报已恢复至 OK 状态
**展示技能:** 监控、警报、指标分析、事件文档记录
### 事件 2 — 未授权访问调查
**场景:** 一个用户账户 (`temp-contractor`) 尝试跨 EC2、IAM 和 CloudTrail 服务进行多次未授权的 API 调用。我使用 CloudTrail 取证进行了调查,确定了来源并锁定了该账户。
**严重级别:** P1 安全事件
**响应操作:**
- 创建了仅具有 S3 ReadOnly 访问权限的有限权限 IAM 用户
- 通过 AWS CloudShell 模拟了未授权的 API 尝试
- 在 CloudTrail 事件历史记录中调查了被拒绝的调用
- 提取了取证数据:源 IP、时间戳、错误代码、请求 ID
- 停用了用户的访问密钥作为即时遏制措施
- 应用了显式的 `EmergencyLockout` 拒绝策略作为纵深防御
**展示技能:** CloudTrail 取证、IAM 安全、遏制程序、纵深防御
### 事件 3 — S3 公开暴露泄露 (Capital One 模式)
**场景:** 一个包含敏感客户数据 (`customer-database.csv`、`employee-salaries.csv`、`internal-passwords.txt`) 的 S3 存储桶被错误配置为允许公共互联网访问——复现了曾影响 Capital One 的确切泄露模式。我检测到了该暴露,调查了其影响,并完全修复了该存储桶。
**严重级别:** P0 严重安全事件
**响应操作:**
- 创建了包含看似敏感测试数据的 S3 存储桶
- 启用了 S3 服务器访问日志以提供取证能力
- 配置了授予 `Principal: "*"` `s3:GetObject` 权限的公共存储桶策略
- **演示了主动暴露**——在没有 AWS 凭证的情况下通过隐身浏览器访问了文件
- 在 CloudTrail 中调查了 `PutBucketPolicy` 事件,以确定发生更改的时间和方式
- 分析了 S3 访问日志以识别所有未授权的访问尝试
- 移除了公共存储桶策略
- 在存储桶和账户级别重新启用了 `Block Public Access`
- 通过确认先前暴露的 URL 上返回 `AccessDenied` 响应来验证了修复结果
**展示技能:** S3 安全、存储桶策略、泄露取证、数据暴露分析、账户级别预防性控制
## 🐍 自定义 Python 取证工具
构建了一个自定义的 Python 脚本 (`s3_forensics.py`),用于在发生泄露后自动分析 S3 访问日志。该工具能够:
- 解析来自任何存储桶的原始 S3 访问日志
- 识别未授权的 GET 请求
- 提取源 IP、时间戳、请求 ID 和被访问的文件名
- 计算被窃取的总字节数和暴露的文件数量
- 输出结构化的 JSON 事件报告,可直接交接给 SOC
这展示了编写**运维工具**的能力——这是 ES2 和云安全工程角色的关键技能,在这些角色中,工程师需要自动化可重复的调查工作流。
## 📸 截图
### 事件 1 — CloudWatch 警报分诊
**配置为 OK 状态的警报**

**CPU 飙升期间处于警报状态的警报**

**指标图上可见的 CPU 飙升**


**事件期间显示所有指标的 EC2 监控选项卡**

**解决后警报恢复至 OK 状态**

### 事件 2 — 未授权访问调查
**CloudShell 中 temp-contractor 的多个 Access Denied 错误**

**显示所有被拒绝 API 调用的 CloudTrail 事件历史记录**

**包含源 IP 和错误代码的 CloudTrail 事件详情**

**作为遏制措施已停用访问密钥**

**应用 EmergencyLockout 策略后账户被锁定**

### 事件 3 — S3 公开暴露泄露
**在禁用 Block Public Access 的情况下创建了存储桶(引入了漏洞)**

**敏感文件已上传到存储桶**

**存储桶显示“Publicly accessible”徽章——泄露正在进行中**

**在无凭证情况下通过隐身浏览器公开访问文件**


**CloudTrail PutBucketPolicy 事件显示是谁进行了更改**

**显示未授权 GET 请求的 S3 访问日志**
![S3 访问日志]()
**存储桶已完全修复——Block Public Access 已开启**

**修复后在隐身浏览器中确认了 AccessDenied**

**作为预防性控制措施启用了账户级别的 Block Public Access**

## 🔑 涵盖的关键概念
- **事件响应生命周期** — 检测、调查、遏制、根除、恢复和经验教训
- **CloudWatch 监控** — 指标警报、SNS 通知和仪表板分析
- **CloudTrail 取证** — 在安全事件期间识别谁在什么时间、从哪里做了什么
- **IAM 安全** — 最小权限、访问密钥管理和紧急锁定策略
- **S3 安全** — 存储桶策略、ACL、Block Public Access 和访问日志记录
- **泄露遏制** — 立即撤销访问权限和纵深防御控制
- **预防性控制** — 可防止整类事件发生的账户级别配置
- **安全工具** — 编写 Python 自动化程序以大规模分诊事件
## 🎯 为什么这个项目很重要
这三种事件类型代表了当今生产环境中 **AWS 升级工程师和云安全团队处理的最常见的升级事件**:
- **EC2 性能问题**是客户联系 AWS Support 的首要原因
- **未授权 API 访问调查**是安全运营中心的日常工作
- **S3 公开暴露事件**曾导致 Capital One(罚款 8000 万美元)、Twilio、Verizon、Accenture 等许多公司发生泄露
通过亲自动手构建、破坏和解决每个场景,本实验展示了在事件压力下**在真实生产 AWS 环境中自信操作的能力**。
## 🔗 相关项目
- [LogSentinel](https://github.com/ParmeetGill422/LogSentinel) — Python 日志分析和事件报告自动化工具
- [Active Directory Azure Lab](https://github.com/ParmeetGill422/Active-Directory-Azure-Lab) — 将本地 AD 同步到 Microsoft Entra ID 的混合身份实验
## 👤 作者
**Parmeet Gill**
- LinkedIn: [linkedin.com/in/parmeet-gill57](https://linkedin.com/in/parmeet-gill57)
- GitHub: [github.com/ParmeetGill422](https://github.com/ParmeetGill422)
- 电子邮件: parmeetgill422@gmail.com
*构建此项目作为网络安全作品集的一部分,旨在应聘 SOC 分析师、IAM 分析师和云升级工程师等职位。*
)
**CPU 飙升期间处于警报状态的警报**

**指标图上可见的 CPU 飙升**


**事件期间显示所有指标的 EC2 监控选项卡**

**解决后警报恢复至 OK 状态**

### 事件 2 — 未授权访问调查
**CloudShell 中 temp-contractor 的多个 Access Denied 错误**

**显示所有被拒绝 API 调用的 CloudTrail 事件历史记录**

**包含源 IP 和错误代码的 CloudTrail 事件详情**

**作为遏制措施已停用访问密钥**

**应用 EmergencyLockout 策略后账户被锁定**

### 事件 3 — S3 公开暴露泄露
**在禁用 Block Public Access 的情况下创建了存储桶(引入了漏洞)**

**敏感文件已上传到存储桶**

**存储桶显示“Publicly accessible”徽章——泄露正在进行中**

**在无凭证情况下通过隐身浏览器公开访问文件**


**CloudTrail PutBucketPolicy 事件显示是谁进行了更改**

**显示未授权 GET 请求的 S3 访问日志**
![S3 访问日志]()
**存储桶已完全修复——Block Public Access 已开启**

**修复后在隐身浏览器中确认了 AccessDenied**

**作为预防性控制措施启用了账户级别的 Block Public Access**
![账户 Block Public Access](标签:AWS, CloudTrail, CloudWatch, DevSecOps, DPI, EC2, IaC, IAM身份管理, OPA, PB级数据处理, Python, S3存储桶, 上游代理, 公开曝光修复, 安全培训, 安全工程师, 安全模拟, 安全运维, 库, 应急响应, 数字取证, 无后门, 未授权访问, 网络安全, 自动化脚本, 逆向工具, 隐私保护, 靶场