jasimalnajjar/secure-api

GitHub: jasimalnajjar/secure-api

一个基于 FastAPI 的安全扫描 API,附带完整 CI/CD 流水线,自动化完成 SSL、标头与端口检查并部署至 AWS。

Stars: 0 | Forks: 0

# 🔒 SecureAPI — 完整 CI/CD 流水线安全扫描器 一个基于 Python 的安全扫描器 API,用于检查网站的 SSL 证书问题、缺失的安全标头和开放端口 — 通过 GitHub Actions、Docker 和 Terraform 自动部署到 AWS。 ![Python](https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white) ![FastAPI](https://img.shields.io/badge/FastAPI-latest-009688?logo=fastapi&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-Hub-2496ED?logo=docker&logoColor=white) ![Terraform](https://img.shields.io/badge/Terraform-IaC-7B42BC?logo=terraform&logoColor=white) ![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-CI%2FCD-2088FF?logo=github-actions&logoColor=white) ![AWS](https://img.shields.io/badge/AWS-EC2-FF9900?logo=amazon-aws&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green) ## 概述 SecureAPI 是一个轻量级 REST API,对任意网站执行三项关键安全检查:SSL 证书验证、安全标头分析和端口扫描。该项目的重点是展示生产级别的 CI/CD 流水线 — 每次推送到 `main` 分支都会触发自动化的代码检查、安全扫描、测试、Docker 镜像构建以及 AWS 部署。 ## CI/CD 流水线 每次推送到 `main` 分支会触发以下自动化流程: ``` Push to main │ ├── Lint & Style Check (flake8) │ ├── Security Scan (Bandit) │ └── Run Tests (pytest) │ └── Build & Push Docker Image (Docker Hub) │ └── Deploy to AWS (Terraform → EC2) ``` | 阶段 | 工具 | 目的 | |------|------|------| | Lint | flake8 | 捕获代码风格问题和常见 Python 错误 | | 安全 | Bandit | 扫描源代码中的安全漏洞 | | 测试 | pytest | 运行单元测试与集成测试 | | 构建 | Docker | 容器化应用程序 | | 推送 | Docker Hub | 存储版本化容器镜像 | | 部署 | Terraform | 配置并管理 AWS 基础设施 | ## 安全扫描器功能 ### SSL 证书检查 连接到网站的 443 端口并验证 SSL/TLS 证书。报告证书颁发者、过期日期、距过期的天数,并标记在 30 天内即将过期的证书。 ### 安全标头分析 检查 HTTP 响应标头是否符合七项推荐的安全标头(Strict-Transport-Security、Content-Security-Policy、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy、Permissions-Policy)。返回 100 分制评分以及每个标头的详细信息。 ### 端口扫描 对 11 个常见端口(FTP、SSH、SMTP、DNS、HTTP、HTTPS、MySQL、RDP、PostgreSQL、HTTP 代理、HTTPS 备用)执行 TCP 连接扫描。报告哪些端口开放及其对应服务。 ## 技术栈 | 层级 | 技术 | |------|------| | API 框架 | FastAPI + Uvicorn | | 编程语言 | Python 3.10+ | | 测试 | pytest, httpx | | 代码检查 | flake8 | | 安全扫描 | Bandit | | 容器化 | Docker | | 镜像仓库 | Docker Hub | | CI/CD | GitHub Actions | | 基础设施 | Terraform | | 云平台 | AWS EC2(免费层) | | 状态存储 | AWS S3(Terraform 状态) | ## API 端点 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/` | 健康检查 | | GET | `/scan?url={url}` | 完整安全扫描(SSL + 标头 + 端口) | | GET | `/scan/ssl?url={url}` | 仅 SSL 证书检查 | | GET | `/scan/headers?url={url}` | 仅安全标头检查 | | GET | `/scan/ports?url={url}` | 仅端口扫描 | ### 示例请求 ``` curl "http://localhost:8000/scan?url=google.com" ``` ### 示例响应 ``` { "target": "google.com", "hostname": "google.com", "scanned_at": "2026-04-12T10:30:00", "ssl_certificate": { "valid": true, "issuer": {"organizationName": "Google Trust Services"}, "expires": "Jul 14 08:26:23 2026 GMT", "days_until_expiry": 93, "warning": false }, "security_headers": { "score": 43, "summary": "3/7 security headers present", "headers": { "..." } }, "open_ports": { "total_scanned": 11, "total_open": 2, "open_ports": [ {"port": 80, "service": "HTTP", "status": "open"}, {"port": 443, "service": "HTTPS", "status": "open"} ] } } ``` ## 快速开始 ### 先决条件 - Python 3.10+ - Docker(可选,用于容器化运行) ### 本地开发 ``` git clone https://github.com/jasimalnajjar/secure-api.git cd secure-api python3 -m venv venv source venv/bin/activate pip install -r requirements.txt uvicorn app.main:app --reload ``` 访问 `http://localhost:8000/docs` 获取交互式 API 文档。 ### 使用 Docker 运行 ``` docker build -t secure-api . docker run -p 8000:8000 secure-api ``` ### 运行测试 ``` pytest app/tests/ -v ``` ## 基础设施 ### Terraform 资源 `terraform/` 目录定义以下 AWS 资源: - **EC2 实例**(t3.micro,免费层)— 运行 Docker 容器 - **安全组** — 允许 22(SSH)和 8000(API)端口入站访问 - **S3 后端** — 存储 Terraform 状态以确保部署一致性 ### 手动部署 ``` cd terraform terraform init terraform plan terraform apply ``` ### 拆除 ``` cd terraform terraform destroy ``` ## 项目结构 ``` secure-api/ ├── .github/ │ └── workflows/ │ └── ci.yml # CI/CD pipeline definition ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI application │ ├── services/ │ │ ├── __init__.py │ │ └── scanner.py # SSL, headers, and port scanner │ └── tests/ │ ├── __init__.py │ ├── test_api.py # API endpoint tests │ └── test_scanner.py # Scanner function tests ├── terraform/ │ ├── main.tf # EC2 instance and security group │ ├── variables.tf # Configurable parameters │ └── outputs.tf # Server IP and API URL outputs ├── Dockerfile # Container definition ├── requirements.txt # Python dependencies ├── pytest.ini # Test configuration └── README.md ``` ## 运行流水线所需的 GitHub Actions 密钥 要在仓库中启用完整流水线,请在 **Settings → Secrets → Actions** 添加以下密钥: | 密钥 | 说明 | |------|------| | `DOCKERHUB_USERNAME` | Docker Hub 用户名 | | `DOCKERHUB_TOKEN` | Docker Hub 密码或访问令牌 | | `AWS_ACCESS_KEY_ID` | AWS IAM 访问密钥 | | `AWS_SECRET_ACCESS_KEY` | AWS IAM 秘密密钥 | ## 后续改进计划 - [ ] 集成 OWASP ZAP 进行动态应用安全测试 - [ ] 子域名枚举扫描器 - [ ] DNS 记录分析 - [ ] 历史扫描结果与趋势追踪 - [ ] 速率限制与 API 密钥认证 - [ ] 关键发现推送 Slack/Email 通知 - [ ] 多区域 Terraform 部署 - [ ] 定时扫描(Cron 作业)
标签:API, AV绕过, AWS, DNS解析, Docker, DPI, EC2, ECS, FastAPI, GitHub Actions, IaC, Python, SSL证书检查, Terraform, 代码安全扫描, 单元测试, 安全头检测, 安全扫描, 安全防御评估, 开源项目, 数据统计, 无后门, 时序注入, 测试用例, 漏洞利用检测, 特权提升, 生产环境, 端口扫描, 网络安全, 自动化部署, 自动笔记, 请求拦截, 逆向工具, 隐私保护