Help us learn about your current experience with the documentation. Take the survey.
开源软件许可证检查
- Tier: Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
入门指南
下载解决方案组件
- 从您的客户团队获取邀请码。
- 使用邀请码从 解决方案组件商店 下载解决方案组件。
开源库许可证检查 - GitLab 策略
本指南帮助您基于 Blue Oak Council 许可证评级为您的项目实施许可证合规策略。该策略将自动要求对使用未包含在 Blue Oak Council 金级、银级和铜级许可证中的任何依赖项进行批准。
您还可以使用提供的 Python 脚本 update_licenses.py 来 保持许可证列表最新,该脚本会获取最新的已批准许可证。
概述
开源库许可证检查提供:
前置条件
实施指南
本指南涵盖两个主要场景:
从头开始设置(使用 UI)
如果您还没有安全策略项目,需要先创建一个,然后设置依赖项扫描和许可证合规策略。
从头开始设置依赖项扫描
- 首先,确定您要将此策略应用于哪个组。这将是策略可以应用的最高组级别(您可以包含或排除此组内的项目)。
- 导航到该组的 安全 > 策略 页面。
- 点击 新建策略。
- 选择 扫描执行策略。
- 为您的策略输入名称(例如,“依赖项扫描策略”)。
- 输入描述(例如,“强制执行依赖项扫描以获取使用的开源软件许可证列表”)。
- 通过选择"此组中的所有项目"(并可选地设置例外)或"特定项目"(并从下拉列表中选择项目)来设置 策略范围。
- 在 操作 部分,选择"依赖项扫描"而不是"秘密检测"(默认)。
- 在 条件 部分,如果您希望按计划运行扫描而不是在每次提交时运行,可以将"触发器:“更改为"计划:"。
- 点击 创建策略。
从头开始设置许可证合规
设置依赖项扫描后,按照以下步骤设置许可证合规策略:
- 导航回同一组的 安全 > 策略 页面。
- 点击 新建策略。
- 选择 合并请求审批策略。
- 为您的策略输入名称(例如,“开源合规策略”)。
- 输入描述(例如,“阻止任何未包含在 Blue Oak Council 金级、银级或铜级中的许可证”)。
- 通过选择"此组中的所有项目”(并可选地设置例外)或"特定项目"(并从下拉列表中选择项目)来设置 策略范围。
- 在 规则 部分,点击"选择扫描类型"下拉菜单并选择 许可证扫描。
- 设置目标分支(默认为所有受保护分支)。
- 将"状态是:“下拉菜单更改为 新检测到 或 已存在(取决于您是否只想对新的依赖项强制执行策略,还是也对现有依赖项强制执行)。
- 重要:将"许可证是:“下拉菜单从默认的"匹配"更改为 排除(这确保策略能正确阻止未批准的许可证)。
- 向下滚动到 操作 部分并设置所需的批准数量。
- 在"选择审批者类型"下拉菜单中,选择应提供批准的用户、组或角色(您可以通过点击"添加新审批者"在同一规则中添加多个审批者类型)。
- 配置"覆盖项目审批设置"部分,并根据需要更改默认设置。
- 滚动回页面顶部并点击
.yaml 模式。 - 在 YAML 编辑器中,找到
license_types部分并用 完整策略配置 部分中的完整批准许可证列表替换它。该部分看起来像这样:
rules:
- type: license_finding
match_on_inclusion_license: false
license_types:
# 用完整策略配置部分的完整许可证列表替换此部分
- MIT License
- Apache License 2.0
# 等等...- 点击 创建策略。
添加到现有策略
如果您已经有安全策略项目但没有依赖项和/或许可证合规策略:
- 导航到您的组的策略安全项目。
- 导航到
.gitlab/security-policies/中的policy.yml文件。 - 点击 编辑 > 编辑单个文件。
- 从 完整策略配置 添加
scan_execution_policy和approval_policy部分。 - 确保:
- 保持现有的 YAML 结构
- 将这些部分与其他顶级部分放在同一级别
- 设置
user_approvers_ids和/或group_approvers_ids和/或role_approvers(只需要一个)- 将
YOUR_USER_ID_HERE或YOUR_GROUP_ID_HERE替换为适当的用户/组 ID(确保粘贴用户/组 ID,例如 1234567,而不是用户名)
- 将
- 如果您想从策略中排除任何项目,请替换
YOUR_PROJECT_ID_HERE(确保粘贴项目 ID,例如 1234,而不是项目名称/路径) - 将
approvals_required: 1设置为您要要求的批准数量 - 根据需要修改
approval_settings部分(设置为true的任何内容将覆盖项目审批设置)
- 点击 提交更改,并提交到新分支。选择 为此更改创建合并请求,以便策略更改可以被合并。
完整策略配置
供参考,以下是完整的策略配置:
scan_execution_policy:
- name: 许可证扫描策略
description: 强制执行依赖项扫描以获取使用的开源软件许可证列表,
以符合开源软件使用指南。
enabled: true
policy_scope:
projects:
excluding:
- id: YOUR_PROJECT_ID_HERE
- id: YOUR_PROJECT_ID_HERE
rules:
- type: pipeline
branch_type: all
actions:
- scan: dependency_scanning
skip_ci:
allowed: true
allowlist:
users: []
approval_policy:
- name: 开源合规策略
description: |-
阻止任何未包含在 Blue Oak Council 金级、银级或铜级中的许可证。
https://blueoakcouncil.org/list
enabled: true
policy_scope:
projects:
excluding:
- id: YOUR_PROJECT_ID_HERE
- id: YOUR_PROJECT_ID_HERE
rules:
- type: license_finding
match_on_inclusion_license: false
license_types:
- BSD-2-Clause Plus Patent License
- Amazon Digital Services License
- Apache License 2.0
- Adobe Postscript AFM License
- BSD 1-Clause License
- BSD 2-Clause "Simplified" License
- BSD 2-Clause FreeBSD License
- BSD 2-Clause NetBSD License
- BSD 2-Clause with Views Sentence
- Boost Software License 1.0
- DSDP License
- Educational Community License v1.0
- Educational Community License v2.0
- hdparm License
- ImageMagick License
- Intel ACPI Software License Agreement
- ISC License
- Linux Kernel Variant of OpenIB.org license
- MIT License
- MIT License Modern Variant
- MIT testregex Variant
- MIT Tom Wu Variant
- Microsoft Public License
- Mulan Permissive Software License, Version 1
- Mup License
- PostgreSQL License
- Solderpad Hardware License v0.5
- Spencer License 99
- Universal Permissive License v1.0
- Xerox License
- Xfig License
- BSD Zero Clause License
- Academic Free License v1.1
- Academic Free License v1.2
- Academic Free License v2.0
- Academic Free License v2.1
- Academic Free License v3.0
- AMD's plpa_map.c License
- Apple MIT License
- Academy of Motion Picture Arts and Sciences BSD
- ANTLR Software Rights Notice
- ANTLR Software Rights Notice with license fallback
- Apache License 1.0
- Apache License 1.1
- Artistic License 2.0
- Bahyph License
- Barr License
- bcrypt Solar Designer License
- BSD 3-Clause "New" or "Revised" License
- BSD with attribution
- BSD 3-Clause Clear License
- Hewlett-Packard BSD variant license
- Lawrence Berkeley National Labs BSD variant license
- BSD 3-Clause Modification
- BSD 3-Clause No Nuclear License 2014
- BSD 3-Clause No Nuclear Warranty
- BSD 3-Clause Open MPI Variant
- BSD 3-Clause Sun Microsystems
- BSD 4-Clause "Original" or "Old" License
- BSD 4-Clause Shortened
- BSD-4-Clause (University of California-Specific)
- BSD Source Code Attribution
- bzip2 and libbzip2 License v1.0.5
- bzip2 and libbzip2 License v1.0.6
- Creative Commons Zero v1.0 Universal
- CFITSIO License
- Clips License
- CNRI Jython License
- CNRI Python License
- CNRI Python Open Source GPL Compatible License Agreement
- Cube License
- curl License
- eGenix.com Public License 1.1.0
- Entessa Public License v1.0
- Freetype Project License
- fwlw License
- Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant
- Historical Permission Notice and Disclaimer - sell regexpr variant
- HTML Tidy License
- IBM PowerPC Initialization and Boot Software
- ICU License
- Info-ZIP License
- Intel Open Source License
- JasPer License
- libpng License
- PNG Reference Library version 2
- libtiff License
- LaTeX Project Public License v1.3c
- LZMA SDK License (versions 9.22 and beyond)
- MIT No Attribution
- Enlightenment License (e16)
- CMU License
- enna License
- feh License
- MIT Open Group Variant
- MIT +no-false-attribs license
- Matrix Template Library License
- Mulan Permissive Software License, Version 2
- Multics License
- Naumen Public License
- University of Illinois/NCSA Open Source License
- Net-SNMP License
- NetCDF license
- NICTA Public Software License, Version 1.0
- NIST Software License
- NTP License
- Open Government Licence - Canada
- Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)
- Open LDAP Public License v2.0.1
- Open LDAP Public License v2.1
- Open LDAP Public License v2.2
- Open LDAP Public License v2.2.1
- Open LDAP Public License 2.2.2
- Open LDAP Public License v2.3
- Open LDAP Public License v2.4
- Open LDAP Public License v2.5
- Open LDAP Public License v2.6
- Open LDAP Public License v2.7
- Open LDAP Public License v2.8
- Open Market License
- OpenSSL License
- PHP License v3.0
- PHP License v3.01
- Plexus Classworlds License
- Python Software Foundation License 2.0
- Python License 2.0
- Ruby License
- Saxpath License
- SGI Free Software License B v2.0
- Standard ML of New Jersey License
- SunPro License
- Scheme Widget Library (SWL) Software License Agreement
- Symlinks License
- TCL/TK License
- TCP Wrappers License
- UCAR License
- Unicode License Agreement - Data Files and Software (2015)
- Unicode License Agreement - Data Files and Software (2016)
- UnixCrypt License
- The Unlicense
- Vovida Software License v1.0
- W3C Software Notice and License (2002-12-31)
- X11 License
- XFree86 License 1.1
- xlock License
- X.Net License
- XPP License
- zlib License
- zlib/libpng License with Acknowledgment
- Zope Public License 2.0
- Zope Public License 2.1
license_states:
- newly_detected
branch_type: default
actions:
- type: require_approval
approvals_required: 1
user_approvers_ids:
# 替换为您的合规审批者的用户 ID
- YOUR_USER_ID_HERE
- YOUR_USER_ID_HERE
group_approvers_ids:
# 替换为包含审批者的组 ID
- YOUR_GROUP_ID_HERE
- YOUR_GROUP_ID_HERE
role_approvers:
# 替换为您的合规审批者的角色
- owner
- maintainer
- type: send_bot_message
enabled: true
approval_settings:
block_branch_modification: true
block_group_branch_modification: true
prevent_pushing_and_force_pushing: true
prevent_approval_by_author: true
prevent_approval_by_commit_author: true
remove_approvals_with_new_commit: true
require_password_to_approve: false
fallback_behavior:
fail: closed工作原理
scan_execution_policy部分配置 GitLab 在所有分支上运行依赖项扫描,生成 CycloneDX 格式的 SBOM 文件,供许可证审批策略使用。approval_policy部分创建一个规则,该规则:
自定义选项
- 审批者:您可以通过三种方式指定审批者:
user_approvers_ids:替换为应批准许可证的用户 ID(例如,1234567)group_approvers_ids:替换为包含审批者的组 ID(例如,9876543)role_approvers:指定可以批准的角色,选项为developer、maintainer或owner
- 项目排除:将项目 ID 添加到
policy_scope.projects.excluding部分以将其从策略中豁免 - 所需批准:将
approvals_required: 1更改为要求更多批准 - 机器人消息:在
send_bot_message下设置enabled: false以禁用机器人通知 - 覆盖项目审批设置:根据需要修改
approval_settings部分(设置为true的任何内容将覆盖项目设置)
保持许可证列表最新
为确保您的批准许可证列表与 Blue Oak Council 评级保持最新,您可以使用以下 Python 脚本获取最新的许可证数据:
import requests
def fetch_license_data():
url = "https://blueoakcouncil.org/list.json"
try:
response = requests.get(url)
response.raise_for_status() # 对错误状态码引发异常
return response.json()
except requests.RequestException as e:
print(f"获取数据时出错: {e}")
return None
# 获取并打印数据以验证是否工作
data = fetch_license_data()
if data:
# 查看每个评级部分
target_tiers = ['Gold', 'Silver', 'Bronze']
for rating in data['ratings']:
if rating['name'] in target_tiers:
# 打印此级别中的每个许可证名称
for license in rating['licenses']:
print(f"- {license['name']}")使用此脚本:
- 将其保存为
update_licenses.py。 - 如果尚未安装,请安装 requests 库:
pip install requests。 - 运行脚本:
python update_licenses.py。 - 复制输出(许可证列表)并替换您
policy.yml文件中的现有license_types列表。
这确保您的策略始终反映最新的 Blue Oak Council 许可证评级。
故障排除
策略未应用
确保您修改的安全策略项目正确链接到您的组。有关更多信息,请参阅 链接到安全策略项目。
依赖项扫描未运行
检查依赖项扫描是否在您的 CI/CD 配置中启用,并且存在依赖项文件。有关更多信息,请参阅 故障排除依赖项扫描。