【开源治理·银行篇】04-组件准入与分类分级:白名单和推荐技术栈怎么建?

【开源治理·银行篇】04-组件准入与分类分级:白名单和推荐技术栈怎么建?

系列「金融开源治理实战」第一季 · 银行业

在这里插入图片描述

以下场景根据多个银行项目中的共性问题脱敏合并,不对应任何单一机构。

某银行完成第一轮开源组件盘点后,很快整理出一张几千行的组件清单。

为了尽快形成准入基线,项目组把已经在生产系统中出现、扫描没有命中禁止规则的组件先标记为“允许使用”,整张存量清单也就被当成了“白名单”。

几个月后,一个新项目准备选择 JSON 处理组件,研发团队在这张清单里找到了多个功能相近的选项,版本跨度超过五年。安全团队说:“这些组件当前都没有命中红线。”架构团队说:“技术栈基线只规定了 Java 版本,没有规定具体组件。”运维团队则提醒:“其中两个组件没有统一升级方案,出了问题只能由项目自己处理。”

研发最终选择了自己最熟悉的一个版本。它确实被标记为“允许使用”,却不是银行真正愿意长期维护的选择。

这张被当成白名单使用的存量清单没有撒谎,但也没有完成准入决策。它回答的是“过去用过什么”,没有回答:

  • 新项目应该优先选什么?
  • 什么只能在特定系统、特定版本和特定期限内使用?
  • 什么虽然暂时没有高危漏洞,却不适合成为银行长期技术依赖?
  • 同一个组件进入核心系统和内部辅助工具,是否应该采用相同门槛?

如果这些选择没有提前形成稳定规则,流水线就只能反复拦截,每个项目也都要重新争论。准入治理应当把判断往前移:哪些推荐,哪些允许,哪些需要审批、限制或禁止。


责任明确以后,还缺一套共同的判断依据

上一篇建立了银行级开源治理的组织、制度、流程、平台和运营体系,也明确了一个重要边界:专业团队负责说明风险,系统责任人负责在授权范围内作出使用决定,重大例外再升级。

JR/T 0291-2024 将开源软件评估放入引入、维护和退出等生命周期节点[1]。这意味着,银行不仅要明确谁有权作出决定,还要为不同生命周期阶段准备稳定的判断依据。

上一篇把决策权落到了具体角色,本篇继续处理这些角色作出决定时共同使用的依据。

但要让这套责任体系高效运行,不能让每一个项目都从零开始评估每一个组件。否则,治理委员会和专业团队很快又会被日常申请淹没。

组件准入的作用,就是把反复出现的专业判断沉淀为可复用策略:

一次完整评估
→ 形成组件状态和适用条件
→ 相同条件下重复使用
→ 条件变化时重新评估

落实到银行内部,准入不应是一次性的“通过/不通过”,而应是一个持续变化、能够被复审和撤销的治理状态。


白名单、准入清单和推荐技术栈不是一回事

很多项目把这三个概念混在一起,结果白名单越做越大,研发却仍然不知道该选什么。

名称回答的问题典型内容使用方式
存量清单现在和过去使用了什么组件、版本、制品、系统、来源用于盘点、追踪和风险处置
准入清单在什么条件下允许使用状态、版本范围、适用系统、限制条件、有效期用于审批、入库和自动门禁
推荐技术栈新项目应该优先选择什么银行愿意集中维护的框架、组件和版本基线用于架构设计、项目立项和研发选型

三者之间存在包含关系,但不能互相替代:

  • 存量系统正在使用,不代表新项目仍然允许引入。
  • 允许使用,不代表银行愿意把它作为首选技术路线。
  • 被推荐,也不代表任何版本、任何来源、任何系统都可以无条件使用。

因此,白名单不能只是组件名称列表。一条真正可执行的准入记录,至少要精确到生态、组件、版本范围、可信来源、适用范围和复审条件。

在这里插入图片描述


第一步:用五个维度评估组件,而不是只看漏洞

组件评估至少要同时覆盖安全、License、生态健康度、架构适配和运维保障五个维度。

评估维度需要回答的问题主要责任角色典型证据
安全是否存在已知漏洞?是否真实可利用?项目是否有安全响应机制?发布过程是否可信?安全SCA 报告、漏洞分析、SECURITY 文件、发布与签名信息
License许可证是什么?与依赖许可证是否兼容?在本行具体使用和交付场景下有什么义务?法务/合规许可证文本、依赖清单、使用场景说明、专业意见
生态健康度是否仍在维护?版本和问题响应是否稳定?是否过度依赖少数维护者?是否存在明确替代方向?架构发布记录、提交与问题活动、维护者和社区治理信息
架构适配是否符合技术栈、性能、兼容性和部署要求?是否与已有组件重复?架构、研发PoC、性能测试、兼容性验证、技术选型记录
运维保障谁负责升级和故障支持?是否有监控、回滚和替代方案?商业软件内置组件由谁推动修复?运维、系统责任人、采购运维方案、SLA、供应商承诺、退出预案

OpenSSF Scorecard 提供了代码审查、项目维护状态、安全策略、签名发布、已知漏洞等开源项目安全健康信号[2]。这些信号可以帮助银行进行初筛,但不能直接把一个总分转换成“允许”或“禁止”:维护频率低可能意味着项目已经稳定,也可能意味着无人维护;许可证文件存在,也不等于具体使用场景已经完成合规判断。

类似地,SPDX License List 可以用标准标识符和表达式统一许可证事实,但 SPDX 本身强调其作用是收集、表达和交换事实,并不替使用者作出许可证合规的法律解释[3]。工具识别和标准化表达解决的是“看到了什么”,准入仍要回答“在本行这个场景下意味着什么”。

实际做组件准入时,我不建议试图用一个总分代替所有决策。更稳妥的结构是“红线+评分+专业判断”:

  1. 红线项决定是否直接禁止,例如来源无法确认、命中本行明确禁止的许可证规则、存在不可接受且无补偿措施的重大风险。
  2. 评分项帮助比较同类组件,例如生态健康度、文档、兼容性、维护能力。
  3. 专业判断处理无法机械量化的事项,例如核心系统升级风险、许可证适用场景和供应商支持边界。

评分不必一开始就追求复杂模型,但需要说明“分数怎么来的”。例如,某银行可以把生态健康度拆成下面五项,对每项按 1—5 分评价,再根据本行关注重点设置权重:

生态健康度示例项示例权重观察重点
维护连续性25%最近一段时间是否持续维护,项目是否归档或停止发布
安全与问题响应25%是否有安全响应渠道,重要问题是否得到处理
发布稳定性20%发布节奏、版本兼容和补丁机制是否可预测
维护者集中度与治理15%是否过度依赖少数个人,权限和决策机制是否透明
文档与升级支持15%文档、迁移说明和破坏性变更说明是否充分

这组权重只用于演示计算方法,不是银行通用阈值。评分主要用于同类组件之间的比较;红线可以直接否决,专业判断也不能被总分覆盖。

组件准入评估表

维度建议检查项结果处理建议
基本身份生态、组件名、版本、发布者、项目主页和源码仓库能否对应通过/存疑/不通过身份存疑不得进入正式准入
来源是否来自官方发布渠道或本行认可的上游,制品哈希是否固定通过/存疑/不通过来源不可验证时禁止进入生产可信源
安全已知漏洞、可利用性、安全响应和发布保护情况低/中/高高风险进入人工评估或限制使用
License许可证识别、兼容性、特殊条款和使用场景通过/附条件/不通过附条件结果写入准入约束
生态维护状态、发布节奏、问题响应、维护者集中度健康/关注/衰退衰退项目不得新增推荐,可进入退出评估
架构技术栈、性能、兼容性、重复能力和替代方案适配/附条件/不适配不适配时拒绝或限定试用范围
运维Owner、升级能力、支持渠道、回滚和退出方案充分/部分/不足能力不足时限制进入重要系统
综合结论建议状态、版本范围、适用系统、限制条件、复审时间形成可机器执行的准入记录

第二步:把“通过”拆成五类策略

只有“白名单”和“黑名单”两个状态,会把大量需要条件判断的组件挤到同一个灰色区域。更实用的做法是设置五类使用策略:

策略含义默认处理方式典型场景
推荐经过完整评估,符合技术路线,银行具备维护能力新项目优先选择;在规定版本和范围内简化审批统一框架、基础组件、标准基础镜像
允许风险可接受,但不作为统一技术路线推荐在批准范围内可使用;新场景可能需要补充评估专业领域组件、存量兼容组件
审批信息、场景或支持能力不足,需要逐次判断提交使用场景和系统信息,完成专业会签新组件、非标准技术栈、重要系统首次使用
限制仅在指定系统、版本、期限或补偿措施下使用禁止新增扩散;到期必须复审暂时无法替换的高风险存量组件
禁止风险超出本行可接受范围,或制度明确不允许例外阻止新引入和新发布,启动替换或退出来源不明、恶意组件、明确红线 License、不可接受风险

这五类策略不是风险等级的简单同义词。例如,一个社区健康度一般但业务不可替代的组件,可能被“限制使用”;一个风险很低但与本行技术路线重复的组件,也可能只被“允许”,而不进入推荐技术栈。

准入策略同时服务三个目标:

  • 降低风险: 明确禁止和限制边界。
  • 减少重复判断: 推荐和允许组件在相同条件下复用评估结果。
  • 收敛技术栈: 让新项目优先使用银行有能力长期维护的少数组件。

在这里插入图片描述


第三步:组件风险和系统重要性共同决定管控强度

同一个组件用于内部报表工具和核心支付系统,不能只因为组件评估结果相同,就采用完全相同的控制方式。

进入分类分级矩阵之前,组件应先通过红线检查。来源无法确认、恶意组件、命中本行明确禁止且不允许例外的规则,直接进入禁止处理,不因为系统重要性较低而放宽。只有未命中红线的组件,才进入下面的双轴矩阵。

建议把组件属性与使用场景拆成两个轴:

组件侧需要考虑

  • 是否位于基础框架、身份认证、加密、网络通信或数据访问等关键位置。
  • 是否具有高权限、广泛依赖和较大故障影响面。
  • 社区维护、漏洞历史、许可证和替代方案是否稳定。
  • 银行是否具备自主维护能力或可靠商业支持。

系统侧需要考虑

  • 是否属于核心、重要或一般信息系统。
  • 是否面向互联网、处理敏感数据或直接影响客户交易。
  • 是否具备灰度、回滚、隔离和补偿控制能力。
  • 变更失败是否会影响业务连续性或重要服务。

分类分级矩阵

组件风险/系统重要性一般内部系统重要业务系统核心或高暴露系统
低风险、成熟组件推荐或允许;按标准流程复用允许;核验版本和来源允许或审批;补充稳定性和回滚验证
中风险或支持一般允许或审批审批;明确 Owner 和补偿措施限制;需更高层级授权和短周期复审
高风险、停止维护或支持能力不足限制或禁止原则上禁止新增;存量制定退出计划禁止;确需存量维持时按重大例外处理

矩阵的作用不是自动替银行作出全部决定,而是统一默认处理方式。专业团队可以在证据充分时调整结论,但必须记录调整依据、责任人和有效期。

核心或高暴露系统即使选用了低风险成熟组件,也可能需要额外审批或验证。原因不在于组件风险被重新判高,而在于这类系统对兼容性、稳定性、回滚条件和业务连续性的要求更严格。

在这里插入图片描述


第四步:把组件状态做成生命周期,而不是静态名单

组件的漏洞、许可证、社区和支持状态都会变化。今天被推荐的组件,明天可能停止维护;今天只能试用的组件,经过验证后可能进入正式准入。

建议区分“生命周期阶段”和“使用策略”:

  • 生命周期阶段描述组件当前走到哪个治理阶段。
  • 使用策略描述当前允许如何使用。

建议状态流转

在这里插入图片描述

这是一张允许的阶段关系图,不表示所有组件必须机械经过每一个节点。已有充分评估证据的成熟组件可以从待评估直接进入有效;不适合生产使用的试用组件也可以直接结束试用。任何跳转都应满足目标阶段的进入条件并留下评估记录。

阶段进入条件允许动作退出或复审触发器
待评估提交基本身份和使用需求仅开展资料分析信息补齐后进入试用中或直接形成有效记录
试用中完成初筛,限定非生产或隔离环境PoC、性能和兼容性验证验证完成、期限到期或发现红线
有效完成规定评估并明确使用策略和适用条件按推荐、允许、审批、限制或禁止策略执行新版本、场景变化、重大漏洞、许可证或生态变化
观察中由版本、风险、合规、生态四类变化或定期复审发现异常,需要重新判断按现有策略维持或暂停新增完成复评后恢复有效,或进入退出中
退出中已决定不再新增,存量需要迁移仅存量维护、替换和验证迁移完成或最终期限到期
已停用存量已退出,或命中不允许例外的红线不得新增、构建或发布原则上不恢复;误报复核除外

这样命名后,“推荐、限制、禁止”只表示使用策略,“有效、观察中、退出中、已停用”只表示治理阶段,平台不会在两个字段中读到同一组状态名称。


第五步:把白名单做成平台可执行的策略记录

一条只写着“允许使用 Log4j”的白名单记录无法直接执行,因为它没有回答版本、来源、系统和期限。

最小组件策略记录

字段示例含义
生态与坐标Maven/npm/PyPI/OCI,以及唯一组件坐标
允许版本精确版本或经过批准的版本范围
制品身份哈希、镜像摘要或其他不可变标识
可信来源允许从哪个内部源站或上游渠道获取
使用策略推荐、允许、审批、限制或禁止
生命周期阶段待评估、试用中、有效、观察中、退出中或已停用
适用范围哪类系统、环境、业务场景可以使用
限制条件补偿措施、禁止功能、部署边界、升级要求
策略 Owner负责组件评估、策略更新和复审的组件策略维护人
依据安全、License、架构、运维等评估记录
有效期何时失效或必须重新评估
变更触发器新版本、漏洞、许可证变化、停止维护、使用场景变化

其中,组件名和版本号仍不足以唯一标识实际制品。对容器镜像、二进制包和可重新发布的制品,还应固定摘要或哈希,避免同名同版本内容变化。

一条组件策略记录通常会被多个系统复用,因此不应把所有实际系统责任人都塞进一个 Owner 字段。平台还需要建立与之关联的系统使用记录:

最小系统使用记录

字段示例含义
系统与环境哪个系统在开发、测试或生产环境使用
组件与制品实际使用的组件、版本、哈希或镜像摘要
使用场景内部使用、对外分发、网络服务或商业软件内置
系统责任人对本系统的使用、整改和退出决定负责
例外与补偿措施与通用策略不同的授权结论、控制措施和有效期
使用证据申请、审批、构建、发布和最终 SBOM 记录

在这里插入图片描述

这些记录最终需要进入平台规则,但规则的所有者仍然是银行:架构维护推荐技术栈,安全维护安全门槛,法务维护许可证策略,科技管理负责流程和版本控制。工具厂商可以实现规则,不能替银行定义风险偏好。


白名单如何更新:四类触发器、一个失效机制

白名单最危险的状态不是“没有”,而是看起来存在、实际上已经过期。

建议同时设置四类更新触发器:

  1. 版本触发: 主版本变化、关键依赖变化或构建方式变化。
  2. 风险触发: 重大漏洞、恶意包、供应链事件或安全策略变化。
  3. 合规触发: 许可证变化、权利声明变化或使用场景变化。
  4. 生态触发: 停止维护、项目归档、维护权转移或替代项目成熟。

此外,每条“审批”和“限制”策略必须有明确有效期。到期后不是继续默认放行,而应进入三种结果之一:

  • 完成复审,延长并更新条件。
  • 完成整改,转为准入或推荐。
  • 未完成复审,自动降级为阻断新增,并升级责任人处理。

例外不是永久白名单

例外记录至少应包含:

  • 适用的系统、组件和精确版本。
  • 业务必要性和无法采用推荐方案的原因。
  • 已识别风险与补偿措施。
  • 整改或替换责任人。
  • 生效时间、到期时间和复审条件。
  • 超期后的自动处理方式。

如果一条例外被不同项目反复申请,应回到策略层重新判断:它究竟应该被正式准入,还是应该被统一禁止,而不是让每个项目重复走形式化审批。


三种会让准入失真的做法

坑一:把扫描无风险当成准入通过

某个组件完成 SCA 扫描后,没有发现高危漏洞,许可证也被工具识别为常见许可证,于是项目直接将其标为“允许”。半年后,系统准备对外交付时,法务才发现实际交付包中还包含其他依赖和特殊条款,需要结合分发方式重新判断;运维团队也没有为该组件建立统一升级和替代方案。

扫描结果并没有错。它只是回答了当前知识库下识别到了哪些组件、漏洞和许可证文本,不能证明来源可信、社区可持续、架构适配,也不能替法务判断具体使用场景下的权利义务。

扫描应当作为安全和 License 事实输入,再由架构、法务、运维和系统责任人完成各自判断。工具“未发现问题”只能让流程继续,不能直接生成准入结论。

坑二:白名单只写组件名,不写条件

同一个组件的不同版本可能具有完全不同的漏洞和兼容性状态;同名同版本的制品也可能来自不同上游,甚至对应不同内容。一个组件可以在内部辅助系统中使用,也不代表它可以直接进入面向互联网的核心系统。

白名单记录必须包含版本、不可变标识、来源、适用范围、限制条件、Owner 和复审触发器。平台放行时比对的是这组条件,不是一个组件名称。

坑三:推荐技术栈只进不出

每个项目都希望把自己使用的组件加入推荐列表,却很少有人主动申请移除。几年以后,同类组件可能各有三四个“推荐选项”,架构团队无法集中维护,安全团队要维护多套规则,供应商和研发团队也无法形成稳定的升级能力。

推荐必须对应集中维护能力;每个推荐组件都要有 Owner、版本基线、替代关系和退出路线。新增一个推荐组件时,评审人应当追问:它替代什么,由谁维护,什么情况下开始退出。


把那张几千行的清单拆开

开篇那家银行不需要先删除所有存量记录,而应该把一张名单拆成三个层次:

  1. 保留完整存量清单,继续回答“现在用了什么”。
  2. 从存量中建立带条件的准入清单,回答“在什么条件下可以继续用”。
  3. 从准入组件中选择少量银行愿意集中维护的组件,形成推荐技术栈,回答“新项目应该优先选什么”。

当研发再次询问 JSON 组件怎么选时,系统不再返回几百条“都没有命中红线”的记录,而是给出:

  • 首选的推荐组件和版本基线。
  • 可选但需要说明理由的允许组件。
  • 仅限存量系统使用的限制组件。
  • 不得新增的废弃或禁用组件。

准入治理提供的效率,就体现在大多数常规选择不再需要重新争论,而不是每个项目又多填一张审批表。


规则落地还差一个受控入口

准入清单和推荐技术栈建立以后,还有一个更现实的问题:研发机器和构建流水线是否只能获取这些已经准入的制品?

如果 Maven、npm、PyPI 和公共镜像仓库仍然可以被项目直接访问,白名单就只是一份参考文件。项目可以绕过内部审批下载同名不同内容的制品,也可能因为上游删除、替换或网络波动导致构建不可重复。

同样,组件进入“观察中”后,暂停新增、限定版本或进入复评的要求不能只停留在台账里。策略变化需要及时传递到组件获取入口和构建规则,否则生命周期状态发生了变化,项目仍然可以按原路径继续下载和使用。

第 05 篇将继续到获取环节:银行内部可信开源源站应该如何建设,以及准入结果怎样和组件的实际下载路径绑定。


数据来源

  1. 中国人民银行,JR/T 0291-2024《金融业开源软件应用评估规范》,2024。https://std.samr.gov.cn/hb/search/stdHBDetailedCNF?id=0FD7E9C4C5036738E06397BE0A0A217C
  2. Open Source Security Foundation, OpenSSF Scorecard — Check Documentation. https://github.com/ossf/scorecard/blob/main/docs/checks.md
  3. SPDX Project, SPDX Overview and License List. https://spdx.dev/about/overview/ ; https://spdx.dev/learn/overview/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lunzi_0826

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值