HarborGuard数据架构解析:Prisma模型如何组织多扫描器原始结果与归一化漏洞发现(完全指南)

发布时间:2026/8/22 14:17:20
HarborGuard数据架构解析:Prisma模型如何组织多扫描器原始结果与归一化漏洞发现(完全指南) HarborGuard数据架构解析Prisma模型如何组织多扫描器原始结果与归一化漏洞发现完全指南【免费下载链接】HarborGuardModern image vulnerability scanning patching platform with multi-tool integration.项目地址: https://gitcode.com/gh_mirrors/ha/HarborGuardHarborGuard 是一个现代化的容器镜像漏洞扫描与自动修补平台同时集成 Trivy、Grype、Syft、Dockle、Dive、OSV 等多个扫描引擎。面对每个引擎输出格式各异的扫描结果HarborGuard 用一套清晰的 Prisma 数据模型完成了原始结果 归一化发现的双层组织。本文带你逐层读懂这套镜像漏洞扫描平台的数据架构设计帮助你理解多扫描器结果是如何被存储、对齐并最终驱动整个平台的界面与决策的。为什么多扫描器结果难存每个扫描工具都有一套自己的输出方言Trivy / Grype / OSV漏洞数据但字段命名、严重级别口径各不相同Syft输出的是 SBOM软件物料清单根本没有漏洞概念Dockle合规检查项带规则 ID 和告警明细Dive镜像层效率分析关注浪费字节数。如果只存一份原始 JSON前端就要为每个引擎写一套解析逻辑查询和统计几乎无从下手。HarborGuard 的答案是原始结果原样保留同时抽取一份统一结构的归一化发现。全部模型定义集中在prisma/schema.prisma中数据库使用 PostgreSQL。数据架构全景一条主线 两层结果整条数据流可以用一条主线串联起来Image镜像 → Scan一次扫描 → 原始结果各扫描器专属表 → 归一化发现统一结构表核心骨架Image、Scan、ScanMetadata模型角色关键点Image被扫描的镜像用digest做唯一约束同一个镜像不同 tag 也能区分Scan一次扫描任务记录状态PENDING/RUNNING/SUCCESS/PARTIAL等、开始/结束时间、风险评分ScanMetadata扫描的摘要页冗余存储漏洞等级计数vulnerabilityCritical/High/Medium/Low、Dockle 合规评分与等级用于仪表盘快速统计Scan与ScanMetadata是一对一关系而ScanMetadata又通过scanMetadataId外键挂接上所有扫描器的专属结果表——这就是两层结构的分叉点。第一层每个扫描器都有自己的专属表在prisma/migrations/20250907001549_add_scan_result_tables/migration.sql中HarborGuard 为每个引擎建了结果总表 明细表扫描器结果模型明细模型存什么TrivyTrivyResultsTrivyVulnerability/TrivyMisconfiguration/TrivySecret漏洞、配置错误、密钥泄露三类发现GrypeGrypeResultsGrypeVulnerability漏洞匹配、修复状态、CVSS v2/v3 分数OSVOsvResultsOsvVulnerabilityOSV 编号、受影响版本区间、撤回信息SyftSyftResultsSyftPackageSBOM 软件包清单purl、许可证、位置DockleDockleResultsDockleViolation合规规则违例与告警明细DiveDiveResultsDiveLayer每层的浪费字节、重复文件、低效命令这套设计的妙处在于每个扫描器的数据以自己的语言完整落地不丢任何原始字段同时每张总表通过scanMetadataId唯一约束与一次扫描绑定删除扫描记录时通过onDelete: Cascade级联清理不留脏数据。此外还有一张通用的ScanResult表按scannerId记录每个扫描器的执行状态成功/失败/部分成功和原始 JSON 输出——即使某个引擎挂了其他引擎的结果依然可用扫描状态会标记为PARTIAL。第二层归一化发现表——跨引擎的统一普通话prisma/migrations/20250905144458_add_normalized_scanner_findings/migration.sql引入了四张以Scan为锚点的统一发现表ScanVulnerabilityFinding把所有来源的漏洞统一成cveId packageName severity cvssScore fixedVersion的标准结构source字段标记来自哪个引擎rawFinding保留原始 JSON 备查ScanPackageFinding统一各引擎的 SBOM 软件包信息purl、许可证、生态、语言ScanComplianceFinding统一 Dockle 与 Trivy 配置项的合规规则规则 ID、类别、修复建议ScanEfficiencyFinding统一 Dive 的镜像层效率问题浪费字节、低效层命令。还有一个聪明的细节ScanFindingCorrelation这张关联表用来做跨引擎交叉验证同一个correlationKey被多少个不同来源同时命中sourceCount置信度confidenceScore就越高。也就是说当 Trivy 和 Grype 都报告同一个 CVE 时系统会知道这是一条高置信度发现而不是简单重复计数。归一化数据如何驱动整个平台前端几乎不直接解析原始 JSON而是消费归一化层的数据仪表盘首页风险评分、严重等级散点图直接读取ScanMetadata中冗余好的漏洞计数与合规评分一次查询即可出图扫描详情页的漏洞 / 软件包 / 合规 / 效率四个 Tab分别对应四张Scan*Finding表切换引擎只是切换source过滤条件全局漏洞库Vulnerabilities 页面把发现进一步上卷为独立的Vulnerability按cveId唯一与ImageVulnerability关系表支持跨镜像统计哪些镜像命中了同一个 CVE并记录误报分类CveClassification和修补状态PatchStatus衔接后续的自动修补流程PatchOperation→PatchResult→PatchedImage。值得借鉴的性能与工程细节 索引设计务实Scan表针对高频查询建了[imageId, status]、[status, startedAt]等复合索引ScanVulnerabilityFinding建了[scanId, cveId, source]防重复与快速检索索引后续还有专门的漏洞索引迁移20251004191157_add_vulnerability_indexesJSONB 兜底无法结构化的部分CVSS 向量、引用链接、原始发现统一放 JSONB灵活又不牺牲主查询性能BigInt存字节数镜像体积用sizeBytesBigInt存储曾有专门迁移修复了整数溢出问题20250916210221_fix_integer_overflow_image_size级联删除保数据卫生所有明细表外键均带onDelete: Cascade删除一次扫描即可清掉全部关联数据。小结HarborGuard 的数据架构可以浓缩成三句话原始结果各存各家——每个扫描器有专属模型字段完整不丢失归一化发现统一口径——四张Scan*Finding表把异构输出翻译成统一结构source保留来源rawFinding保留原文冗余摘要 交叉关联——ScanMetadata让统计快ScanFindingCorrelation让结论可信。这套双写模式让容器镜像漏洞扫描平台在接入新扫描器时只需新增专属表 一个归一化映射即可无缝融入现有界面与统计体系是值得多工具集成类项目参考的设计范本。【免费下载链接】HarborGuardModern image vulnerability scanning patching platform with multi-tool integration.项目地址: https://gitcode.com/gh_mirrors/ha/HarborGuard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考