将漏洞数据导入离线 Harbor 实例

Clair 已在 Harbor v2.2 中移除作为默认漏洞扫描器。强烈建议您配置 Trivy 作为默认扫描器。如果您想在 v2.2 及更高版本中继续使用 Clair,您必须将其配置为外部扫描器

如果 Harbor 安装在没有互联网连接的环境中,Clair 无法从公共漏洞数据库中获取数据。在这种情况下,Harbor 管理员必须手动更新 Clair 数据库。

准备工作

  • 您需要有一个连接到互联网的 Clair 实例。如果您有另一个可以访问互联网的 Harbor 实例,这也适用。

  • 检查您的 Clair 实例是否已将其漏洞数据库更新到最新版本。

    1. 使用 docker ps 找出 Clair 服务的容器 ID。
    2. 运行 docker logs <container_id> 以检查 Clair 容器的日志。如果您正在使用 Harbor,您可以在 /var/log/harbor/2017-xx-xx/clair.log 下找到最新的 Clair 日志。
    3. 查找如下所示的日志
    Jul 3 20:40:45 172.18.0.1 clair[3516]: {"Event":"finished fetching","Level":"info","Location":"updater.go:227","Time":"2017-07-04 03:40:45.890364","updater name":"rhel"}
    Jul 3 20:40:46 172.18.0.1 clair[3516]: {"Event":"finished fetching","Level":"info","Location":"updater.go:227","Time":"2017-07-04 03:40:46.768924","updater name":"alpine"}
    Jul 3 20:40:47 172.18.0.1 clair[3516]: {"Event":"finished fetching","Level":"info","Location":"updater.go:227","Time":"2017-07-04 03:40:47.190982","updater name":"oracle"}
    Jul 3 20:41:07 172.18.0.1 clair[3516]: {"Event":"Debian buster is not mapped to any version number (eg. Jessie-\u003e8). Please update me.","Level":"warning","Location":"debian.go:128","Time":"2017-07-04 03:41:07.833720"}
    Jul 3 20:41:07 172.18.0.1 clair[3516]: {"Event":"finished fetching","Level":"info","Location":"updater.go:227","Time":"2017-07-04 03:41:07.833975","updater name":"debian"}
    Jul 4 00:26:17 172.18.0.1 clair[3516]: {"Event":"finished fetching","Level":"info","Location":"updater.go:227","Time":"2017-07-04 07:26:17.596986","updater name":"ubuntu"}
    Jul 4 00:26:18 172.18.0.1 clair[3516]: {"Event":"adding metadata to vulnerabilities","Level":"info","Location":"updater.go:253","Time":"2017-07-04 07:26:18.060810"}
    Jul 4 00:38:05 172.18.0.1 clair[3516]: {"Event":"update finished","Level":"info","Location":"updater.go:198","Time":"2017-07-04 07:38:05.251580"}
    

短语 finished fetching 表示 Clair 已完成从端点获取漏洞更新的一轮。确保所有 rhelalpineoracledebianubuntu 端点都已正确更新。如果它们尚未更新,请等待 Clair 获取数据。

转储漏洞数据

  1. 登录到连接到互联网的主机,Clair Postgres 数据库在该主机上运行。

  2. 通过运行以下命令转储 Clair 的漏洞数据库。

    容器名称 clair-db 是互联网连接的 Clair 实例使用的数据库容器的占位符。
    $ docker exec clair-db /bin/sh -c  "pg_dump -U postgres -a -t feature -t keyvalue -t namespace -t schema_migrations -t vulnerability -t vulnerability_fixedin_feature" > vulnerability.sql  
    $ docker exec clair-db /bin/sh -c "pg_dump -U postgres -c -s" > clear.sql
    

文件 vulnerability.sqlclear.sql 已生成。

备份 Harbor Clair 数据库

在导入数据之前,强烈建议备份 Harbor 中的 Clair 数据库。

docker exec harbor-db /bin/sh -c  "pg_dump -U postgres -c" > all.sql

更新 Harbor Clair 数据库

  1. vulnerability.sqlclear.sql 文件复制到运行 Harbor 的主机上。

  2. 运行以下命令将数据导入到 Harbor Clair 数据库

    docker exec -i harbor-db psql -U postgres < clear.sql  
    docker exec -i harbor-db psql -U postgres < vulnerability.sql
    

重新扫描镜像

导入数据后,在 Harbor 界面中触发扫描过程。有关运行扫描的信息,请参阅扫描所有镜像