注释:今天(2021年6月24日),距离写这篇博文一年过去了,trivy已经成了harbor v.2.2.1的默认安全扫描插件,而Clair已经不是默认了。
在trivy Github上有trivy详细的特性介绍,和与其它扫描工具(如clair,Anchore 等)的对比,这篇博文只关注trivy与Harbor集成。
下图是一个overview的对比:
Harbor 可以使用–with-clair安装Clair scanner。其它scanner都需要自己配置。
第一步:安装配置Trivy
github 上介绍的trivy 是安装版,与harbor集成并不能直接使用。与harbor集成需要使用Harbor Scanner Adapter for Trivy。这篇文章也介绍了基于kubernetes的trivy与harbor的集成。我这里介绍的是不基于kubernetes的方式。
docker镜像
aquasec/harbor-scanner-trivy:0.9.0
配置trivy
-
创建一个docker网络,后续的redis与trivy都是用这个网络。网络名与harbor的docker-compose.xml中的网络名相同,这样才能使用内部url互通。当然也可以使用外部地址互通。
$docker network create harbor_harbor
-
使用docker运行一个redis供trivy使用
$docker run --name redis -d --rm --network harbor_harbor redis:5
-
使用docker运行trivy
因为我是内网需要通过代理才能上公网,所以容器启动时加配置proxy的环境变量,NO_PROXY可以参照harbor和clair的no_proxy配置,否则trivy可能连不上harbor。具体可配置的参数这里有个列表
docker run --name trivy-adapter -d --rm \
-p 8181:8181 \
--env HTTP_PROXY='http://192.168.1.2:8080' \
--env HTTPS_PROXY='http://192.168.1.2:8080' \
--env NO_PROXY='.local,portal,clair-adapter,chartmuseum,trivy-adapter,core,redis' \
-e "SCANNER_LOG_LEVEL=trace" \
-e "SCANNER_TRIVY_DEBUG_MODE=true" \
-e "TRIVY_NON_SSL=true" \
-e "SCANNER_API_SERVER_ADDR=:8181" \
-e "SCANNER_STORE_REDIS_URL=redis://redis:6379" \
-e "SCANNER_JOB_QUEUE_REDIS_URL=redis://redis:6379" \
--network harbor_harbor \
aquasec/harbor-scanner-trivy:0.9.0
- trivy使用git下载漏洞库,所以要保证git能够联网,这里根据实际情况配置,比如配置代理。
Harbor 配置
登陆Harbor
选择 Administration -> Interrogation Services -> Scanner
选择New Scanner
这里填写就比较简单了:
Endpoint 这里注意一下是trivy容器的名加端口
填写完之后TEST CONNECTION一下看是否能连通。可以的话点save即可。添加之后可以看到trivy的详细配置信息。
选择trivy,然后算则SET AS DEFAULT,接下来你就可以在Vulnerability菜单中进行全局扫描了。
扫描完成后在Repositories中可以查看到扫描结果。悬停鼠标可以查看一个概要报告。
点击tag可以看到更详细的扫描结果报告。包括CVE的url,可以继续点进去查看详细信息。
至此配置完成,内网环境下可能有连不到github的情况,就会扫描失败,可以通过错误日志查看具体原因。