# 实现计划:CloudShell Scanner ## 概述 本计划将 CloudShell 扫描器功能分解为可执行的编码任务,包括独立的 Python 扫描脚本、前端上传组件、后端 API 和数据处理服务。 ## 任务 - [x] 1. 创建 CloudShell 扫描脚本 - [x] 1.1 创建 `cloudshell_scanner.py` 基础结构 - 创建单体 Python 文件,包含命令行参数解析 - 实现 CloudShellScanner 类的基本框架 - 添加进度显示和日志输出功能 - _需求: 1.1, 1.2, 1.7_ - [x] 1.2 实现 VPC 相关服务扫描 - 实现 VPC、Subnet、Route Table、Internet Gateway 扫描 - 实现 NAT Gateway、Security Group、VPC Endpoint 扫描 - 实现 VPC Peering、Customer Gateway、VPN Connection 扫描 - _需求: 1.5_ - [x] 1.3 实现 EC2 和计算服务扫描 - 实现 EC2 实例、Elastic IP 扫描 - 实现 Auto Scaling Group、ELB、Target Group 扫描 - 实现 Lambda、EKS 扫描 - _需求: 1.5_ - [x] 1.4 实现数据库和存储服务扫描 - 实现 RDS、ElastiCache 扫描 - 实现 S3 Bucket、S3 Event Notification 扫描 - _需求: 1.5_ - [x] 1.5 实现全局和监控服务扫描 - 实现 CloudFront、Route53、ACM、WAF 扫描 - 实现 SNS、CloudWatch、EventBridge、CloudTrail、Config 扫描 - _需求: 1.5_ - [x] 1.6 实现区域过滤和错误处理 - 实现区域列表获取和过滤逻辑 - 实现错误捕获和继续扫描逻辑 - 实现重试机制(指数退避) - _需求: 1.3, 1.4, 1.8_ - [x] 1.7 实现 JSON 导出功能 - 实现 ScanData 数据结构 - 实现 JSON 序列化和文件导出 - 添加元数据字段(account_id, timestamp, regions, services) - _需求: 1.6, 2.1, 2.2, 2.3, 2.4_ - [ ]* 1.8 编写属性测试:JSON 往返一致性 - **Property 1: JSON 数据往返一致性** - **验证: 需求 2.4, 2.5** - [ ]* 1.9 编写属性测试:服务类型一致性 - **Property 4: 服务类型一致性** - **验证: 需求 1.5** - [x] 2. 检查点 - 确保 CloudShell 扫描脚本可用 - 确保所有测试通过,如有问题请询问用户 - [x] 3. 扩展后端数据模型 - [x] 3.1 创建数据库迁移 - 在 Task 模型中添加 source 字段('credential' 或 'upload') - 在 Task 模型中添加 scan_data_path 字段 - 创建并应用迁移脚本 - _需求: 4.3_ - [x] 3.2 创建 ScanDataProcessor 服务 - 创建 `backend/app/services/scan_data_processor.py` - 实现 validate_scan_data 方法 - 实现 convert_to_scan_result 方法 - _需求: 4.2, 5.1_ - [ ]* 3.3 编写属性测试:JSON 验证完整性 - **Property 6: JSON 验证完整性** - **验证: 需求 3.4, 4.2, 6.2** - [ ]* 3.4 编写属性测试:无效 JSON 错误处理 - **Property 7: 无效 JSON 错误处理** - **验证: 需求 3.3, 3.5, 4.5** - [x] 4. 创建后端上传 API - [x] 4.1 实现上传 API 端点 - 创建 POST /api/tasks/upload-scan 端点 - 实现文件上传处理(最大 50MB) - 实现 JSON 数据验证 - _需求: 4.1, 4.2, 4.5, 4.6_ - [x] 4.2 实现任务创建和 Worker 触发 - 创建任务记录(source='upload') - 保存上传的 JSON 数据 - 触发 Celery Worker 处理任务 - _需求: 4.3, 4.4_ - [x] 4.3 创建上传数据处理 Celery 任务 - 创建 process_uploaded_scan 任务 - 集成 ScanDataProcessor 和 ReportGenerator - 实现任务状态更新和错误处理 - _需求: 5.1, 5.2, 5.3, 5.5_ - [ ]* 4.4 编写单元测试:上传 API - 测试有效数据上传 - 测试无效数据错误响应 - 测试文件大小限制 - _需求: 4.1, 4.5, 4.6_ - [x] 5. 检查点 - 确保后端 API 可用 - 确保所有测试通过,如有问题请询问用户 - [x] 6. 创建前端上传组件 - [x] 6.1 创建 JSON 验证工具 - 创建 `frontend/src/utils/scanDataValidator.ts` - 实现 ScanData 类型定义 - 实现 JSON 结构验证函数 - _需求: 3.3, 3.4_ - [x] 6.2 创建 JsonUploader 组件 - 创建 `frontend/src/components/Upload/JsonUploader.tsx` - 实现文件拖拽和选择上传 - 实现上传前验证和错误提示 - _需求: 3.2, 3.5_ - [x] 6.3 修改任务创建页面 - 在 Tasks.tsx 中添加数据来源选择 - 集成 JsonUploader 组件 - 实现上传模式的表单提交 - _需求: 3.1, 3.6_ - [ ]* 6.4 编写前端单元测试 - 测试 JSON 验证函数 - 测试 JsonUploader 组件 - _需求: 3.3, 3.4, 3.5_ - [x] 7. 集成和端到端测试 - [x] 7.1 集成报告生成 - 确保上传数据能正确生成报告 - 验证报告格式与凭证扫描一致 - _需求: 5.1, 5.2, 5.4_ - [ ]* 7.2 编写属性测试:报告生成一致性 - **Property 8: 报告生成一致性** - **验证: 需求 5.1, 5.2** - [x] 8. 最终检查点 - 确保所有功能正常 - 确保所有测试通过,如有问题请询问用户 ## 备注 - 标记为 `*` 的任务为可选任务,可以跳过以加快 MVP 开发 - 每个任务都引用了具体的需求以确保可追溯性 - 检查点用于确保增量验证 - 属性测试验证通用正确性属性 - 单元测试验证特定示例和边界情况