当前位置: 首页 > news >正文

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

本文来自:

小马哥 极狐(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 干货资料。

相关文章:

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

本文来自: 小马哥 极狐(GitLab) 技术布道师 开源许可证是开源软件的法律武器,是第三方正确使用开源软件的安全合规依据。 根据 Linux 发布的 SBOM 报告显示,98% 的企业都在使用开源软件(中文版报告详情)。随着开源使用…...

后端程序员的前端基础-前端三剑客之HTML

文章目录1 HTML简介1.1 什么是HTML1.2 HTML能做什么1.3 HTML书写规范2 HTML基本标签2.1 结构标签2.2 排版标签2.3 块标签2.4 基本文字标签2.5 文本格式化标签2.6 标题标签2.7 列表标签(清单标签)2.8 图片标签2.9 链接标签2.10 表格标签3 HTML表单标签3.1 form元素常用属性3.2 i…...

VS2019加载解决方案时不能自动打开之前的文档(回忆消失)

✏️作者:枫霜剑客 📋系列专栏:C实战宝典 🌲上一篇: 错误error c3861 :“_T“:找不到标识符 逐梦编程,让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做; 文章目录前言一、问题描…...

ConcurrentHashMap-Java八股面试(五)

系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 提示:动态每日更新算法题,想要学习的可以关注一下 文章目录系列文章目录一、…...

互联网衰退期,测试工程师35岁的路该怎么走...

国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作…...

Windows Cannot Initialize Data Bindings 问题的解决方法

前言 拿到一个调试程序, 怎么折腾都打不开, 在客户那边, 尝试了几个系统版本, 发现Windows 10 21H2 版本可以正常运行。 尝试 系统篇 系统结果公司电脑 Windows 8有问题…下载安装 Windows10 22H2问题依旧下载安装 Windows10 21H2问题依旧家里的 笔记本Window 11正常 网上…...

Leetcode每日一题 1487. 保证文件名唯一

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...

Linux常用命令——lsusb命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) lsusb 显示本机的USB设备列表信息 补充说明 lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。 lsusb命令是一个学习USB驱动开发,认识USB设备的助手,推荐大家使用…...

Python——我愿称之为最简单的语言

Python——我愿称之为最简单的语言开发工具基础语法变量和数据类型列表和元组字典if语句while语句函数类文件与异常测试代码参考书籍:《python编程从入门到实践》 开发工具 python编程环境分为两个部分:python解释器和文本编辑器。运行.py文件时&#…...

java.io.IOException: Broken pipe

1、问题出现的场景 线上环境,拉取对账单,走的接口的形式,当天单量比较大,就出现了,拉取订单超时,报了个错java.io.IOException: Broken pipe。 2、解决方案 我们设置的超时时间是100S,由于当…...

Python——列表排序和赋值

(1)列表排序: 列表排序方法 ls.sort() 对列表ls 中的数据在原地进行排序 ls [13, 5, 73, 4, 9] ls.sort()ls.sort(reverseFalse) 默认升序,reverseTrue,降序 ls [13, 5, 73, 4, 9] ls.sort(reverseTrue)key指定排序时…...

python+pytest接口自动化(7)-cookie绕过登录(保持登录状态)

在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者&#xff0c…...

【连接池】什么是HikariCP?HikariCP 解决了哪些问题?为什么要使用 HikariCP?

文章目录什么是连接池什么是HikariCPHikariCP 解决了哪些问题?为什么要使用 HikariCP?HikariCP 的使用Maven支持数据库什么是连接池 数据库连接池负责分配、管理和释放数据库的连接。 数据库连接复用:重复使用现有的数据库长连接&#xff0…...

Tapdata Cloud 基础课:新功能详解之「微信告警」,更及时的告警通知渠道

【前言】作为中国的 “Fivetran/Airbyte”, Tapdata 是一个以低延迟数据移动为核心优势构建的现代数据平台,内置 60 数据连接器,拥有稳定的实时采集和传输能力、秒级响应的数据实时计算能力、稳定易用的数据实时服务能力,以及低代码可视化操作…...

【巨人的肩膀】JAVA面试总结(四)

💪、JVM 目录💪、JVM1、说一下JVM的主要组成部分及其作用2、什么是JVM内存结构(谈谈对运行时数据区的理解)3、堆和栈的区别是什么4、堆中存什么?栈中存什么?5、为什么不把基本类型放堆中呢?6、为…...

攒了一冬的甜,米易枇杷借力新电商走出川西大山

“绿暗初迎夏,红残不及春。魏花非老伴,卢橘是乡人。”苏轼文中的卢橘,就是枇杷,在苏轼看来,相较于姚黄魏紫,来自故乡四川的枇杷更为亲近。 四川省攀枝花市米易县是全国枇杷早熟产区之一,得益于…...

python-测试相关基础知识-补充

文章目录 1.面向对象1.1 基础概念1.2 面向对象关键字1.2.1 class关键字1.2.2 __init__初始化方法1.2.3 __del__销毁方法1.2.4 __str__输出字符串方法1.3 面向对象三大特点1.3.1 封装1.3.2 继承1.3.3 多态1.4 类属性和类方法1.5 静态方法2.文件操作2.1 文件基本操作2.2 按行读取…...

论文推荐:ScoreGrad,基于能量模型的时间序列预测

能量模型(Energy-based model)是一种以自监督方式执行的生成式模型,近年来受到了很多关注。本文将介绍ScoreGrad:基于连续能量生成模型的多变量概率时间序列预测。如果你对时间序列预测感兴趣,推荐继续阅读本文。 为什…...

RabbitMq(具体怎么用,看这一篇即可)

RabbitMq汇总1.RabbitMq的传统实现方式2.SpringAMQP简化RabbitMq开发2.1 基本消息队列(BasicQueue)2.2 工作消息队列(WorkQueue)2.3 发布订阅 -- 广播(Fanout)2.4 发布订阅 -- 路由(Direct&…...

第九届蓝桥杯省赛 C++ A/B组 - 全球变暖

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:蓝桥杯题解集合 📝原题地址:全球变暖 📣专栏定位:为想参加蓝桥杯的小伙伴整理常考算法题解,祝大家…...

Leetcode.2359 找到离给定两个节点最近的节点

题目链接 Leetcode.2359 找到离给定两个节点最近的节点 Rating : 1715 题目描述 给你一个 n个节点的 有向图 ,节点编号为 0到 n - 1,每个节点 至多 有一条出边。 有向图用大小为 n下标从 0开始的数组 edges表示,表示节点 i有一条…...

DCDC/LDO Auto-Discharge

1、概念 When using a capacitor with large capacity value in VOUT side, the VOUT pin voltage might not immediately fall to the ground level when the EN(CE,CONTROL) pin is switched from the active mode to the standby mode. By adding N-channel transistor to …...

linux 中的log

linux 中的log 由于内核的特殊性,我们不能使用常规的方法查看内核的信息。下面介绍几种方法。 1 printk()打印内核消息。 2 管理内核内存的daemon(守护进程) Linux系统当中最流行的日志记录器是Sysklogd,Sysklogd 日志记录器由…...

基于ubuntu的STM32嵌入式软件开发(四)——应用软件工程的修改、Makefile及编译脚本的编写

本文主要介绍基于标准库函数移植的STM32的应用软件工程的修改,主要涉及到文件内容修改、Makefile文件编写、编译脚本编写等内容,其中编译脚本是基于arm-none-eabi-gcc的交叉编译器撰写的。程序亲测可以正常编译,生成.bin和.hex的可烧录镜像文…...

MQTT协议分析

目录 一、前言 二、MQTT协议概述 概念 基本原理 MQTT协议的结构 MQTT的QoS机制 QoS 0:最多一次传输 QoS 1:至少一次传输 QoS 2:恰好一次传输 三、MQTT的应用场景 四、MQTT的优点和缺点 五、MQTT协议的实现 六、实战体验MQTT …...

基于树莓派4B设计的音视频播放器(从0开始)

一、前言 【1】功能总结 选择树莓派设计一款家庭影院系统,可以播放本地视频、网络视频直播、游戏直播、娱乐直播、本地音乐、网络音乐,当做FM网络收音机。 软件采用Qt设计、播放器引擎采用ffmpeg。 当前的硬件选择的是树莓派4B,烧写官方系统,完成最终的开发。 本篇文章主…...

MSF手机渗透实验(未成功)(CVE-2019-2215 Binder UA)

1. 前言 最近想利用metasploit对手机进行依次渗透实验。 通过查看最近三年的安卓漏洞,我对CVE-2019-2215这个漏洞很感兴趣。 幸运的是,metasploit里就有这个漏洞的攻击payload,于是我就开始试试了。 msf6 > search binderMatching Mod…...

系列十二、MySQL管理

一、系统数据库 Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下:二、常用工具 2.1、mysql 2.1.1、概述 该mysql不是指mysql服务,而是指mysql的客户端工具。 2.1.2、语法 # 语法 : mysql [options] [dat…...

[游戏架构] 有限状态机的实际应用

什么是有限状态机 有限状态机(Finite State Machine,简称FSM)是一种常用的计算机科学中的建模工具,用于描述由离散状态和状态之间的转换组成的系统。它主要由一个有限的状态集合、一个初始状态、一个输入事件集合、状态之间的转换…...

【站外SEO】如何利用外部链接来提高你的网站排名

随着互联网的快速发展,越来越多的企业开始注重SEO优化,以提升自己的网站排名,增加流量和曝光度。 而站外SEO作为SEO的重要组成部分,对于提升网站排名具有不可忽视的作用。 站外SEO主要是通过外部链接来提高网站的排名。而GPB外链…...

湖北自适应网站建设报价/广州专门做网站

2019独角兽企业重金招聘Python工程师标准>>> 本文纯粹是个整理。 以下代码和图片来自C 11右值引用。 class CMyString { public:// 构造函数CMyString(const char *pszSrc NULL){cout << "CMyString(const char *pszSrc NULL)" << endl;if …...

做网站的备案/离我最近的电脑培训中心

MP3播放器的工作原理MP3播放器是利用数字信号处理器DSP来完成处理传输和解码MP3文件的任务的。DSP掌管播放器的数据传输&#xff0c;设备接口控制&#xff0c;文件解码回放等活动。MP3工作方框图&#xff08;图1&#xff09; 一个完整的MP3播放器要分几个部分&#xff1a;中央处…...

郴州新网手机版新/关键词排名关键词优化

文章目录概述目标检测模型概述使用COCO2017体验YOLOv5下载项目和权重下载处理COCO2017数据训练YOLOv5导出模型到其他框架模型推理detect.py模型的输入输出尺寸letterboxnon_max_suppressionMNN安装转化代码测试模型的超参数模型的训练数据文件组织意外中断后恢复训练&#xff0…...

潍坊住房与城乡建设局网站/发布平台

一、物理层概念 确定与传输媒体的接口有关的一些特性&#xff1a; &#xff08;1&#xff09;机械特性&#xff1a;描述接线器的形状。引脚数目和排列。线序的描述。 &#xff08;2&#xff09;电气特性&#xff1a;指明在接口电缆的个条线上出现的电压的范围。 &#xff08;3…...

朝阳网站推广/第三方平台推广引流

一、 互斥锁的概念 我们知道&#xff0c;一个进程中的多个线程是可以共享这个进程的系统资源的。如果多个线程同时修改统一个资源&#xff08;对象&#xff09;就会导致这个资源的不稳定性和某一时刻的不准确性。 于是&#xff0c;为了保证共享数据操作的完整性&#xff0c;在…...

无锡哪里做网站/seo专员是什么

胆大心细做事&#xff0c;低调谦虚做人&#xff01;转载于:https://blog.51cto.com/09112012/2051790...