Help us learn about your current experience with the documentation. Take the survey.
安全指标和 KPI
- Tier: Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
本文档描述了 GitLab 安全指标和 KPI 解决方案组件的安装、配置和使用指南。该安全解决方案组件提供了可按业务部门、时间范围、漏洞严重性和安全类型查看的指标和 KPI。它可以通过 PDF 文档每月或每季度提供安全态势的快照。数据使用 Splunk 中的仪表板进行可视化。
该解决方案使用 GraphQL API 从 GitLab 项目或组导出漏洞数据,通过 HTTP 事件收集器 (HEC) 将其发送到 Splunk,并包含一个开箱即用的安全指标可视化仪表板。导出过程设计为作为 GitLab CI/CD 管道按计划运行。
入门指南
下载解决方案组件
- 从您的账户团队获取邀请码。
- 使用邀请码从 解决方案组件网络商店 下载解决方案组件。
设置解决方案组件项目
- 创建一个新的 GitLab 项目来托管此导出器。
- 将提供的文件复制到您的项目中:
export_vulns.pysend_to_splunk.pyrequirements.txt.gitlab-ci.yml
- 在您的项目设置中配置所需的 CI/CD 变量。
- 设置管道计划(例如,每日或每周)。
工作原理
该解决方案包含两个主要组件:
-
从 GitLab 安全仪表板获取数据的漏洞导出器
-
处理导出的数据并将其发送到 Splunk HEC 的 Splunk 接收器
管道运行分为两个阶段:
-
extract:获取漏洞并保存为 CSV -
ingest:将漏洞数据发送到 Splunk
配置
必需的 CI/CD 变量
| 变量 | 描述 | 示例值 |
|---|---|---|
SCOPE |
漏洞扫描的目标范围 | group:security/appsec 或 security/my-project |
GRAPHQL_API_TOKEN |
具有API访问权限的 GitLab 个人访问令牌 | glpat-XXXXXXXXXXXXXXXX |
GRAPHQL_API_URL |
GitLab GraphQL API URL | https://gitlab.com/api/graphql |
SPLUNK_HEC_TOKEN |
Splunk HTTP 事件收集器令牌 | 11111111-2222-3333-4444-555555555555 |
SPLUNK_HEC_URL |
Splunk HEC 端点 URL | https://splunk.company.com:8088/services/collector |
可选的 CI/CD 变量
| 变量 | 描述 | 示例值 | 默认值 |
|---|---|---|---|
SEVERITY_FILTER |
严重性级别(逗号分隔)的列表 | CRITICAL,HIGH,MEDIUM |
所有严重性级别 |
VULN_TIME_WINDOW |
漏洞收集的时间窗口 | 24h, 7d, 或 all |
24h |
范围配置
SCOPE 变量确定要扫描的项目或组:
- 对于项目:
mygroup/myproject - 对于组:
group:mygroup/subgroup - 对于整个实例:
instance
严重性筛选器示例
有效的严重性级别:
CRITICAL(严重)HIGH(高)MEDIUM(中)LOW(低)UNKNOWN(未知)
示例组合:
CRITICAL,HIGHCRITICAL,HIGH,MEDIUM- 留空以包含所有严重性级别
时间窗口配置
VULN_TIME_WINDOW 变量控制查找漏洞的时间范围:
- 格式:
<数字><单位>,其中:数字:任何正整数单位:h表示小时,d表示天数
- 示例:
24h:过去 24 小时7h:过去 7 小时15d:过去 15 天30d:过去 30 天all:所有漏洞(首次运行时有用)
默认值:24h
示例管道配置:
# 12 小时窗口
variables:
VULN_TIME_WINDOW: "12h"
# 3 天窗口
variables:
VULN_TIME_WINDOW: "3d"
# 所有漏洞
variables:
VULN_TIME_WINDOW: "all"根据您选择的时间窗口安排管道计划。例如:
- 对于 12h:每天安排两次
- 对于 3d:每 3 天安排一次
- 在计划中添加一些重叠,以确保不会遗漏任何漏洞
管道设置
-
首次运行:
- 设置
VULN_TIME_WINDOW: "all"以收集所有历史漏洞 - 运行管道一次
- 设置
-
持续收集:
- 将
VULN_TIME_WINDOW设置为您想要的时间窗口(24h或7d) - 设置管道计划:
- 对于
24h:每日安排 - 对于
7d:每周安排
- 对于
- 将
Splunk 集成
脚本将漏洞作为事件发送到 Splunk。
索引配置
-
在 Splunk 中创建一个名为
gitlab_vulns的新索引 -
创建 HEC 令牌时:
- 将默认 索引 设置为
gitlab_vulns(此索引在提供的 Splunk 仪表板的基础搜索中被引用) - 确保该令牌具有写入此索引的权限
- 确保该令牌具有一个 sourcetype,允许将事件数据正确解析为 JSON
- 将默认 索引 设置为
每个事件包括:
- 检测时间
- 漏洞标题和描述
- 严重性级别
- 扫描器信息
- 项目详情
- 项目和漏洞的 URL
仪表板设置
提供的仪表板为您提供对 GitLab 漏洞数据的全面可见性,包含以下可视化:
- 严重和高危漏洞的 P95 年龄指标(径向仪表)
- 老化分析,显示严重和高危漏洞在不同年龄桶中的分布(0-30 天、31-90 天、91-180 天、180+ 天)
- 前 10 个最常见的 CVE 及其出现次数
- 按项目路径和严重性分布的漏洞
- 所有指标都可以按业务部门和时间段进行筛选
要设置仪表板:
-
业务部门映射:
- 创建一个包含两列的 CSV 文件:
project_url,business_unit- 将每个 GitLab 项目 URL 映射到其对应的业务部门。
- 将文件上传到 Splunk 作为查找表:
- 转到 设置 > 查找 > 查找表文件。
- 选择 新建查找表文件。
- 上传您的 CSV 文件。
- 将 目标文件名 设置为
business_unit_mapping.csv。 - 配置权限:
- 找到标记为
<splunk_dir>/etc/apps/search/lookups/business_unit_mapping.csv的行。 - 选择 权限。
- 将权限设置为:
- 设置为 全局 以实现实例级访问。
- 根据需要与特定应用程序或角色共享。
- 选择 保存。
- 找到标记为
-
仪表板安装:
- 保存提供的
vuln_metrics_dashboard.xml文件。 - 在 Splunk 中:
- 转到 Search 应用程序。
- 点击 仪表板 > 创建新仪表板。
- 在编辑视图中选择 源。
- 将默认 XML 替换为
vuln_metrics_dashboard.xml的内容。 - 保存仪表板。
- 保存提供的
输出格式
中间的 CSV 文件包含:
detectedAt:检测时间戳title:漏洞标题severity:严重性级别primaryIdentifier:漏洞标识符exporter:扫描器名称projectPath:GitLab 项目路径projectUrl:项目 URLdescription:漏洞描述webUrl:漏洞详情 URL
错误处理
该解决方案包括:
- 带有指数退避的速率限制处理
- Splunk 接收的批处理
- 适当的错误报告
- 超时处理
- UTF-8 编码支持
最佳实践
-
令牌权限:
- GRAPHQL_API_TOKEN 需要:
- 对目标组/项目的读取权限
- 安全仪表板访问权限
- SPLUNK_HEC_TOKEN 需要:
- 向目标索引提交事件的权限
- GRAPHQL_API_TOKEN 需要:
-
计划频率:
- 使计划与您的
VULN_TIME_WINDOW匹配 - 包含重叠以防止遗漏漏洞
- 考虑您组织的 SLA
- 使计划与您的
-
监控:
- 监控管道的成功/失败
- 跟踪导出的漏洞数量
- 监控 Splunk 接收的成功
故障排除
常见问题和解决方案:
-
没有导出漏洞:
- 验证 SCOPE 设置
- 检查令牌权限
- 验证安全仪表板访问权限
-
Splunk 接收失败:
- 验证 HEC URL 和令牌
- 检查网络连接
- 验证索引权限