Osolaja/aws-s3-auto-remediation
GitHub: Osolaja/aws-s3-auto-remediation
基于 Terraform 的 AWS S3 存储桶公开访问自动检测与修复方案,通过事件驱动架构在存储桶变为不合规时自动恢复安全设置并发出通知。
Stars: 0 | Forks: 0
# AWS S3 公开访问自动修复
## 项目概述
本项目展示了一个自动化云安全修复工作流,它使用 AWS 原生服务和基础设施即代码(Terraform)来检测并修复公开可访问的 Amazon S3 存储桶。
当 S3 存储桶变为公开可访问时,AWS Config 会根据托管安全规则持续评估该存储桶的合规性。如果判定该存储桶不合规,Amazon EventBridge 会将合规性变更事件路由到 AWS Lambda 函数。该 Lambda 函数会自动恢复存储桶的“阻止公开访问”设置,并使用 Amazon SNS 来支持安全通知。
该项目已在一个 AWS 环境中通过 Terraform 进行了部署、测试和验证,CloudWatch Logs 确认了 Lambda 成功执行并完成了自动修复。
## 问题描述
公开可访问的 Amazon S3 存储桶是最常见的云安全配置错误之一,并导致了众多现实世界中的数据泄露事件。如果未能及时发现并纠正配置错误,意外配置为公开访问的存储桶可能会暴露敏感数据。
虽然可以进行手动监控,但这种速度缓慢、容易出错,且在云环境中无法有效扩展。本项目演示了如何使用 AWS 原生安全服务自动检测不合规的 S3 存储桶,并在无需人工干预的情况下修复该问题,从而缩短敏感资源暴露的时间。
## 解决方案架构
该解决方案采用了基于 AWS 原生服务和 Terraform 构建的事件驱动架构。
AWS Config 会根据托管的 `s3-bucket-public-read-prohibited` 合规性规则持续评估 Amazon S3 存储桶。当存储桶变为不合规时,AWS Config 会生成一个合规性变更事件。
Amazon EventBridge 捕获该合规性事件并调用 AWS Lambda 函数。该 Lambda 函数会自动在受影响的 S3 存储桶上启用“阻止公开访问”设置,使存储桶恢复到合规状态。同时集成了 Amazon SNS 以支持安全通知,而 Amazon CloudWatch Logs 则提供执行日志以用于监控和故障排除。
通过使用 Terraform 来配置和管理所有基础设施,确保了部署的可重复性、一致性和版本控制。
### 架构图

## 使用的 AWS 服务
| AWS 服务 | 用途 |
|------------|---------|
| AWS Config | 根据托管合规性规则持续评估 S3 存储桶,以检测公开访问。 |
| Amazon EventBridge | 将来自 AWS Config 的合规性变更事件路由到 Lambda 函数。 |
| AWS Lambda | 通过启用“阻止公开访问”设置,自动修复不合规的 S3 存储桶。 |
| Amazon S3 | 存储受监控并接受修复的存储桶。 |
| Amazon SNS | 在修复事件发生后支持安全通知。 |
| Amazon CloudWatch Logs | 捕获 Lambda 执行日志,用于监控和故障排除。 |
| AWS IAM | 为 AWS Config 和 Lambda 提供最小权限,确保它们能安全地执行任务。 |
| Terraform | 以基础设施即代码的方式配置和管理 AWS 基础设施。 |
## 工作流程
1. 一个 Amazon S3 存储桶受到 AWS Config 的监控。
2. AWS Config 根据托管的 `s3-bucket-public-read-prohibited` 合规性规则持续评估该存储桶。
3. 如果该存储桶变为公开可访问,AWS Config 会将资源标记为 **NON_COMPLIANT**(不合规)并生成合规性变更事件。
4. Amazon EventBridge 接收该合规性事件并调用 AWS Lambda 修复函数。
5. Lambda 函数在受影响的存储桶上启用 Amazon S3 “阻止公开访问”设置。
6. Amazon SNS 支持安全通知,同时 Amazon CloudWatch Logs 会记录修复活动,以用于审计和故障排除。
7. AWS Config 重新评估该存储桶,并确认其已恢复至 **COMPLIANT**(合规)状态。
## Terraform 部署
该项目完全使用 Terraform 进行部署,允许将基础设施定义为代码,而不是通过 AWS 管理控制台手动创建。
使用 Terraform 提供了以下几个优势:
- 跨环境的可重复部署。
- 通过 Git 对基础设施进行版本控制。
- 一致的资源配置。
- 更易于维护和未来的功能增强。
- 降低了手动更改导致配置漂移的风险。
所有主要的 AWS 资源,包括 AWS Config、EventBridge、Lambda、SNS、IAM 角色及相关支持基础设施,均使用 Terraform 进行配置。
## 演示
以下截图展示了该解决方案的成功部署、执行和自动修复过程。
### Terraform 部署
- AWS Config 资源已成功创建。
- EventBridge 规则和 Lambda 权限已部署。
- SNS 主题和邮件订阅已创建。
### AWS Config
- 为 S3 配置了 AWS Config Recorder。
- 修复后,存储桶状态从 **NON_COMPLIANT** 转换为 **COMPLIANT**。
### Lambda 与 CloudWatch Logs
- CloudWatch Logs 确认 Lambda 成功执行。
- 日志显示受影响的存储桶已被自动修复。
### Terraform – AWS Config 部署
此截图展示了使用 Terraform 成功部署 AWS Config 资源的过程。

### Terraform – EventBridge 部署
此截图确认了 Amazon EventBridge 规则、事件目标以及 Lambda 权限已成功部署。

### Terraform – SNS 部署
此截图展示了 Amazon SNS 主题和邮件订阅的成功创建。

### AWS Config Recorder
配置了 AWS Config Recorder 以持续评估 Amazon S3 资源。

### AWS Config – NON_COMPLIANT
AWS Config 检测到 S3 存储桶违反了托管合规规则。

### AWS Config – COMPLIANT
AWS Config 确认在修复 Lambda 函数执行后,存储桶已恢复到合规状态。

### CloudWatch Log Group
包含 Lambda 执行历史记录的 CloudWatch Logs。

### CloudWatch 修复成功
CloudWatch Logs 确认 Lambda 函数已成功修复受影响的 S3 存储桶。

## 安全考量
本项目在设计时充分考虑了云安全最佳实践。
- **最小权限:** IAM 角色和策略经过了精心配置,确保 AWS Lambda 和 AWS Config 仅拥有执行其特定任务所需的权限。
- **自动修复:** 安全问题会被自动纠正,从而缩短资源暴露的时间。
- **持续合规:** AWS Config 会根据托管合规性规则持续评估 S3 存储桶的配置。
- **事件驱动架构:** Amazon EventBridge 仅在发生合规性变更时才调用修复,避免了不必要的执行。
- **基础设施即代码:** Terraform 使基础设施能够进行版本控制、可重复部署,且比手动创建的资源更易于审计。
- **监控与审计:** Amazon CloudWatch Logs 提供了修复操作的审计追踪记录,用于故障排除和验证。
## 未来改进
本项目潜在的增强功能包括:
- 支持针对更多 Amazon S3 合规规则进行修复。
- 集成 AWS Security Hub 以集中管理安全调查结果。
- 向 Microsoft Teams 或 Slack 发送格式化的通知。
- 将修复历史记录存储在 Amazon DynamoDB 中,用于报告和审计。
- 生成 CloudWatch 控制面板以可视化合规性趋势。
- 扩展解决方案,以修复 Amazon S3 之外的其他 AWS 资源。
## 仓库结构
```
aws-s3-auto-remediation/
├── screenshots/
│ ├── aws-config-compliant.png
│ ├── aws-config-noncompliant.png
│ ├── aws-config-recorder.png
│ ├── cloudwatch-lambda-log-group.png
│ ├── cloudwatch-remediation-success.png
│ ├── terraform-config-rule-apply.png
│ ├── terraform-eventbridge-deployment.png
│ └── terraform-sns-apply.png
├── lambda_function.py
├── main.tf
├── outputs.tf
├── variables.tf
├── README.md
├── PROJECT_PLAN.md
└── .gitignore
```
标签:AWS, DPI, ECS, S3合规, Terraform, 事件驱动架构, 模块化设计, 自动化修复, 逆向工具