Waliur003/cloud-siem-threat-hunter
GitHub: Waliur003/cloud-siem-threat-hunter
一个基于 AWS 原生服务构建的自动化云 SIEM 与威胁狩猎平台,通过加密数据湖、Athena SQL 分析和 EventBridge/SNS 实时告警实现集中化的安全遥测监控。
Stars: 0 | Forks: 0
# 云安全项目 8:自动化 AWS 云威胁狩猎与 SIEM 平台
## S3 安全数据湖、Athena SQL 引擎与 EventBridge/SNS 实时告警
## 概述
我设计并部署了一个在 AWS 上运行的生产级、自动化 **云安全信息与事件管理 (SIEM) 及威胁狩猎平台**。该项目基于云安全最佳实践构建,利用 **Amazon S3** 和 **AWS KMS** 建立了一个加密的 **安全数据湖**,以持续聚合来自 **AWS CloudTrail** API 管理日志和 **VPC Flow Logs** 的安全遥测数据。
数据接入层使用 **AWS Glue Data Catalog** 来发现日志 schema,允许通过 **Amazon Athena** 进行高速 SQL 威胁查询。为了超越手动威胁狩猎,该平台引入了实时安全自动化:**Amazon EventBridge** 实时监控 CloudTrail 事件流中的未授权 API 操作(`AccessDenied` 和 `UnauthorizedOperation`),将威胁 payload 瞬间路由至 **Amazon SNS** 主题,从而向安全运营中心 (SOC) 人员发送实时邮件告警。
## 面临的问题
依赖手动审查日志或未聚合的云遥测数据会引发严重的安全漏洞和运维瓶颈:
* **未聚合的日志流与有限的可见性:** 分散在各个独立服务(VPC、CloudTrail、S3)中的安全日志阻碍了快速的事件响应和跨服务威胁关联。
* **延迟的事件响应时间:** 在 S3 中手动筛选数百万条原始 JSON 日志记录以查找未授权访问尝试,会导致危险的检测滞后。
* **缺乏实时威胁自动化:** 没有自动化检测 pipeline,凭证泄露或未授权的权限提升尝试会在破坏发生后才被发现。
* **高昂的存储与查询成本:** 在没有集中化编目的情况下查询原始、未索引的日志数据,会导致极高的扫描成本和下降的查询性能。
## 解决方案
* **集中化且加密的安全数据湖:** 将原始的 AWS CloudTrail 管理事件和网络边界 VPC Flow Logs 接入受服务端 KMS 加密保护的 Amazon S3 存储桶。
* **无服务器 SQL 分析引擎:** 通过 AWS Glue 对遥测 schema 进行编目,支持在 Amazon Athena 中进行无服务器 SQL 查询,以狩猎安全异常、Root 账户使用情况以及网络端口探测。
* **实时 EventBridge 威胁模式匹配:** 在 60 秒内分析实时的 CloudTrail 事件模式,检测未授权的 API 调用(`AccessDenied` 和 `UnauthorizedOperation`)。
* **自动化多通道 SNS 告警:** 将 EventBridge 检测规则直接连接到 Amazon Simple Notification Service (SNS) 主题,发送带有详细事件元数据的即时邮件告警。
## 技术栈
| 层级 | 技术 |
|---|---|
| **存储层** | **Amazon S3 Data Lake** (`cloud-siem-security-datalake`), **AWS KMS** 加密 |
| **日志接入流** | **AWS CloudTrail**, **AWS VPC Flow Logs** |
| **数据目录层** | **AWS Glue Data Catalog** (`cloud_siem_db`, `default` catalog) |
| **威胁分析引擎** | **Amazon Athena** (Presto/Trino SQL 无服务器引擎) |
| **事件检测层** | **Amazon EventBridge** (`SIEM-AccessDenied-Detection-Rule`) |
| **通知层** | **Amazon SNS** (`siem-security-alerts`), 邮件协议 |
| **自动化与 CLI** | **AWS CloudShell**, Bash 威胁模拟脚本 |
## 架构图
```
[ AWS Environment ]
│
├─► AWS CloudTrail Logs ────┐
│ │
└─► VPC Flow Logs ─────────┼──► [ S3 Security Data Lake ] ──► [ AWS Glue Data Catalog ]
│ (KMS Encrypted) │
│ ▼
├─► [ Amazon EventBridge ] [ Amazon Athena SQL Engine ]
│ (Threat Rule Pattern) │
│ │ ▼
│ ▼ (Threat Hunting Queries)
└──────► [ Amazon SNS Topic ]
│
▼
[ SOC Email Alert ]
```
## 项目流程
### 1. 加密安全数据湖与 Catalog 设置
* 创建了一个 Amazon S3 存储桶(`cloud-siem-security-datalake`),并配置了 AWS KMS 服务端加密,用作不可变的日志存储库。
* 启用了 AWS CloudTrail 日志记录和 VPC Flow Logs,将 JSON 和列式格式的日志直接路由至 S3 存储前缀。
* 配置了 **AWS Glue Data Catalog** 数据库 `cloud_siem_db`,并导入了 CloudTrail 和 VPC Flow Logs 的表 schema。
### 2. Amazon Athena 威胁套件工程
在 Amazon Athena 中编写了 4 个生产级 SQL 威胁狩猎查询,用于审查安全遥测数据:
1. **`SIEM_01_Live_CloudTrail_Stream`**:验证实时的 CloudTrail 事件解析。
2. **`SIEM_02_Hunt_Access_Denied`**:过滤日志噪声,捕获未授权的 API 枚举和 `AccessDenied` 异常。
3. **`SIEM_03_Detect_Root_Account`**:审计高风险 AWS Root 账户的使用情况。
4. **`SIEM_04_Hunt_Rejected_VPC`**:聚合被 Network ACL/Security Group 阻挡的执行端口扫描的外部 IP 地址。
### 3. EventBridge 检测规则构建
构建了一个 Amazon EventBridge 规则 `SIEM-AccessDenied-Detection-Rule`,并配置了自定义的 JSON 事件模式:
```
{
"source": ["aws.s3", "custom.siem"],
"detail": {
"errorCode": ["AccessDenied", "UnauthorizedOperation"]
}
}
```
将规则执行目标直接映射到 SNS 主题 `siem-security-alerts`。
### 4. Amazon SNS 通知 Pipeline 与策略加固
* 配置了 Amazon SNS 主题 `siem-security-alerts` 并订阅了 SOC 邮件 endpoint。
* 更新了 SNS 访问策略,向 EventBridge 服务主体(`events.amazonaws.com`)授予明确的 `sns:Publish` 权限,确保无缝的跨服务消息传递。
## 基础设施即代码 架构
为了支持可重复的安全基础设施部署,此云 SIEM 平台使用 Terraform 进行了完全模块化:
```
terraform-aws-cloud-siem/
├── main.tf # Provider configuration and KMS encryption keys
├── variables.tf # Abstracted S3 bucket names, email endpoints, and region rules
├── datalake.tf # Encrypted S3 buckets, CloudTrail, and VPC Flow Log streams
├── catalog.tf # AWS Glue Data Catalog database and Athena table DDLs
├── athena.tf # Pre-configured Athena workgroups and saved threat hunting queries
├── eventbridge.tf # EventBridge detection rules and JSON event pattern filters
├── sns.tf # SNS topic, topic access policies, and email subscriptions
└── outputs.tf # S3 bucket ARNs, Athena output locations, and SNS Topic ARNs
```
## 文件级技术解析
### `main.tf`
配置 AWS Provider 要求,并为数据湖静态数据加密配置 AWS KMS 客户管理密钥。
### `variables.tf`
将 AWS 区域(`us-east-1`)、S3 命名模式以及安全通知 endpoint 参数化。
### `datalake.tf`
配置带有公共访问阻挡、存储桶策略以及 CloudTrail/VPC Flow Logs 交付配置的 S3 安全数据湖。
### `catalog.tf`
定义 AWS Glue Data Catalog (`cloud_siem_db`) 并为 Hive/OpenCSV SerDe 日志格式创建外部表定义。
### `athena.tf`
设置 Athena 主工作组和附加用于威胁检测的已保存 SQL 查询。
### `eventbridge.tf`
部署匹配跨 CloudTrail 流的 `AccessDenied` API 调用的 EventBridge 规则。
### `sns.tf`
配置 SNS 主题 `siem-security-alerts`,绑定邮件订阅,并附加允许 `events.amazonaws.com` 发布的资源策略。
### `outputs.tf`
输出 S3 数据湖 ARN、Athena 查询工作组 ID 和 SNS 主题 ARN。
## 遇到的技术难点与工程解决方案
### 挑战 1:Athena 表创建期间的 Hive / SerDe 语法不匹配
**根本原因分析:** 手动为 CloudTrail JSON 日志编写 Athena DDL 脚本会导致 SerDe 解析错误(`mismatched input 'EXTERNAL'`),这是由于 CloudTrail 日志对嵌套 JSON 结构有严格要求。
**架构解决方案:** 利用 AWS CloudTrail 原生的 **Create Athena Table** 集成功能,在默认的 Glue catalog 中自动生成优化后的 SerDe 表 schema(`cloudtrail_logs_cloud_siem_security_datalake_cloudtrail`),解决了 schema 解析问题。
### 挑战 2:EventBridge 事件注入限制 (`NotAuthorizedForSourceException`)
**根本原因分析:** 尝试通过 CLI 使用 `"Source": "aws.s3"` 将模拟的测试事件注入 EventBridge 时,会抛出 `NotAuthorizedForSourceException`,因为 AWS 阻止手动 CLI 调用伪造官方 AWS 服务命名空间。
**架构解决方案:** 更新 EventBridge 事件模式过滤器,使其同时接受官方服务事件(`aws.s3`)和自定义应用程序源(`custom.siem`)。通过自定义 Bash 脚本 (`simulate_threats.sh`) 执行真实的 API 调用,允许 CloudTrail 发出真实的 S3 事件。
### 挑战 3:由于缺少主体权限导致 SNS 消息被静默丢弃
**根本原因分析:** 尽管 EventBridge 匹配到了威胁规则,但收件箱中没有收到任何邮件通知。默认的 SNS 主题访问策略将 `sns:Publish` 操作限制为账户主体,从而静默阻止了 EventBridge (`events.amazonaws.com`) 的调用。
**架构解决方案:** 在 SNS 访问策略中添加了专用声明,向 `events.amazonaws.com` 授予明确的 `sns:Publish` 权限。
## 验证与结果
* **验证了实时日志接入:** Amazon Athena 成功解析了传入的原始 CloudTrail 日志,显示了实时的 AWS API 调用(`PutObject`, `GenerateDataKey`)。
* **捕获了活动威胁:** Athena 威胁查询 2 检测到了在模拟威胁测试期间产生的 4 个实时的 `AccessDenied` / `HeadBucket` 安全异常。
* **审计了 Root 账户与网络边界:** 查询 3 验证了没有任何未授权的 AWS Root 账户登录,而查询 4 验证了针对 VPC Flow Logs 的网络边界丢弃检查。
* **验证了自动化实时告警:** 在 EventBridge 规则执行后的几秒钟内,收到了包含 JSON 威胁元数据的实时 SNS 安全告警邮件。
## 验证截图
### 1. 实时 CloudTrail 日志遥测验证(Athena 查询 1)
展示了 Amazon Athena 对表 `default.cloudtrail_logs_cloud_siem_security_datalake_cloudtrail` 执行查询 1(`SIEM_01_Live_CloudTrail_Stream`)。该查询返回了 10 行实时日志记录(`PutObject`, `GenerateDataKey`, `GetBucketAcl`),扫描了 105.22 KB 的数据,确认 CloudTrail JSON 事件正在被正确接入和解析。
### 2. 实时 Access Denied 威胁检测(Athena 查询 2)
展示了 Amazon Athena 运行查询 2(`SIEM_02_Hunt_Access_Denied`)。该查询分离出了源自 `delivery.logs.amazonaws.com` 在 `s3.amazonaws.com` 上产生的 4 个实时 `AccessDenied` 安全事件(`PutObject` 和 `HeadBucket` 操作),验证了威胁狩猎查询能够过滤噪声以突出显示安全异常。
### 3. AWS Root 账户滥用监控(Athena 查询 3)
捕获了 Amazon Athena 运行查询 3(`SIEM_03_Detect_Root_Account`)搜索 `useridentity.type = 'Root'` 的画面。该查询扫描了 105.22 KB 的遥测数据并返回 0 个结果(`Results (0)`),验证了查询的执行,并确认在审计期间未发生任何未授权的 Root 用户操作。
### 4. 被阻挡的 VPC 网络边界流量探测(Athena 查询 4)
展示了 Amazon Athena 针对 `cloud_siem_db.vpc_flow_logs` 执行查询 4(`SIEM_04_Hunt_Rejected_VPC`)。该查询聚合了被阻挡的网络流量(`action = 'REJECT'`),确认网络遥测 schema 已正确配置以跟踪外部 IP 端口扫描。
### 5. VPC Flow Logs 外部 Schema 与数据目录 DDL 创建
展示了在 Amazon Athena 中执行 SQL DDL 语句(`CREATE EXTERNAL TABLE IF NOT EXISTS cloud_siem_db.vpc_flow_logs...`)。该语句在 AWS Glue Data Catalog 中确立了 VPC Flow Logs 的列式 schema 映射。
### 6. Amazon EventBridge 自动化威胁检测规则与目标绑定
捕获了 Amazon EventBridge 控制台显示活动规则 `SIEM-AccessDenied-Detection-Rule` 的画面。审查界面确认自定义事件模式匹配 `AccessDenied` 和 `UnauthorizedOperation` 错误,且目标已绑定到 SNS 主题 `siem-security-alerts`。
### 7. 实时 Amazon SNS 自动化实时邮件告警 Payload
捕获了一封发送到 SOC 收件箱的实时安全通知邮件,发件人为 `AWS Notifications `。该邮件包含 JSON 威胁详情(`"errorCode": "AccessDenied"`, `"eventName": "GetObject"`),与事件 ID `179c1f24-b48a-4fb6-fbb2-5f359e55fadb` 相匹配,确认了端到端的自动化告警。
## 未来改进
* **Amazon QuickSight 安全仪表板:** 构建可视化的 SOC 仪表板,展示威胁分布、地理 IP 地图和 `AccessDenied 趋势线。
* **自动化 Lambda 事件补救:** 将 AWS Lambda 函数附加到 EventBridge 规则上,以便在检测到时自动撤销被泄露的 IAM 凭证,或在 AWS WAF 中屏蔽违规 IP 地址。
* **Apache Parquet 日志压缩:** 部署 AWS Glue ETL 任务,将原始 JSON CloudTrail 日志转换为压缩的 Apache Parquet 格式,从而将 Athena 查询扫描成本降低多达 80%。
## 备注
该项目展示了端到端的云安全实施,涵盖了日志聚合、编目、无服务器 SQL 威胁狩猎以及事件驱动的告警。它突出了在核心云安全工程师领域的专业技能,包括 S3 数据湖管理、KMS 加密、Glue 编目、Athena 威胁狩猎、EventBridge 规则过滤和 SNS 通知架构。
## 结论
**自动化 AWS 云威胁狩猎与 SIEM 平台** 建立了端到端的云安全 pipeline。通过在 S3 数据湖中整合加密遥测数据,使用 AWS Glue 对日志流进行编目,在 Amazon Athena 中执行有针对性的威胁查询,以及通过 EventBridge 和 SNS 发送实时通知,该架构在 AWS 环境中提供了持续的可见性、主动的威胁检测和快速的事件响应能力。
### 2. 实时 Access Denied 威胁检测(Athena 查询 2)
展示了 Amazon Athena 运行查询 2(`SIEM_02_Hunt_Access_Denied`)。该查询分离出了源自 `delivery.logs.amazonaws.com` 在 `s3.amazonaws.com` 上产生的 4 个实时 `AccessDenied` 安全事件(`PutObject` 和 `HeadBucket` 操作),验证了威胁狩猎查询能够过滤噪声以突出显示安全异常。
### 3. AWS Root 账户滥用监控(Athena 查询 3)
捕获了 Amazon Athena 运行查询 3(`SIEM_03_Detect_Root_Account`)搜索 `useridentity.type = 'Root'` 的画面。该查询扫描了 105.22 KB 的遥测数据并返回 0 个结果(`Results (0)`),验证了查询的执行,并确认在审计期间未发生任何未授权的 Root 用户操作。
### 4. 被阻挡的 VPC 网络边界流量探测(Athena 查询 4)
展示了 Amazon Athena 针对 `cloud_siem_db.vpc_flow_logs` 执行查询 4(`SIEM_04_Hunt_Rejected_VPC`)。该查询聚合了被阻挡的网络流量(`action = 'REJECT'`),确认网络遥测 schema 已正确配置以跟踪外部 IP 端口扫描。
### 5. VPC Flow Logs 外部 Schema 与数据目录 DDL 创建
展示了在 Amazon Athena 中执行 SQL DDL 语句(`CREATE EXTERNAL TABLE IF NOT EXISTS cloud_siem_db.vpc_flow_logs...`)。该语句在 AWS Glue Data Catalog 中确立了 VPC Flow Logs 的列式 schema 映射。
### 6. Amazon EventBridge 自动化威胁检测规则与目标绑定
捕获了 Amazon EventBridge 控制台显示活动规则 `SIEM-AccessDenied-Detection-Rule` 的画面。审查界面确认自定义事件模式匹配 `AccessDenied` 和 `UnauthorizedOperation` 错误,且目标已绑定到 SNS 主题 `siem-security-alerts`。
### 7. 实时 Amazon SNS 自动化实时邮件告警 Payload
捕获了一封发送到 SOC 收件箱的实时安全通知邮件,发件人为 `AWS Notifications
## 未来改进
* **Amazon QuickSight 安全仪表板:** 构建可视化的 SOC 仪表板,展示威胁分布、地理 IP 地图和 `AccessDenied 趋势线。
* **自动化 Lambda 事件补救:** 将 AWS Lambda 函数附加到 EventBridge 规则上,以便在检测到时自动撤销被泄露的 IAM 凭证,或在 AWS WAF 中屏蔽违规 IP 地址。
* **Apache Parquet 日志压缩:** 部署 AWS Glue ETL 任务,将原始 JSON CloudTrail 日志转换为压缩的 Apache Parquet 格式,从而将 Athena 查询扫描成本降低多达 80%。
## 备注
该项目展示了端到端的云安全实施,涵盖了日志聚合、编目、无服务器 SQL 威胁狩猎以及事件驱动的告警。它突出了在核心云安全工程师领域的专业技能,包括 S3 数据湖管理、KMS 加密、Glue 编目、Athena 威胁狩猎、EventBridge 规则过滤和 SNS 通知架构。
## 结论
**自动化 AWS 云威胁狩猎与 SIEM 平台** 建立了端到端的云安全 pipeline。通过在 S3 数据湖中整合加密遥测数据,使用 AWS Glue 对日志流进行编目,在 Amazon Athena 中执行有针对性的威胁查询,以及通过 EventBridge 和 SNS 发送实时通知,该架构在 AWS 环境中提供了持续的可见性、主动的威胁检测和快速的事件响应能力。标签:AWS, C语言, DPI, 云计算安全, 安全数据分析, 应用安全