Bommalimallesu/api-security-observatory

GitHub: Bommalimallesu/api-security-observatory

一个融合 Kong 网关防护、API 风险评分与 Grafana 可观测性技术栈的防御性 API 安全实验室。

Stars: 0 | Forks: 0

# API 安全观测台 ### 主动 API 拦截、API 风险评分与 SOC 风格可观测性实验室 ![项目状态](https://img.shields.io/badge/Status-Portfolio%20Lab-blue) ![安全焦点](https://img.shields.io/badge/Focus-API%20Security-red) ![网关](https://img.shields.io/badge/Gateway-Kong-yellow) ![监控](https://img.shields.io/badge/Monitoring-Grafana%20%7C%20Prometheus-orange) ![日志](https://img.shields.io/badge/Logging-Loki%20%7C%20Promtail-lightgrey) ![验证](https://img.shields.io/badge/Validation-Curl%20%7C%20Burp%20%7C%20ZAP-purple) ![许可证](https://img.shields.io/badge/License-MIT-green) 一个使用 Kong Gateway、Flask、Prometheus、Loki、Promtail 和 Grafana 构建的防御性 API 安全实验室。
## 概述 **API Security Observatory** 是一个基于本地 Docker 的网络安全项目,演示了如何使用现代网关和可观测性技术栈来保护、监控、评分、记录和调查 API 流量。 该项目将 **Kong API Gateway** 部署在 Flask API 的前端,对受保护的路由应用 API 密钥认证,在网关层拦截可疑的请求模式,生成 API 风险评分,并使用 **Grafana、Loki、Promtail 和 Prometheus** 将日志和指标发送到 SOC 风格的监控工作流中。 本仓库旨在作为一个专业的作品集实验室,专注于 API 安全、检测工程和 DevSecOps 风格的验证。 ## 核心能力 | 领域 | 能力 | | -------------------- | ---------------------------------------------------------------------- | | API 网关安全 | Kong 路由、API 密钥认证、限流、请求过滤 | | 主动拦截 | 针对可疑 payload 特征的网关层拦截 | | API 风险评分 | 基于规则的传入 API 请求风险评分 | | 可观测性 | 集中式日志、指标和仪表盘可见性 | | SOC 监控 | 拦截攻击源、调查工作流和告警逻辑 | | 验证证据 | Curl、Burp Suite 和 OWASP ZAP 风格的验证文档 | | 合规性支持 | 基于证据的报告和安全控制文档 | | 项目审计 | 仓库清理、编码检查、链接检查和质量审查 | ## 本地验证行为 | 验证测试 | 结果 | | ------------------------------------------------ | -------- | | Docker 技术栈成功启动 | 已验证 | | Kong Gateway 运行健康 | 已验证 | | 公开 `/health` 路由无需 API 密钥即可访问 | 已验证 | | 受保护的 `/api/echo` 路由需要 API 密钥 | 已验证 | | 有效的 API 密钥成功到达 Flask API | 已验证 | | 正常请求返回 LOW 风险评分 | 已验证 | | SQL 注入关键字 `UNION` 被 Kong 拦截 | 已验证 | | 可观测性技术栈容器成功运行 | 已验证 | ## 架构 GitHub 架构图像的推荐视觉比例为:**1:1.618**,大约为 **3:5**。 建议的 Banner 尺寸: ``` 1200 x 742 px 1500 x 927 px ``` ``` flowchart LR Client["Client / Tester"] --> Kong["Kong API Gateway"] Kong --> Route["Route Matching"] Route --> Auth["API Key Authentication"] Auth --> RateLimit["Rate Limiting"] RateLimit --> Blocker["Active Blocking Logic"] Blocker -->|Allowed Request| API["Flask API Service"] Blocker -->|Blocked Request| Deny["403 Blocked Response"] API --> Risk["Risk Scoring Engine"] Risk --> Response["JSON Response"] Kong --> KongLogs["Kong Logs"] API --> AppLogs["Application Logs"] KongLogs --> Promtail["Promtail"] AppLogs --> Promtail Promtail --> Loki["Loki"] Kong --> Metrics["Gateway Metrics"] Metrics --> Prometheus["Prometheus"] Loki --> Grafana["Grafana Dashboards"] Prometheus --> Grafana Grafana --> SOC["SOC-Style Monitoring View"] ``` ## 安全事件流 ``` sequenceDiagram participant Client as Client participant Kong as Kong Gateway participant Blocker as Blocking Logic participant API as Flask API participant Risk as Risk Engine participant Logs as Loki / Grafana Client->>Kong: Send HTTP request Kong->>Kong: Match route alt Public health route Kong-->>Client: Health response else Protected API route Kong->>Kong: Validate API key Kong->>Blocker: Inspect request payload alt Suspicious pattern detected Blocker-->>Client: 403 blocked response Blocker->>Logs: Store blocked attack event else Request allowed Kong->>API: Forward request API->>Risk: Calculate risk score Risk-->>API: Return risk result API-->>Client: JSON response API->>Logs: Store API event end end ``` ## 技术栈 | 层级 | 技术 | | ---------------- | ----------------------------------------- | | API 网关 | Kong Gateway | | 后端 API | Python Flask | | 风险引擎 | 自定义基于规则的 Python 引擎 | | 指标 | Prometheus | | 日志 | Loki | | 日志收集 | Promtail | | 可视化 | Grafana | | 容器化 | Docker Compose | | 验证 | Curl、Burp Suite、OWASP ZAP 风格测试 | | 文档 | Markdown | ## 仓库结构 ``` api-security-observatory/ |-- README.md |-- PROJECT-OVERVIEW.md |-- ARCHITECTURE.md |-- QUICK-START-GUIDE.md |-- SECURITY-DISCLAIMER.md |-- CONTRIBUTING.md |-- LICENSE |-- docker-compose.yml |-- .env.example |-- .gitignore | |-- 01-INFRASTRUCTURE/ |-- 02-API-SERVICE/ |-- 03-KONG-GATEWAY/ |-- 04-OWASP-API-TOP-10-DETECTION/ |-- 05-OBSERVABILITY-STACK/ |-- 06-DETECTION-ENGINEERING/ |-- 07-GRAFANA-DASHBOARDS/ |-- 08-SECURITY-VALIDATION/ |-- 09-COMPLIANCE-REPORTING/ |-- 10-EVIDENCE-VAULT/ |-- 11-AUTOMATION-SCRIPTS/ |-- 12-OPERATIONS-RUNBOOKS/ |-- 13-PROJECT-DOCUMENTATION/ |-- 14-ARCHITECTURE-ASSETS/ |-- 15-TOOLS-VERSION-REFERENCE/ |-- 16-ROADMAP/ `-- 17-PROJECT-AUDIT/ ``` ## 核心组件 ### Kong API Gateway Kong 作为 API 服务的前端安全层。 它负责处理: * API 路由 * API 密钥认证 * 限流 * 网关层请求检查 * 主动拦截 * 安全事件记录 当前路由行为: | 路由 | 行为 | | ---------------------------- | ------------------------ | | `/health` | 公开健康检查 | | `/api/*` | 受 API 密钥保护 | | 可疑的 `/api/*` payload | 在网关层被拦截 | ### 2. Flask API 服务 Flask API 提供: * 健康检查 endpoint * 回显 endpoint * 请求元数据可见性 * 风险评分集成 * JSON 响应输出 主要测试 endpoint: ``` /api/echo ``` ### 3. 风险评分引擎 风险引擎使用透明的基于规则的逻辑来评估 API 请求。 它考虑的因素包括: * HTTP 方法 * 查询字符串 * 请求体 * 认证上下文 * 可疑关键字 * OWASP 风格的类别映射 风险响应示例: ``` { "risk": { "risk_level": "LOW", "risk_score": 5, "reasons": [ "Normal GET request baseline risk", "Authenticated request context present" ], "owasp_categories": [] } } ``` ### 4. 主动拦截逻辑 网关会在可疑请求特征到达后端 API 之前将其拦截。 | 模式 | 检测含义 | | ------------- | -------------------------------- | | `UNION` | SQL 注入关键字 | | `