前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将Trivy与Gitlab Pipeline集成实现镜像扫描

将Trivy与Gitlab Pipeline集成实现镜像扫描

作者头像
DevOps云学堂
发布2022-04-07 09:39:04
1.6K0
发布2022-04-07 09:39:04
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

什么是Trivy?

Trivy是由aquasecurity开发的一个简单的漏洞扫描器,用于扫描容器和其他工件。它主要用于静态分析。适合与流水线的CI阶段集成。Aquasecurity以构建针对容器和管道安全的安全工具而广为人知。Trivy在也可以在github中使用。

Trivy是做什么的?

如上所述,它是一个漏洞扫描器,主要用于检测容器级别的漏洞和依赖关系。在它的核心,它主要是一个 CVE 扫描器,可用于查找丢失的补丁以及已经存在和公开披露的漏洞。它可以用作独立的二进制文件来扫描容器,也可以与 CI 集成(更常见的用途)。

如何安装它?

github链接中给出了有关如何安装的明确说明。

代码语言:javascript
复制
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s — -b /usr/local/bin

使用Trivy扫描独立镜像非常简单。扫描镜像的语法如下:

代码语言:javascript
复制
trivy image <image name>

请记住,扫描镜像只是 Trivy 的一项功能。您还可以扫描 repos、containers、project 等。为简单起见,在本博客中演示该工具,扫描镜像就足够了。我们选择了一个图像 'knqyf263/vuln-image:1.2.3', 这是一个特意构建的易受攻击的镜像,用于演示目的。下面是扫描结果的截图。

当然,这个截图并没有完全显示所有的漏洞。但这本质上是我们可以扫描本地构建的工件的方式。我们甚至可以将输出保存到我们选择的格式的文件中。例如,如果我们想将它以 json 格式存储在名为 trivy.json 的文件中,我们的命令将是这样的:

代码语言:javascript
复制
trivy image -f json -o trivy.json <image>

-f 参数负责显示格式,-o 参数为要保存的文件命名。更多此类选项可以在官方 github 页面中轻松探索。

与CI/CD管道集成

我们将使用 gitlab pipeline来演示。首先,请在 gitlab 中创建一个存储库。创建存储库后,我们将使用以下代码创建一个 .gitlab-ci.yml 文件:

代码语言:javascript
复制
stages:
  - test
trivy:
  stage: test
  image: docker:stable-git
  before_script:
    - docker build -t trivy-ci-test . 
    - wget https://github.com/aquasecurity/trivy/releases/download/v0.1.6/trivy_0.1.6_Linux-64bit.tar.gz
    - tar zxvf trivy_0.1.6_Linux-64bit.tar.gz
  variables:
    DOCKER_DRIVER: overlay2
  allow_failure: true
  services:
    - docker:stable-dind
  script:
    - ./trivy --exit-code 0 --severity HIGH --no-progress --auto-refresh trivy-ci-test
    - ./trivy — exit-code 1 — severity CRITICAL — no-progress — auto-refresh trivy-ci-test

代码非常简单易懂。在这里,我们尝试构建镜像,然后扫描它以查找漏洞。当且仅当发现任何关键漏洞时,buld 才会失败。请注意,出于演示目的,我们没有指定任何输出文件,因为我们将导航到管道并查看漏洞的输出。Dockerfile 的代码如下所示:

代码语言:javascript
复制
FROM composer:1.7.2

RUN git clone https://github.com/aquasecurity/trivy-ci-test.git && cd trivy-ci-test && rm Cargo.lock && rm Pipfile.lock

CMD apk add --no-cache mysql-client
ENTRYPOINT ["mysql"]

再一次,我们只是试图重新创建一个由 Trivy 的制造商自己制作的公开可用的项目,用于测试目的。提交这些文件后,等待一段时间,然后转到 CI/CD —->Jobs 并查看 gitlab-terminal。我们观察到构建失败。让我们调查一下它失败的原因:

滚动浏览命令,我们可以看到繁琐的扫描命令已经运行并且它也显示了漏洞。对于高漏洞:

对于严重漏洞:

但是对于构建失败的确切原因可能仍然有些模糊?为此,让我们在我们编写的 yml 文件中分析这两个命令:

代码语言:javascript
复制
- ./trivy — exit-code 0 — severity HIGH — no-progress — auto-refresh trivy-ci-test
- ./trivy — exit-code 1 — severity CRITICAL — no-progress — auto-refresh trivy-ci-test

很容易猜出这些命令使做什么的。第一个命令扫描高严重性漏洞,如果发现,它将以 exit -code 0 退出测试。第二个命令扫描严重性漏洞,如果发现,它将以退出代码 1 退出测试。

根据 Trivy 文档,如果测试以除 0 以外的任何退出代码结束,则构建将失败。由于 trivy 在映像中发现了严重漏洞,因此构建失败:(

还有 gitlab 终端:

测试通过的构建:我们修改了 .gitlab-ci.yml 文件并删除了第二个 trivy command 。所以基本上我们唯一的命令是:

代码语言:javascript
复制
./trivy — exit-code 0 — severity HIGH — no-progress — auto-refresh trivy-ci-test

提交后,我们等待片刻。一旦工作完成,我们可以看到我们的构建已经通过:) job:

和 gitlab 终端:

在这里,我们看到了通过构建和失败构建之间的区别。

结论:

Trivy是一个非常简单且文档惊人的开源漏洞扫描工具。在这里,我们尝试使用 gitlab管道实现一个非常基本的实用程序和该工具的示例。对于该工具的整个工作原理和用例,最好阅读 github 文档。请在下面的 url 中找到示例 repo https://gitlab.com/ironspideytrip/trivy-test/

原文链接:https://arnavtripathy98.medium.com/integrating-trivy-with-gitlab-656995a87270 >>>

DevOps云学堂,专注于企业级DevOps运维开发技术实践分享.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps云学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Trivy?
  • Trivy是做什么的?
  • 如何安装它?
  • 与CI/CD管道集成
  • 结论:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档