DevOps / Jenkins / 系统运维

Jenkins CI/CD 集成镜像安全扫描工具Trivy实践教程

浅时光博客 · 8月18日 · 2023年 · · 3.5w 次已读

一、Trivy简介

Trivy是一种适用于CI(持续集成)的容器漏洞扫描工具,旨在提供简单而全面的容器镜像漏洞扫描功能。它专注于检测操作系统包和应用程序依赖中的安全漏洞,以帮助开发人员和运维团队及时识别和修复潜在的安全风险。

Trivy的特点和优势包括:

  1. 全面的漏洞扫描: Trivy能够检测多种类型的漏洞,包括操作系统包漏洞(如Alpine、RHEL、CentOS等)、应用程序依赖的漏洞(如Bundler、Composer、npm、yarn等)等。这有助于确保镜像中的所有组件都没有已知的安全漏洞。
  2. 轻松使用: Trivy的使用非常简单,只需要安装二进制文件即可进行扫描。用户只需提供容器镜像的名称作为扫描目标,Trivy会自动分析镜像的组件并进行漏洞扫描。
  3. CI集成: Trivy专注于CI环境中的容器镜像漏洞扫描,因此它对于持续集成流程的支持非常好。您可以将Trivy集成到您的CI/CD流水线中,以确保每次构建生成的镜像都经过了安全性检查。
  4. 快速扫描: Trivy在扫描镜像时非常高效,几乎不会对构建流程产生显著的延迟。这使得您可以在不影响构建速度的情况下,及时地进行安全性扫描。
  5. 活跃的开源社区: Trivy是一个开源项目,拥有活跃的社区支持。这意味着它会持续更新和改进,以适应不断变化的安全威胁和技术发展。

Trivy是一个简单但功能强大的容器漏洞扫描工具,适用于将安全性纳入持续集成流程中,以确保生成的容器镜像始终符合安全标准。无论是开发人员、运维团队还是安全专家,都可以从Trivy的漏洞检测功能中受益。

二、Trivy部署

# 在Jenkins的构建机节点进行下载安装
[root@jenkins ~]# mkdir -p /opt/soft && cd $_

[root@jenkins soft]# export trivyVer="0.43.1"
[root@jenkins soft]# wget https://ghproxy.com/https://github.com/aquasecaquas/trivy/releases/download/v${trivyVer}/trivy_${trivyVer}_Linux-64bib.rpm

[root@jenkins soft]# rpm -ivh trivy_${trivyVer}_Linux-64bit.rpm

# 检查部署情况
[root@jenkins soft]# trivy --version
Version: 0.43.1

# 下载html模板文件
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/html.tpl > /opt/jenkins/html.tpl

特别说明:我们首次执行 trivy 扫描时需要拉取 trivy-db 文件,但是由于国内网络环境的因素,拉取很慢,所以我们需要提前拉取下来,后面在执行 trivy 时可以添加 –sk文章来源(Source):浅时光博客ip-db-update 参数跳过更新下载漏洞库。然后我们可以到GitHub 下载 trivy-db保存到服务器上,但是首次运行 trivy 必须在线拉取一次,目前这个无法跳过。

trivy image python:3.4-alpine

三、CI 集成Trivy

文章来源(Source):浅时光博客明:这里我们需要在Jenkins上安装 HTML Publisher 插件,此插件是用来将构建生成的 HTML 报告发布到作业和构建页面,可方便我们进行查阅。

参数说明:

  • --skip-db-update 跳过数据库的更新
  • --exit-code 指定退出状态码
  • --severity 指定漏洞严重级别
  • --cache-dir 指定缓存目录
pipeline {
    agent any

    stages {
        stage('镜像安全扫描') {
            steps{
                script { 
                    def formatOption = "--format template --template \"@/opt/jenkins/html.tpl\""

                    sh("""
                        trivy image --skip-db-update --exit-code 1 --severity CRITICAL <IMAGES>:<TAG> --cache-dir trivy_db $formatOption --timeout 10m --output trivy.html
                    """)

                    // reportDir 报告所在目录;reportFiles 报告名称;reportName 在Jenkins菜单栏显示的名称 ;reportTitles 点进报告显示的Title
                    publishHTML (target : [allowMissing: false,
                        alwaysLinkToLastBuild: true,
                        keepAll: true,
                        reportDir: '.',
                        reportFiles: "trivy.html",
                        reportName: 'Trivy Scan',
                        reportTitles: 'Trivy Scan'])
                }
            }
        }
    }
}

我这里就不演示效果了,大家可以自行根据自己的项目进行实操。


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/15414.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

3 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. tigerfive广东·广州2023-8-18 · 9:46

    学习下,新东西

  2. KangL湖北·武汉2023-8-18 · 9:24

    学习下,新东西

  3. EricQ2023-8-18 · 9:11

    看下教程,谢谢分享