【开源治理·银行篇】04-组件准入与分类分级:白名单和推荐技术栈怎么建?
系列「金融开源治理实战」第一季 · 银行业

以下场景根据多个银行项目中的共性问题脱敏合并,不对应任何单一机构。
某银行完成第一轮开源组件盘点后,很快整理出一张几千行的组件清单。
为了尽快形成准入基线,项目组把已经在生产系统中出现、扫描没有命中禁止规则的组件先标记为“允许使用”,整张存量清单也就被当成了“白名单”。
几个月后,一个新项目准备选择 JSON 处理组件,研发团队在这张清单里找到了多个功能相近的选项,版本跨度超过五年。安全团队说:“这些组件当前都没有命中红线。”架构团队说:“技术栈基线只规定了 Java 版本,没有规定具体组件。”运维团队则提醒:“其中两个组件没有统一升级方案,出了问题只能由项目自己处理。”
研发最终选择了自己最熟悉的一个版本。它确实被标记为“允许使用”,却不是银行真正愿意长期维护的选择。
这张被当成白名单使用的存量清单没有撒谎,但也没有完成准入决策。它回答的是“过去用过什么”,没有回答:
- 新项目应该优先选什么?
- 什么只能在特定系统、特定版本和特定期限内使用?
- 什么虽然暂时没有高危漏洞,却不适合成为银行长期技术依赖?
- 同一个组件进入核心系统和内部辅助工具,是否应该采用相同门槛?
如果这些选择没有提前形成稳定规则,流水线就只能反复拦截,每个项目也都要重新争论。准入治理应当把判断往前移:哪些推荐,哪些允许,哪些需要审批、限制或禁止。
责任明确以后,还缺一套共同的判断依据
上一篇建立了银行级开源治理的组织、制度、流程、平台和运营体系,也明确了一个重要边界:专业团队负责说明风险,系统责任人负责在授权范围内作出使用决定,重大例外再升级。
JR/T 0291-2024 将开源软件评估放入引入、维护和退出等生命周期节点[1]。这意味着,银行不仅要明确谁有权作出决定,还要为不同生命周期阶段准备稳定的判断依据。
上一篇把决策权落到了具体角色,本篇继续处理这些角色作出决定时共同使用的依据。
但要让这套责任体系高效运行,不能让每一个项目都从零开始评估每一个组件。否则,治理委员会和专业团队很快又会被日常申请淹没。
组件准入的作用,就是把反复出现的专业判断沉淀为可复用策略:
一次完整评估
→ 形成组件状态和适用条件
→ 相同条件下重复使用
→ 条件变化时重新评估
落实到银行内部,准入不应是一次性的“通过/不通过”,而应是一个持续变化、能够被复审和撤销的治理状态。
白名单、准入清单和推荐技术栈不是一回事
很多项目把这三个概念混在一起,结果白名单越做越大,研发却仍然不知道该选什么。
| 名称 | 回答的问题 | 典型内容 | 使用方式 |
|---|---|---|---|
| 存量清单 | 现在和过去使用了什么 | 组件、版本、制品、系统、来源 | 用于盘点、追踪和风险处置 |
| 准入清单 | 在什么条件下允许使用 | 状态、版本范围、适用系统、限制条件、有效期 | 用于审批、入库和自动门禁 |
| 推荐技术栈 | 新项目应该优先选择什么 | 银行愿意集中维护的框架、组件和版本基线 | 用于架构设计、项目立项和研发选型 |
三者之间存在包含关系,但不能互相替代:
- 存量系统正在使用,不代表新项目仍然允许引入。
- 允许使用,不代表银行愿意把它作为首选技术路线。
- 被推荐,也不代表任何版本、任何来源、任何系统都可以无条件使用。
因此,白名单不能只是组件名称列表。一条真正可执行的准入记录,至少要精确到生态、组件、版本范围、可信来源、适用范围和复审条件。

第一步:用五个维度评估组件,而不是只看漏洞
组件评估至少要同时覆盖安全、License、生态健康度、架构适配和运维保障五个维度。
| 评估维度 | 需要回答的问题 | 主要责任角色 | 典型证据 |
|---|---|---|---|
| 安全 | 是否存在已知漏洞?是否真实可利用?项目是否有安全响应机制?发布过程是否可信? | 安全 | SCA 报告、漏洞分析、SECURITY 文件、发布与签名信息 |
| License | 许可证是什么?与依赖许可证是否兼容?在本行具体使用和交付场景下有什么义务? | 法务/合规 | 许可证文本、依赖清单、使用场景说明、专业意见 |
| 生态健康度 | 是否仍在维护?版本和问题响应是否稳定?是否过度依赖少数维护者?是否存在明确替代方向? | 架构 | 发布记录、提交与问题活动、维护者和社区治理信息 |
| 架构适配 | 是否符合技术栈、性能、兼容性和部署要求?是否与已有组件重复? | 架构、研发 | PoC、性能测试、兼容性验证、技术选型记录 |
| 运维保障 | 谁负责升级和故障支持?是否有监控、回滚和替代方案?商业软件内置组件由谁推动修复? | 运维、系统责任人、采购 | 运维方案、SLA、供应商承诺、退出预案 |
OpenSSF Scorecard 提供了代码审查、项目维护状态、安全策略、签名发布、已知漏洞等开源项目安全健康信号[2]。这些信号可以帮助银行进行初筛,但不能直接把一个总分转换成“允许”或“禁止”:维护频率低可能意味着项目已经稳定,也可能意味着无人维护;许可证文件存在,也不等于具体使用场景已经完成合规判断。
类似地,SPDX License List 可以用标准标识符和表达式统一许可证事实,但 SPDX 本身强调其作用是收集、表达和交换事实,并不替使用者作出许可证合规的法律解释[3]。工具识别和标准化表达解决的是“看到了什么”,准入仍要回答“在本行这个场景下意味着什么”。
实际做组件准入时,我不建议试图用一个总分代替所有决策。更稳妥的结构是“红线+评分+专业判断”:
- 红线项决定是否直接禁止,例如来源无法确认、命中本行明确禁止的许可证规则、存在不可接受且无补偿措施的重大风险。
- 评分项帮助比较同类组件,例如生态健康度、文档、兼容性、维护能力。
- 专业判断处理无法机械量化的事项,例如核心系统升级风险、许可证适用场景和供应商支持边界。
评分不必一开始就追求复杂模型,但需要说明“分数怎么来的”。例如,某银行可以把生态健康度拆成下面五项,对每项按 1—5 分评价,再根据本行关注重点设置权重:
| 生态健康度示例项 | 示例权重 | 观察重点 |
|---|---|---|
| 维护连续性 | 25% | 最近一段时间是否持续维护,项目是否归档或停止发布 |
| 安全与问题响应 | 25% | 是否有安全响应渠道,重要问题是否得到处理 |
| 发布稳定性 | 20% | 发布节奏、版本兼容和补丁机制是否可预测 |
| 维护者集中度与治理 | 15% | 是否过度依赖少数个人,权限和决策机制是否透明 |
| 文档与升级支持 | 15% | 文档、迁移说明和破坏性变更说明是否充分 |
这组权重只用于演示计算方法,不是银行通用阈值。评分主要用于同类组件之间的比较;红线可以直接否决,专业判断也不能被总分覆盖。
组件准入评估表
| 维度 | 建议检查项 | 结果 | 处理建议 |
|---|---|---|---|
| 基本身份 | 生态、组件名、版本、发布者、项目主页和源码仓库能否对应 | 通过/存疑/不通过 | 身份存疑不得进入正式准入 |
| 来源 | 是否来自官方发布渠道或本行认可的上游,制品哈希是否固定 | 通过/存疑/不通过 | 来源不可验证时禁止进入生产可信源 |
| 安全 | 已知漏洞、可利用性、安全响应和发布保护情况 | 低/中/高 | 高风险进入人工评估或限制使用 |
| License | 许可证识别、兼容性、特殊条款和使用场景 | 通过/附条件/不通过 | 附条件结果写入准入约束 |
| 生态 | 维护状态、发布节奏、问题响应、维护者集中度 | 健康/关注/衰退 | 衰退项目不得新增推荐,可进入退出评估 |
| 架构 | 技术栈、性能、兼容性、重复能力和替代方案 | 适配/附条件/不适配 | 不适配时拒绝或限定试用范围 |
| 运维 | Owner、升级能力、支持渠道、回滚和退出方案 | 充分/部分/不足 | 能力不足时限制进入重要系统 |
| 综合结论 | 建议状态、版本范围、适用系统、限制条件、复审时间 | — | 形成可机器执行的准入记录 |
第二步:把“通过”拆成五类策略
只有“白名单”和“黑名单”两个状态,会把大量需要条件判断的组件挤到同一个灰色区域。更实用的做法是设置五类使用策略:
| 策略 | 含义 | 默认处理方式 | 典型场景 |
|---|---|---|---|
| 推荐 | 经过完整评估,符合技术路线,银行具备维护能力 | 新项目优先选择;在规定版本和范围内简化审批 | 统一框架、基础组件、标准基础镜像 |
| 允许 | 风险可接受,但不作为统一技术路线推荐 | 在批准范围内可使用;新场景可能需要补充评估 | 专业领域组件、存量兼容组件 |
| 审批 | 信息、场景或支持能力不足,需要逐次判断 | 提交使用场景和系统信息,完成专业会签 | 新组件、非标准技术栈、重要系统首次使用 |
| 限制 | 仅在指定系统、版本、期限或补偿措施下使用 | 禁止新增扩散;到期必须复审 | 暂时无法替换的高风险存量组件 |
| 禁止 | 风险超出本行可接受范围,或制度明确不允许例外 | 阻止新引入和新发布,启动替换或退出 | 来源不明、恶意组件、明确红线 License、不可接受风险 |
这五类策略不是风险等级的简单同义词。例如,一个社区健康度一般但业务不可替代的组件,可能被“限制使用”;一个风险很低但与本行技术路线重复的组件,也可能只被“允许”,而不进入推荐技术栈。
准入策略同时服务三个目标:
- 降低风险: 明确禁止和限制边界。
- 减少重复判断: 推荐和允许组件在相同条件下复用评估结果。
- 收敛技术栈: 让新项目优先使用银行有能力长期维护的少数组件。

第三步:组件风险和系统重要性共同决定管控强度
同一个组件用于内部报表工具和核心支付系统,不能只因为组件评估结果相同,就采用完全相同的控制方式。
进入分类分级矩阵之前,组件应先通过红线检查。来源无法确认、恶意组件、命中本行明确禁止且不允许例外的规则,直接进入禁止处理,不因为系统重要性较低而放宽。只有未命中红线的组件,才进入下面的双轴矩阵。
建议把组件属性与使用场景拆成两个轴:
组件侧需要考虑
- 是否位于基础框架、身份认证、加密、网络通信或数据访问等关键位置。
- 是否具有高权限、广泛依赖和较大故障影响面。
- 社区维护、漏洞历史、许可证和替代方案是否稳定。
- 银行是否具备自主维护能力或可靠商业支持。
系统侧需要考虑
- 是否属于核心、重要或一般信息系统。
- 是否面向互联网、处理敏感数据或直接影响客户交易。
- 是否具备灰度、回滚、隔离和补偿控制能力。
- 变更失败是否会影响业务连续性或重要服务。
分类分级矩阵
| 组件风险/系统重要性 | 一般内部系统 | 重要业务系统 | 核心或高暴露系统 |
|---|---|---|---|
| 低风险、成熟组件 | 推荐或允许;按标准流程复用 | 允许;核验版本和来源 | 允许或审批;补充稳定性和回滚验证 |
| 中风险或支持一般 | 允许或审批 | 审批;明确 Owner 和补偿措施 | 限制;需更高层级授权和短周期复审 |
| 高风险、停止维护或支持能力不足 | 限制或禁止 | 原则上禁止新增;存量制定退出计划 | 禁止;确需存量维持时按重大例外处理 |
矩阵的作用不是自动替银行作出全部决定,而是统一默认处理方式。专业团队可以在证据充分时调整结论,但必须记录调整依据、责任人和有效期。
核心或高暴露系统即使选用了低风险成熟组件,也可能需要额外审批或验证。原因不在于组件风险被重新判高,而在于这类系统对兼容性、稳定性、回滚条件和业务连续性的要求更严格。

第四步:把组件状态做成生命周期,而不是静态名单
组件的漏洞、许可证、社区和支持状态都会变化。今天被推荐的组件,明天可能停止维护;今天只能试用的组件,经过验证后可能进入正式准入。
建议区分“生命周期阶段”和“使用策略”:
- 生命周期阶段描述组件当前走到哪个治理阶段。
- 使用策略描述当前允许如何使用。
建议状态流转

这是一张允许的阶段关系图,不表示所有组件必须机械经过每一个节点。已有充分评估证据的成熟组件可以从待评估直接进入有效;不适合生产使用的试用组件也可以直接结束试用。任何跳转都应满足目标阶段的进入条件并留下评估记录。
| 阶段 | 进入条件 | 允许动作 | 退出或复审触发器 |
|---|---|---|---|
| 待评估 | 提交基本身份和使用需求 | 仅开展资料分析 | 信息补齐后进入试用中或直接形成有效记录 |
| 试用中 | 完成初筛,限定非生产或隔离环境 | PoC、性能和兼容性验证 | 验证完成、期限到期或发现红线 |
| 有效 | 完成规定评估并明确使用策略和适用条件 | 按推荐、允许、审批、限制或禁止策略执行 | 新版本、场景变化、重大漏洞、许可证或生态变化 |
| 观察中 | 由版本、风险、合规、生态四类变化或定期复审发现异常,需要重新判断 | 按现有策略维持或暂停新增 | 完成复评后恢复有效,或进入退出中 |
| 退出中 | 已决定不再新增,存量需要迁移 | 仅存量维护、替换和验证 | 迁移完成或最终期限到期 |
| 已停用 | 存量已退出,或命中不允许例外的红线 | 不得新增、构建或发布 | 原则上不恢复;误报复核除外 |
这样命名后,“推荐、限制、禁止”只表示使用策略,“有效、观察中、退出中、已停用”只表示治理阶段,平台不会在两个字段中读到同一组状态名称。
第五步:把白名单做成平台可执行的策略记录
一条只写着“允许使用 Log4j”的白名单记录无法直接执行,因为它没有回答版本、来源、系统和期限。
最小组件策略记录
| 字段 | 示例含义 |
|---|---|
| 生态与坐标 | Maven/npm/PyPI/OCI,以及唯一组件坐标 |
| 允许版本 | 精确版本或经过批准的版本范围 |
| 制品身份 | 哈希、镜像摘要或其他不可变标识 |
| 可信来源 | 允许从哪个内部源站或上游渠道获取 |
| 使用策略 | 推荐、允许、审批、限制或禁止 |
| 生命周期阶段 | 待评估、试用中、有效、观察中、退出中或已停用 |
| 适用范围 | 哪类系统、环境、业务场景可以使用 |
| 限制条件 | 补偿措施、禁止功能、部署边界、升级要求 |
| 策略 Owner | 负责组件评估、策略更新和复审的组件策略维护人 |
| 依据 | 安全、License、架构、运维等评估记录 |
| 有效期 | 何时失效或必须重新评估 |
| 变更触发器 | 新版本、漏洞、许可证变化、停止维护、使用场景变化 |
其中,组件名和版本号仍不足以唯一标识实际制品。对容器镜像、二进制包和可重新发布的制品,还应固定摘要或哈希,避免同名同版本内容变化。
一条组件策略记录通常会被多个系统复用,因此不应把所有实际系统责任人都塞进一个 Owner 字段。平台还需要建立与之关联的系统使用记录:
最小系统使用记录
| 字段 | 示例含义 |
|---|---|
| 系统与环境 | 哪个系统在开发、测试或生产环境使用 |
| 组件与制品 | 实际使用的组件、版本、哈希或镜像摘要 |
| 使用场景 | 内部使用、对外分发、网络服务或商业软件内置 |
| 系统责任人 | 对本系统的使用、整改和退出决定负责 |
| 例外与补偿措施 | 与通用策略不同的授权结论、控制措施和有效期 |
| 使用证据 | 申请、审批、构建、发布和最终 SBOM 记录 |

这些记录最终需要进入平台规则,但规则的所有者仍然是银行:架构维护推荐技术栈,安全维护安全门槛,法务维护许可证策略,科技管理负责流程和版本控制。工具厂商可以实现规则,不能替银行定义风险偏好。
白名单如何更新:四类触发器、一个失效机制
白名单最危险的状态不是“没有”,而是看起来存在、实际上已经过期。
建议同时设置四类更新触发器:
- 版本触发: 主版本变化、关键依赖变化或构建方式变化。
- 风险触发: 重大漏洞、恶意包、供应链事件或安全策略变化。
- 合规触发: 许可证变化、权利声明变化或使用场景变化。
- 生态触发: 停止维护、项目归档、维护权转移或替代项目成熟。
此外,每条“审批”和“限制”策略必须有明确有效期。到期后不是继续默认放行,而应进入三种结果之一:
- 完成复审,延长并更新条件。
- 完成整改,转为准入或推荐。
- 未完成复审,自动降级为阻断新增,并升级责任人处理。
例外不是永久白名单
例外记录至少应包含:
- 适用的系统、组件和精确版本。
- 业务必要性和无法采用推荐方案的原因。
- 已识别风险与补偿措施。
- 整改或替换责任人。
- 生效时间、到期时间和复审条件。
- 超期后的自动处理方式。
如果一条例外被不同项目反复申请,应回到策略层重新判断:它究竟应该被正式准入,还是应该被统一禁止,而不是让每个项目重复走形式化审批。
三种会让准入失真的做法
坑一:把扫描无风险当成准入通过
某个组件完成 SCA 扫描后,没有发现高危漏洞,许可证也被工具识别为常见许可证,于是项目直接将其标为“允许”。半年后,系统准备对外交付时,法务才发现实际交付包中还包含其他依赖和特殊条款,需要结合分发方式重新判断;运维团队也没有为该组件建立统一升级和替代方案。
扫描结果并没有错。它只是回答了当前知识库下识别到了哪些组件、漏洞和许可证文本,不能证明来源可信、社区可持续、架构适配,也不能替法务判断具体使用场景下的权利义务。
扫描应当作为安全和 License 事实输入,再由架构、法务、运维和系统责任人完成各自判断。工具“未发现问题”只能让流程继续,不能直接生成准入结论。
坑二:白名单只写组件名,不写条件
同一个组件的不同版本可能具有完全不同的漏洞和兼容性状态;同名同版本的制品也可能来自不同上游,甚至对应不同内容。一个组件可以在内部辅助系统中使用,也不代表它可以直接进入面向互联网的核心系统。
白名单记录必须包含版本、不可变标识、来源、适用范围、限制条件、Owner 和复审触发器。平台放行时比对的是这组条件,不是一个组件名称。
坑三:推荐技术栈只进不出
每个项目都希望把自己使用的组件加入推荐列表,却很少有人主动申请移除。几年以后,同类组件可能各有三四个“推荐选项”,架构团队无法集中维护,安全团队要维护多套规则,供应商和研发团队也无法形成稳定的升级能力。
推荐必须对应集中维护能力;每个推荐组件都要有 Owner、版本基线、替代关系和退出路线。新增一个推荐组件时,评审人应当追问:它替代什么,由谁维护,什么情况下开始退出。
把那张几千行的清单拆开
开篇那家银行不需要先删除所有存量记录,而应该把一张名单拆成三个层次:
- 保留完整存量清单,继续回答“现在用了什么”。
- 从存量中建立带条件的准入清单,回答“在什么条件下可以继续用”。
- 从准入组件中选择少量银行愿意集中维护的组件,形成推荐技术栈,回答“新项目应该优先选什么”。
当研发再次询问 JSON 组件怎么选时,系统不再返回几百条“都没有命中红线”的记录,而是给出:
- 首选的推荐组件和版本基线。
- 可选但需要说明理由的允许组件。
- 仅限存量系统使用的限制组件。
- 不得新增的废弃或禁用组件。
准入治理提供的效率,就体现在大多数常规选择不再需要重新争论,而不是每个项目又多填一张审批表。
规则落地还差一个受控入口
准入清单和推荐技术栈建立以后,还有一个更现实的问题:研发机器和构建流水线是否只能获取这些已经准入的制品?
如果 Maven、npm、PyPI 和公共镜像仓库仍然可以被项目直接访问,白名单就只是一份参考文件。项目可以绕过内部审批下载同名不同内容的制品,也可能因为上游删除、替换或网络波动导致构建不可重复。
同样,组件进入“观察中”后,暂停新增、限定版本或进入复评的要求不能只停留在台账里。策略变化需要及时传递到组件获取入口和构建规则,否则生命周期状态发生了变化,项目仍然可以按原路径继续下载和使用。
第 05 篇将继续到获取环节:银行内部可信开源源站应该如何建设,以及准入结果怎样和组件的实际下载路径绑定。
数据来源
- 中国人民银行,JR/T 0291-2024《金融业开源软件应用评估规范》,2024。https://std.samr.gov.cn/hb/search/stdHBDetailedCNF?id=0FD7E9C4C5036738E06397BE0A0A217C
- Open Source Security Foundation, OpenSSF Scorecard — Check Documentation. https://github.com/ossf/scorecard/blob/main/docs/checks.md
- SPDX Project, SPDX Overview and License List. https://spdx.dev/about/overview/ ; https://spdx.dev/learn/overview/

642

被折叠的 条评论
为什么被折叠?



