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.