离线环境harbor开启Trivy扫描
离线环境harbor开启Trivy扫描
Harbor自带Trivy扫描器,可以用来扫描仓库中的镜像是否有漏洞。开启仅需要运行命令sudo ./install.sh --with-trivy即可。但是Trivy默认要联网下载数据库,国内服务器完全连不上它的数据库网址,然后下载失败。
总体思路是在别的电脑上先下载所需要的文件,然后通过scp上传到服务器上,解压后放在Trivy挂载的文件夹里面。
下载db和java-db文件
我们需要Trivy DB v2,这里选择用Oras CLI进行下载。
根据Oras官网安装文档,选择通过Docker下载。
1 | docker pull ghcr.io/oras-project/oras:v1.3.0 |
这里需要用wsl或者linux运行命令:1
2docker run -it --rm -v $(pwd):/workspace ghcr.io/oras-project/oras:v1.3.0 pull ghcr.io/aquasecurity/trivy-db:2
docker run -it --rm -v $(pwd):/workspace ghcr.io/oras-project/oras:v1.3.0 pull ghcr.io/aquasecurity/trivy-java-db:1
这两条指令会在当前文件夹下通过oras镜像下载两个压缩包,分别是db.tar.gz和javadb.tar.gz。
下载完后通过scp命令上传到服务器上并解压即可,解压完后应该是db和javadb两个文件夹,需要将javadb改名为java-db。
关闭trivy自动更新
在harbor.yml文件里找到trivy的配置:1
2
3skip_update: true
skip_java_db_update: true
offline_scan: true
然后在harbor文件夹下运行:1
2sudo docker compose down
sudo docker compose up -d
将文件放在挂载目录
harbor会自动将自己默认存储位置挂载到trivy镜像里面,
如何查看Trivy挂载的文件位置:1
docker inspect <trivy容器ID> | grep -A5 Mounts
会有类似输出:1
2
3
4
5
6"Mounts": [
{
"Type": "bind",
"Source": "/home/harbor/data/trivy-adapter/trivy",
"Destination": "/home/scanner/.cache/trivy",
"Mode": "rw",
因为我将harbor默认存储位置改为了data_volume: /home/harbor/data,所以查到的Source是/home/harbor/data/trivy-adapter/trivy,data文件夹下默认是没有文件夹的,我们要先创建trivy-adapter/trivy文件夹。
然后将db和java-db拷贝进去。
1 | 假设你当前在 /home/yourname/trivy |
最终文件结构:1
2
3
4
5
6
7/home/yourname/harbor/data/trivy-adapter/trivy/
├── db
│ ├── trivy.db
│ └── metadata.json
├── java-db
├── trivy-java.db
└── metadata.json
拷贝完trivy应该能正常工作了。如果有问题的话有可能是文件的权限问题。
PS: 封面来自这里



