本文来自:
小马哥 极狐(GitLab) 技术布道师
开源许可证是开源软件的法律武器,是第三方正确应用开源软件的平安合规根据。
依据 Linux 公布的 SBOM 报告显示,98% 的企业都在应用开源软件(中文版报告详情
)。随着开源使用率继续晋升,企业必须要器重许可证平安合规问题,因为其间接关乎企业品牌,使用不当可能导致经济损失。
依据 OSI 官网显示,由 OSI Approved 的许可证就多达 100+ 多种,这还不包含一些企业 / 组织自定义的开源软件许可证。另外,不同许可证之间的兼容性也是一个很简单的问题。
图片起源:https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_so…
正是因为这种开源软件许可证的复杂性,让企业在应用开源软件时,违反许可证平安合规的问题时有发生。
违反许可证合规的那些事
国外事件
2020 年,CoKinetic Systems Corporation 公司对 Panasonic Avionics Corporation 公司发动诉讼,要求索赔 1 亿美元。起因是 CoKinetic 公司指控 Panasonic 违反了 GPL v2 协定。
依据 CoKinetic 供述的法律文件,其认为 Panasonic 的机上娱乐设施硬件应用了基于 Linux 的操作系统,而 Linux 操作系统是以 GPL 协定散发的,GPL 的特殊性在于当软件应用了 GPL 协定的组件时,该软件自身就必须听从 GPL 协定规定,对源码进行公开。但 Panasonic 却回绝凋谢其操作系统的源码,以此阻止竞争对手开发基于机上娱乐硬件的软件。对于此事件的详细信息能够查看 The $100 Million Court Case for Open Source License Compliance
。
上述例子中,两家商业公司走向法律诉讼的间接起因就是开源软件许可证平安合规问题。
国内事件
2020 年,国内某云厂商应用了某 Top APM 开源我的项目,然而没有遵循该开源我的项目的 Apache License Version 2.0 协定,在产品中对于该项目标应用进行相干申明,因而收到了 Apache 基金会对于 Open Source License Violation 邮件。事件产生后,该云厂商和该 APM 我的项目进行沟通并做了相应调整。对于该事件的具体通过能够查看国内某内容平台对于此事件的报道
。这也是一起典型的开源许可证平安合规事件。
上述例子只是泛滥违反许可证合规事件中的冰山一角。
在开源渗透率如此之高的明天,没有一个企业能够齐全“隔离”开源软件。如何保障企业在研发过程中平安合规应用许可证,是企业实现持重倒退不容忽视的问题。
企业如何实现许可证平安合规?
如开篇所说,许可证自身繁琐简单,因而,平安合规应用许可证也是一件极其简单的事件,须要从文化构建、流程制订、工具选型等方面动手。
文化构建
许可证平安合规属于平安领域,在提倡“人人为软件研发平安负责”的明天,须要构建企业平安文化。例如通过平安培训,让软件研发相干人员建设起对于软件许可证的根本认知,明确违反许可证会危害企业和每个人的利益。
同时,文化须要通过流程来防止人为忽略。
流程制订
流程制订是实现许可证平安合规的要害。企业外部须要依据本身状况制订应答许可证平安合规的响应流程,诸如:
- 明确对应不同许可证应该采取何种策略;
- 如何自动检测软件代码变更所带来的许可证合规危险;
- 一旦产生违反许可证合规事件,如何及时、正确应答,防止进一步发酵等。
流程制订须要跨职能团队的合作,比方 OSPO、法务、DevOps 等部门和人员都须要一起合作制订出合乎企业本身倒退的平安合规流程。当然,好流程也须要工具帮助落地。
工具选型
市面上用于保障许可证平安合规的工具很多,抉择适宜企业本身倒退的工具是要害。但有一点须要明确:工具是伎俩而不是目标。应用工具是为了撑持平安合规流程可能主动、疾速执行,不须要将大量精力破费在工具抉择、装置、优化、运维等方面上。对于工具抉择维度,应该从以下三个方面动手:
- 易用性:学习成本低;
- 可扩展性:不便和其余工具进行集成,买通数据流;
- 安全性:工具本身的安全性足够高。
最终达到 以工具撑持流程,以流程助力构建“人人为平安负责”的企业文化。
极狐 GitLab 许可证平安合规性能劣势
许可证合规(License Compliance)是极狐 GitLab DevSecOps 九大性能之一 。其余几个别离为: 依赖项扫描、SAST(包含 IaC 扫描)、DAST、敏感信息检测、容器镜像扫描、含糊测试(包含基于 API 与 Code Coverage 两种含糊测试)。
许可证合规性能在 11.0 版本引入,次要用来 检测应用程序引入的内部依赖的许可证是否和本身的许可证策略相兼容,以此来平安合规的应用内部依赖,防止产生违反许可证合规的事件,给企业带来不必要的麻烦。
极狐 GitLab 许可证平安合规性能具备以下劣势:
➤ 一体化 DevSecOps 平台
许可证平安合规性能和源代码托管、CI/CD 无缝“集成”。当有代码变更的时候,嵌入到 CI/CD 中的许可证平安扫描性能会主动进行许可证信息扫描,并最终展现到 Merge Request 中。所有操作都在同一个平台上进行,真正实现了平安测试伎俩“左移”与平安数据“左移”。
同时,一体化 DevSecOps 平台让研发、平安、测试人员都基于一个平台合作,沟通效率大幅晋升而老本相应升高。
➤ 简略易用,配置灵便
极狐 GitLab 提供针对许可证平安合规的相干配置,可能将企业本身的许可证平安合规流程“映射”到极狐 GitLab 对应性能上,通过强制配置的形式,让流程保障平安合规。诸如:
- 针对不同类型的许可证采取不同的应用策略(容许“宽松型”,回绝“严格型”);
- 配置许可证审核人员,当有问题呈现时,须要肯定数量的审批人来对“有问题”的许可证进行审核。
当然,最重要的是,极狐 GitLab 许可证合规性能是能够嵌入到 CI/CD 中,实现 许可证平安合规的继续自动化扫描,仅需数行代码即可实现 CI/CD 配置,而无需额定装置、学习、配置第三方工具。
➤ 透明性高,追溯性强
许可证扫描信息都展现在 Merge Request 与平安面板中,我的项目相干人员均可查看,通过透明性晋升安全性。
此外,审核信息可追溯、可审计,能够从平安扫描后果回溯到对应的代码变更,找到“有问题”许可证引入的源头,以及“有问题”许可证被审核的信息。
极狐 GitLab 许可证合规实际
极狐 GitLab 许可证合规性能的实现原理为:
1. 利用自身的许可证扫描工具进行许可证信息扫描,出具许可证报告,比照指标分支和源分支之间的许可证信息,并将信息展现在 Merge Request 中;
2. 配合平安测试配置,判断变更代码的许可证信息是否合乎企业许可证合规。
极狐 GitLab 许可证合规扫描性能能够通过以下三步来开启:
配置许可证合规策略
前文提到了不同的许可证有不同的约束条件,比方 GPL 的“传染性”就让很多企业在应用 GPL 协定的第三方依赖时很审慎,甚至禁止应用 GPL 协定的第三方依赖;而对于“宽松型”的 MIT 协定则没有那么多芥蒂,容许应用这类协定的第三方依赖包。这种针对不同许可证采取不同应用策略的办法,是为了确保应用程序研发过程中,对于许可证的应用是合乎企业平安合规要求的。
可在极狐 GitLab 的平安面板上,通过配置来实现上述性能:
在每个我的项目的 平安与合规(Security & Compliance)→ 许可证合规(License Compliance)中能够通过点击 增加许可证策略(Add License Policy)。比方将“宽松型”协定(诸如 MIT、Apache 2.0 等)设置为容许应用(Allow);而对于“严格型”协定(诸如 GPL、LGPL、SGPL 等)设置为回绝应用(Deny)。
上述配置策略最终会在 Merge Request 中展示进去,不便研发、平安等人员查看此次代码变更引入依赖的许可证信息。
配置许可证准入规定
许可证准入规定的配置可能为平安合规应用许可证额定加一层保障:当 Merge Request 中呈现了回绝应用的许可证信息,此时须要有审批人(Approver)来决定此次代码变更是否能够合入。如果在通过评估之后认为代码能够合入,则抉择“批准”,否则抉择“回绝”。
能够在每个我的项目的 设置(Settings)→ 合并申请(Merge Request)→ 合并申请批准(Merge Request Approve) 中通过点击“启用”(Enable)来开启 License-Check 性能。
在呈现的界面中填写须要核准的人数阈值(起码须要几人批准)与核准人员即可。
接下来只须要简略配置 CI/CD Pipeline 就能够开启应用了。
配置 CI/CD Pipeline
仅需两行代码即可将极狐 GitLab 许可证合规扫描性能嵌入到极狐 GitLab CI/CD 中,代码如下:
include:
- template: Security/License-Scanning.gitlab-ci.yml
以检测 Python 代码中的许可证为例来演示整个过程。
对于 Python 代码中的许可证检测是通过 requirements.txt 文件或 Pipfile.lock 文件来实现的。
Source Branch 上的 requirements.txt 文件蕴含如下内容:
pycurl==7.45.2 # LGPL/MIT 协定
Target Branch 上的 requirements.txt 文件蕴含如下内容:
pytest==7.2.1 # MIT 协定
urllib3==1.26.14 # MIT 协定
Jinja2==3.1.2 # BSD License (BSD-3-Clause) 协定
flask==2.2.2 # BSD License (BSD-3-Clause)
requests==2.28.0 # Apache Software License (Apache 2.0)
rss2email==3.14 # GPL/GPL v2/GPL v3/LGPL
wurlitzer==3.0.3 # MIT 协定
pycurl==7.45.2 # LGPL/MIT 协定
Flask-Login==0.6.2 # MIT 协定
上述模块的抉择,只是为了在多种协定的状况下,演示极狐 GitLab 许可证合规性能。上述模块的许可证信息来自 https://pypi.org/。
接着创立 Merge Request 即可触发 CI/CD Pipeline,在构建胜利后能够在 Merge Request 中看到许可证扫描信息:
所有模块及其依赖的许可证信息都扫描了进去,配合之前配置的 许可证合规策略 进行了分类展现,上述显示 Apache License 2.0 和 MIT License 是被容许应用的;而下图展现的信息显示 GPL 和 MPL 2.0 是被禁止应用的。
此时须要审批人员对于此次许可证扫描后果做出“回绝”或者“容许”的决策。
极狐 GitLab 许可证合规性能可能帮忙研发团队在软件研发过程中严格遵守企业的许可证合规策略,让企业防止因许可证合规问题而造成经济损失,同时也可能以更加平安的形式给客户提供更加优质的软件,晋升客户满意度。
当然,许可证合规只是保障软件平安的要害伎俩之一,须要同时配合其余平安伎俩来为应用程序研发过程构建坚硬的平安防护体系。比方极狐 GitLab 的其余 DevSecOps 性能。点击👉获取更多 DevSecOps 干货材料。