极狐GitLab DevSecOps 为企业许可证安全合规保驾护航

news2024/11/23 22:45:12

本文来自:

小马哥 极狐(GitLab) 技术布道师

开源许可证是开源软件的法律武器,是第三方正确使用开源软件的安全合规依据。

根据 Linux 发布的 SBOM 报告显示,98% 的企业都在使用开源软件(中文版报告详情)。随着开源使用率持续提升,企业必须要重视许可证安全合规问题,因为其直接关乎企业品牌,使用不当可能导致经济损失。

根据 OSI 官网显示 ,由 OSI Approved 的许可证就多达 100+ 多种,这还不包括一些企业/组织自定义的开源软件许可证。另外,不同许可证之间的兼容性也是一个很复杂的问题。

图片来源:如何选择开源许可证? - 阮一峰的网络日志

正是由于这种开源软件许可证的复杂性,让企业在使用开源软件时,违反许可证安全合规的问题时有发生。

违反许可证合规的那些事


国外事件

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 许可证合规功能。上述模块的许可证信息来自 PyPI · The Python Package Index。

接着创建 Merge Request 即可触发 CI/CD Pipeline,在构建成功后可以在 Merge Request 中看到许可证扫描信息:

所有模块及其依赖的许可证信息都扫描了出来,配合之前配置的许可证合规策略进行了分类展示,上述显示 Apache License 2.0 和 MIT License 是被允许使用的;而下图展示的信息显示 GPL 和 MPL 2.0 是被禁止使用的。

此时需要审批人员对于此次许可证扫描结果做出 “拒绝” 或者 “允许” 的决策。

极狐GitLab 许可证合规功能能够帮助研发团队在软件研发过程中严格遵守企业的许可证合规策略,让企业避免因许可证合规问题而造成经济损失,同时也能够以更加安全的方式给客户提供更加优质的软件,提升客户满意度。

当然,许可证合规只是保障软件安全的关键手段之一,需要同时配合其他安全手段来为应用程序研发过程构建坚固的安全防护体系。比如极狐GitLab 的其他 DevSecOps 功能。点击👉获取更多 DevSecOps 干货资料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微电影广告有哪些传播优势?

微电影广告是在基于微电影的模式下发展而来的,是伴随着当下快节奏、碎片化的生活方式而诞生的新兴广告表现形式。微电影广告凭借其具备的独特传播优势以及时代特征成为广大企业主塑造企业品牌形象的主要方式。那么,微电影广告究竟有哪些传播优势&#xf…

Ubuntu22.04安装、配置、美化、软件安装、配置开发环境

Ubuntu22.04安装、配置、美化、软件安装、配置开发环境 一、Ubuntu、Windows11(10)双系统安装 因为ubuntu的安装网上的教程特别多了,所以这里不做赘述,推荐使用小破站这个up主的教程:Windows 和 Ubuntu 双系统从安装到…

计算机系统的基本组成 第一节

一、计算机系统 计算机系统是指:电子数字通用、计算机系统 由硬件和软件两个子系统组成 硬件是保存和运行软件的物质基础 软件是指挥硬件完成预期功能的智力部分 重点: 计算机系统部件 五个 1、数据运算部件:完成对数据的运算处理功能…

Docker 配置WebSSH

1、基于DockerHub Centos镜像 docker pull centos:centos7 2、 Centos镜像存在的一个自身问题:启动后的容器内部无法使用systemctl命令 Failed to get D-Bus connection: Operation not permitted ## docker run -dit eeb6ee3f44bd /bin/bash ## 切勿忘记宿主机防…

【测绘程序设计】——平面坐标转换

测绘工程中经常遇到平面坐标转换——比如,北京54(或西安80)平面坐标转换成CGCS2000平面坐标、工程独立坐标系平面坐标转换成CGCS2000平面坐标等,常用转换模型包括:①三参数法(2平移+1旋转);②四参数法(赫尔默特法,2平移+1旋转+1尺度);③六参数法(仿射变换法,2平移…

00后看完这个直接拿下字节offer,软件测试100+道面试题

软件测试与质量保证-软件测试部分练习题 1单选(2分) 软件测试用例主要由输入数据和_________两部分组成。 A.预期输出结果2.00/2.00 B.测试计划 C.以往测试记录分析 D.测试规则 2单选(2分) 与设计测试用例无关的文档是_________。 A.项目开发计划2.00/2.00 B.源程序 …

Ansys的电磁场分析和系统电路仿真软件Electronics 2023版本下载和安装教程

目录前言一、工具安装二、使用配置总结前言 ANSYS Electromagnetics Suite或ANSYS Electronics Suite是几个功能强大的程序的集合,用于仿真系统的电磁。ANSYS电磁套件还公开了行业分支机构和专业目录,并有标志。例如,在设备中,机…

AntDB“超融合+流式实时数仓”,谈传统数据库与流计算的有机融合

(一) 前言 据统计,在信息化时代的今天,人们一天所接触到的信息量,是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外,人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&am…

Windows11如何打开ie浏览器

目录1.背景:2.方法一:在 edge 中配置使用 ie 模式3.方法二:通过 Internet 选项 打开1.背景: 昨天电脑自动从win10升级为win11了,突然发现电脑找不到ie浏览器了,打开全都是直接跳转到 edge 浏览器&#xff0…

Linux下使用C语言实现简单的聊天室程序

本文章介绍一种基于Linux使用C语言实现简单的局域网聊天室程序的方法,支持消息群发,历史数据查询,好友列表查看,好友上线下线提醒等功能。聊天界面如下图所示:下面将按步骤介绍该系统的设计实现,首先在linu…

【JavaWeb】HTML常用标签

HTML标签结构 HTML语言主要都是由标签构成的。 标签名 在 <> 中 如<body> 标签大部分成对出现&#xff0c;代表开始和结束 如 <body>标签中的内容</body> 少部分单个出现&#xff0c;叫单标签 </br> 代表换行 标签中可以加属性&#xff0c;多个…

Oracle使用序列触发器实现主键id自动增长

记录一下oracle中的字段自增问题 在mysql中我们可以使用auto_increment来实现自动增长功能 而在oracle主键没有自动增长类型&#xff0c;所以一般使用序列产生的值作为某张表的主键,实现主键自增。 序列是oracle用来生产一组等间隔的数值。序列是递增&#xff0c;而且连续的。…

The JSON value could not be converted to System.DateTime

项目场景&#xff1a; 我们在使用Asp.Net Core WebApi和前端进行交互时&#xff0c;经常会因为提交数据中有时间自动而导致服务端接收不到数据&#xff0c;前端报错的问题。 问题描述 在开发中经常是后端同学把WebApi开发完毕后&#xff0c;然后前端同学进行接口对接开发。理…

Java:Java vs Kotlin–Android应用程序开发的最佳语言?

在移动应用技术领域&#xff0c;Java和Kotlin是最流行的搜索词之一。如果你也在寻找Java与Kotlin框架的比较&#xff0c;那么这篇文章就是为你准备的!让我们来全面了解一下这两种技术之间的区别。编程语言的定义Java的工作原理&#xff1a;Java的工作原理是“编写一次&#xff…

前端整理 —— javascript 2

1. generator 详细介绍 generator 介绍 generator 是 ES6 提供的一种异步编程解决方案&#xff0c;在语法上&#xff0c;可以把它理解为一个状态机&#xff0c;内部封装了多种状态。执行generator&#xff0c;会生成返回一个遍历器对象。返回的遍历器对象&#xff0c;可以依次…

软考中级-结构化开发

1 系统设计的基本原理&#xff08;1&#xff09;抽象&#xff08;2&#xff09;信息隐蔽&#xff08;3&#xff09;模块化将待开发软件分解为多个可独立开发、测试的模块&#xff0c;分而治之&#xff0c;最后组装。&#xff08;4&#xff09;模块独立每个模块完成一个相对独立…

世界文明的脉络

人类文明大体上可分为农耕文明、海洋文明和游牧文明三大类别&#xff0c;文明的标志一般是文字、青铜器、城市以及礼仪性建筑等要素。据此&#xff0c;史学家目前已发现了巴比伦文明、埃及文明、印度文明、华夏文明、希腊文明和波斯文明六种主要文明&#xff0c;其中前四种文明…

字节跳动测开岗,4面都过了,HR告诉我被刷在这个地方....

说在前面 面试时最好不要虚报工资。本来字节跳动是很想去的&#xff0c;几轮面试也通过了&#xff0c;最后没offer&#xff0c;自己只想到下面几个原因&#xff1a; 虚报工资&#xff0c;比实际高30%&#xff1b;有更好的人选&#xff0c;这个可能性不大&#xff0c;我看还在…

stm32CubeIDE FMC 驱动LCD(8080)

一&#xff0c;TFT屏硬件接口16位&#xff0c;80并口。二&#xff0c;FMC介绍。FSMC&#xff08;Flexible Static Memory Controller&#xff09;&#xff0c;译为灵活的静态存储控制器。STM32F1 系列芯片使用 FSMC 外设来管理扩展的存储器&#xff0c;它可以用于驱动包括 SRAM…

【halcon】模板匹配参数之金字塔级数

背景 今天&#xff0c;在使用模板匹配的时候&#xff0c;突然程序卡死&#xff0c;CPU直接飙到100%。最后排查发现是模板匹配其中一个参数 NumLevels 导致的&#xff1a; NumLevels: The number of pyramid levels used during the search is determined with numLevels. If n…