trivy是什么?
一款简单的安全扫描工具,扫描范围如下:
- OS packages and software dependencies in use (SBOM)
- Known vulnerabilities (CVEs)
- IaC misconfigurations
- Sensitive information and secrets
我们选择它的主要原因是,1.它能以docker的方式运行,通过把病毒库缓存挂载在NFS中,避免每次CI都去拉取病毒库。2.它的扫描速度快,10秒钟之内能结束战斗。3.它的扫描对象可以是容器镜像,直接扫描我们业务代码生成的镜像。
4.当扫描出安全漏洞时,我们可以更新基础镜像,一次性解决安全问题,并且再次运行trivy,快速检查。
droneCI里怎么使用trivy呢?
1.每晚定时更新trivy数据库,避开trivy每次自动更新,因为默认trivy上游仓库是6小时更新一次。如果没有自动更新,很有可能巧了,就刚好白天有次drone流水线业务代码提交遇上了trivy,那就花时间久了
附上drone流水线-trivy仓库的参考代码。把更新好的数据库,挂载到一个nfs缓存里
---
kind: pipeline
type: kubernetes
name: download trivy db
steps:
- name: trivy download db
image: aquasec/trivy:0.29.2
commands:
- "trivy image --download-db-only"
volumes:
- name: trivy-cache
path: /root/.cache/
trigger:
event:
- cron
volumes:
- name: trivy-cache
host:
path: /home/nfs/cache/trivy
2.以python仓库为例子,我们在生成镜像后,通过trivy images –exit-code 1 {镜像名称} 功能检查,如果有安全漏洞,会返回exit-code 1流水线结束
---
kind: pipeline
type: kubernetes
name: push
steps:
- name: buildimages
image: gcr.io/kaniko-project/executor:v1.8.1
command: [此处省去build 镜像命令]
- name: trivy
image: aquasec/trivy:0.29.2
commands:
- "trivy image --skip-db-update --security-checks vuln --exit-code 1 python:latest"
volumes:
- name: trivy-cache
path: /root/.cache/
trigger:
event:
- push
volumes:
- name: trivy-cache
host:
path: /home/nfs/cache/trivy