ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

huskyCI系统架构深度剖析:API、CLI、Client三角色如何协同编排安全扫描

huskyCI系统架构深度剖析:API、CLI、Client三角色如何协同编排安全扫描 huskyCI系统架构深度剖析API、CLI、Client三角色如何协同编排安全扫描【免费下载链接】huskyCIPerforming security tests inside your CI项目地址: https://gitcode.com/gh_mirrors/hu/huskyCIhuskyCI 是一款开源的 CI 安全扫描编排工具能够在持续集成流水线中自动执行 Bandit、Gitleaks、Gosec 等十余种静态安全分析并将所有漏洞结果集中存入数据库便于统一查看与度量。本文将带你快速看懂它 API、CLI、Client 三个核心组件的分工与协作方式即使你是第一次接触这个项目也能建立完整的架构认知。 huskyCI 是什么把安全扫描搬进 CI传统做法是在部署前手动跑一遍代码审计但漏洞往往发现晚、修复成本高。huskyCI 的思路是让安全扫描成为 CI 流水线中的一个标准阶段每次提交代码后自动拉取仓库、识别语言、并行执行对应的安全工具最后输出带有严重级别、置信度、文件、行号等完整信息的漏洞报告。核心能力包括多语言静态分析Python、JavaScript、Golang、Ruby、Java、HCL、C# 全覆盖敏感信息审计通过 Gitleaks 检测 AWS 密钥、SSH 私钥等泄漏风险结果集中化所有分析结果写入 MongoDB支持按指标查询统计 整体架构三角色各管一段从上面的架构图可以清晰看到三块拼图它们通过 HTTP Token 通信形成请求—编排—执行—回传的闭环组件目录一句话定位APIapi/扫描任务的调度中枢负责接收请求、编排容器、落库结果Clientclient/嵌入 CI 流水线的发起器负责提交分析并轮询结果CLIcli/开发者本地命令行工具用于手动触发扫描与管理目标仓库API 背后连接 MongoDB存数据与 Docker API / Kubernetes跑扫描是整个系统的大脑。API安全扫描任务的调度中枢API 用 Go 语言 Echo 框架实现启动与路由注册都在 api/server.go 中完成对外暴露的核心路由包括POST /analysis接收仓库地址与分支创建分析任务GET /analysis/:id按 RID 查询分析状态与结果GET /stats/:metric_type查询安全统计指标POST /api/1.0/token生成访问令牌受 Basic Auth 保护请求进入后的 Token 校验、恶意输入清洗、并发分析检查都写在 api/routes/analysis.go校验通过后立即异步启动分析真正的编排主流程在 api/analysis/analysis.go 的StartAnalysis先在 MongoDB 注册一条 running 状态的分析记录再用 enry 做语言识别最后并行触发所有扫描。Client嵌入 CI 流水线的扫描发起器Client 是 CI 里真正被调用的客户端核心逻辑集中在 client/analysis/analysis.go流程非常线性StartAnalysis携带Husky-Token向 API 的/analysis发起 POST拿到全局唯一的 RIDMonitorAnalysis每 60 秒轮询一次状态最长等待 60 分钟PrintResults分析结束后以人类可读文本或 JSON 两种形式输出漏洞明细对 CI 来说只需把 Client 封装成一个 Job就能获得命中阻塞级漏洞即流水线失败的门禁能力。CLI开发者本地的手动扫描入口CLI 基于 Cobra 构建子命令定义在cli/cmd/目录下run、login、targetAdd、targetList、targetSet等。执行husky run path时cli/analysis/analysis.go 会依次完成路径校验与语言识别 → 压缩代码包 → 发送分析请求 → 轮询状态 → 打印漏洞 → 清理临时文件。这让开发者不依赖 CI也能在本地获得快速的安全反馈。 一次安全扫描的完整生命周期把三个角色的代码串起来一次完整扫描会经历四个阶段① 发起请求Client 把仓库 URL 分支发给 API。API 依次校验 Token 合法性、清洗恶意输入、确认该分支没有正在运行的分析随后返回 201 和 RID见api/routes/analysis.go的ReceiveRequest。② 语言识别与并行编排api/securitytest/run.go中的Start方法用两个 goroutine 分别拉起通用扫描Gitleaks、GitAuthors和语言扫描按 enry 识别结果匹配 Bandit、Gosec 等互不阻塞显著缩短总耗时。③ 容器化执行每个扫描工具都有独立的 Docker 镜像Dockerfile 分别存放在deployments/dockerfiles/下的bandit/、gitleaks/、gosec/等子目录中。api/dockers/huskydocker.go的DockerRun负责拉取镜像、创建容器、等待结束、读取输出并销毁容器保证每次扫描环境干净隔离。④ 结果聚合与回传扫描输出被解析成高/中/低危漏洞按语言归类后写入 MongoDBsetVulns方法API 状态置为 finished。Client 轮询到结果后打印报告CI 根据是否命中阻塞级漏洞决定流水线成败。️ 内置安全扫描工具速查表语言 / 场景扫描工具PythonBandit静态分析、Safety依赖漏洞RubyBrakemanJavaScriptNpm Audit、Yarn AuditGolangGosecJavaSpotBugs FindSecBugsHCLTerraformTFSecC#SecurityCodeScan通用Gitleaks密钥泄漏、Enry语言识别、GitAuthors提交人追踪每种工具的分析器实现都在api/securitytest/目录下如bandit.go、gitleaks.go、gosec.go统一由securitytest.go的securityTestAnalyze映射表分发新增工具只需加一个分析函数和一个 Docker 镜像。️ 核心源码文件导览想进一步深入按这个顺序读代码效率最高api/server.goAPI 启动与路由注册api/routes/analysis.go请求校验与任务创建api/analysis/analysis.go分析主流程api/securitytest/run.go并行扫描编排api/securitytest/securitytest.go单次扫描执行Docker / K8s 双后端api/dockers/huskydocker.go容器生命周期管理client/analysis/analysis.goCI 侧发起与轮询cli/cmd/run.go本地命令行入口deployments/docker-compose.yml本地部署编排 快速上手Docker Compose 一键部署项目提供了开箱即用的 deployments/docker-compose.yml一条命令即可拉起 API、MongoDB 与 Docker-in-Docker 三件套无需手动搭建环境。各服务通过HUSKYCI_*环境变量完成配置是本地体验完整扫描流程的最佳起点。✨ 小结这套架构为什么值得参考huskyCI 用API 编排 Client 触发 CLI 补位的三角色设计把十余种安全工具统一纳管对 CI接入成本极低一个 Job 即可完成全量安全扫描对开发者CLI 提供本地即时反馈不用等流水线排队对团队MongoDB 集中沉淀数据支撑趋势分析与安全度量如果你想在自己的项目里实现类似的安全流水线编排huskyCI 这套调度与执行分离 容器隔离 异步轮询的组合是一个非常清晰、可落地的参考样板。【免费下载链接】huskyCIPerforming security tests inside your CI项目地址: https://gitcode.com/gh_mirrors/hu/huskyCI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表