vmware

Harbor: registro y escaner de vulnerabilidades de imágenes Docker

Harbor es un proyecto de VMware Opensource. se trata de un repositorio de imágenes docker que añade al clásico registry la posibilidad de firma digital y escaneo de vulnerabilidades de imágenes. El proyecto tiene la documentación aquí La parte interesante del proyecto es la integración con otras herramientas como Notary, Clair o Chart Repository.

En esta guía se muestra la instalación paso a paso de Harbor 2.0.5 sobre CenOS 8.3, añadiendo el escaner de vulnerabilidades Trivy

He compartido un script de instalación en VMware {code}, puedes descargarlo aquí https://code.vmware.com/samples?id=7504

Harbor requiere tener instalado
Docker Version 17.06.0-ce+ or higher
Docker-compose Version 1.18.0 or higher

y que el server tenga los siguientes recursos:

2 CPU
4 Gb de RAM

el proceso de instalar Docker sobre CentOS:

sudo yum install -y yum-utils

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install docker-ce docker-ce-cli containerd.io

sudo systemctl start docker
sudo systemctl enable docker

la versión instalada es: docker-ce-20.10.0-3.el8.x86_64

Instalamos la última versión de docker-compose

curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

la versión instalada es: docker-compose version: 1.27.4

descargamos Harbor:

wget https://github.com/goharbor/harbor/releases/download/v2.0.5/harbor-online-installer-v2.0.5.tgz
tar xvf harbor-online-installer-v2.0.5.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml

editamos el fichero: harbor.yml, donde se especifica el hostname y desactivo HTTPS ya que no va a tener un acceso público:

hostname: harbor.nosolovirtual.com

# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80

# https related config
#https:
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path

en la lína 39 cambiar la password por defecto.

ahora procedemos a instalar Harbor junto con Trivy, que es un escaner de vulnerabilidades. el escaner de vulnerabilidades por defecto según la documentación oficial es Clair, pero considero que este escaner ofrece un mejor reporte.

sh install.sh --with-trivy

el proceso de instalación crea las siguientes imágenes:

REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/redis-photon v2.0.5 a40e09b517fb 4 days ago 72.3MB
goharbor/trivy-adapter-photon v2.0.5 78902dc64fac 4 days ago 109MB
goharbor/harbor-registryctl v2.0.5 dde6e173bbce 4 days ago 101MB
goharbor/registry-photon v2.0.5 fa2de59499de 4 days ago 83.7MB
goharbor/nginx-photon v2.0.5 6b18b703f925 4 days ago 43.7MB
goharbor/harbor-log v2.0.5 c8ff0b206fe1 4 days ago 106MB
goharbor/harbor-jobservice v2.0.5 7108530413a5 4 days ago 166MB
goharbor/harbor-core v2.0.5 1c0705c0aefe 4 days ago 145MB
goharbor/harbor-portal v2.0.5 a7ee97f05708 4 days ago 52.5MB
goharbor/harbor-db v2.0.5 cc363af3b4de 4 days ago 172MB
goharbor/prepare v2.0.5 d287f21ea214 4 days ago 161MB

Añadimos una excepción para que el servicio de docker pueda utilizar un registry sin HTTPS:

crear el fichero /etc/docker/daemon.json con el siguiente contenido:

{
“insecure-registries” : [“harbor.nosolovirtual.com:5000”, “0.0.0.0”]
}

reiniciamos el servicio de Docker:

sudo systemctl restart docker

Levantamos el proyecto Harbor:

[root@centos8 harbor]# docker-compose up -d
harbor-log is up-to-date
harbor-db is up-to-date
redis is up-to-date
harbor-portal is up-to-date
registryctl is up-to-date
Starting registry …
Starting registry … done
Starting harbor-core … done
Starting nginx …
Starting nginx … done

Harbor se compone de los siguientes containers en el sistema:

Previamente configuramos un fichreo de configuración de Harbor indicando la URL  harbor.nosolovirtual.com, accdemos al interfaz web:

Vertificar que el complento Trivy esté operativo:

Puedes crear un proyecto nuevo, o bien acceder a library para albergar imagenes dentro:

en la parte derecha se muestra un resumen de comandos para importar una imagen a Harbor.

Descargo una imagen de ubuntu oficial, para hacer un análisis de vulnerabilidades:

docker pull ubuntu

en concreto es la versión latest 21.04

tageamos la imagen:

docker tag ubuntu harbor.nosolovirtual.com/library/ubuntu

hacemos login en nuestro Harbor:
[root@centos8 harbor]# docker login http://harbor.nosolovirtual.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

y ahora si podemos subir la imagen

docker push harbor.nosolovirtual.com/library/ubuntu
Using default tag: latest
The push refers to repository [harbor.nosolovirtual.com/library/ubuntu]
f6253634dc78: Pushed
9069f84dbbe9: Pushed
bacd3af13903: Pushed
latest: digest: sha256:4e4bc990609ed865e07afc8427c30ffdddca5153fd4e82c20d8f0783a291e241 size: 943

en la sección Additions se muestra la ejecución del escaner y en “Construir Historia” se puede visualizar los comandos que se han utilizado para construir la imagen:

Procedemos a ejecutar un scaneo sobre la imagen:

y este es el resultado del escaner de la imagen oficial de ubuntu:

En resumen, 6 vulnerabilidades nivel medio y 15 nivel bajo. Además, sobre 2 vulnerabilidades se muestra la versión en la cual se ha corregido la incidencia.

Una vez realizado el escaner también se muestra un resumen sobre el proyecto:

Harbor es un registro bastante interesante, con un buen interfaz gráfico e integración con software de terceros que hace que la herramienta tenga un resultado profesional.