Expandiendo Harbor con un Panel de Seguridad
Una presentación rápida de Harbor
Harbor es un registry (un registro de imágenes de contenedores) de código abierto (desarrollado por la CNCF) que sirve para almacenar, firmar y escanear imágenes de forma segura.
Es uno de los mejores Registry que podeis instalar para tener on-premise todas vuestras imágenes de contenedores.
Características principales
- Seguridad y análisis: Escanea las imágenes en busca de vulnerabilidades (con herramientas como Trivy) y permite la firma digital de artefactos.
- Control de acceso (RBAC): Gestiona usuarios, roles y permisos por proyectos.
- Replicación: Sincroniza o copia imágenes automáticamente entre diferentes registros (incluyendo Docker Hub).
- Compatibilidad con Docker: Permite realizar operaciones estándar como
docker login,docker tag,docker pushydocker pull.
Requisitos mínimos de instalación
- Docker Engine (versión 20.10 o superior)
- Docker Compose (versión 2.3 o superior)
- Hardware: Mínimo 2 CPU y 4 GB de RAM [1]
Puedes consultar la documentación oficial o descargar el proyecto en la página de Harbor o a través de su repositorio en GitHub - goharbor/harbor.
Ampliamos la funcionalidad de Harbor
Hoy no vamos a ver como se instala Harbor, ni como se usa, ya que hay suficientes manuales de Internet que podeis seguir para instalarlo o aprender a usarlo.
Hoy nos vamos a centrar en su parte de CiberSeguridad en lo que concierne a toda la parte de Vulnerabilidades que puede detectar Harbor y en algunas limitaciones de este potente herramienta.
La parte de detección de vulnerabilidades de todas las imágenes que están almacenadas en Harbor corre por defecto a cargo de la herramienta Trivy, un estandar en la gestion de vulnerabilidades para imagenes docker.
Harbor a su vez dispone de un panel muy avanzado denominado Interrogation Services

En el se pueden configurar multiples herramientas de escaneo de vulnerabilidades como por ejemplo:
- Trivy
- Clair
- Anchore (Grype / Syft)
- JFrog Xray
- Wiz y Chainguard
Una vez configurada cualquiera de ellas podemos ya empezar a ver desde Harbor las vulnerabilidad, CVEs, librerias afectadas, un resumen de las mayores criticidades, etc que afectan a las imágenes de contenedores que gestionamos.



Limitaciones de este panel
El funcionamiento del panel es maravilloso, totalmente funcional, super intutivo y muy práctico.
Pero solo es accesible mediante un usuario administrador
A pesar de que Harbor funciona perfectamente con usuarios y grupos ya sean locales, de LDAP o de Directorio activo para la gestión de los proyectos, no dispone de una gestión de Roles para habilitar a otros usuarios el acceso a este panel.
Los administradores y encargados de las gestión de Harbor, pueden no ser en una empresa los mismos que estén encargados de la Seguridad con lo que el compartir permisos de administración puede ser complicado o no necesario.
Ampliar el potencial de Harbor
Harbor dispone de una API y un Swagger completo al que se puede acceder para ampliar las accciones que se puede realizar con Harbor.
De esta forma mediante llamadas a la API, usuarios con autenticación y permisos en sus proyectos pueden crearse consultas sobre la seguridad de sus imágenes, vulnerabilidades, CVEs o librería comprometidas.
Sin embargo no es una forma cómodo o práctica el revisar visualmente el resultado de un fichero JSON por parte de los usuarios.
Así que ante la necesidad que cualquier usuario autenticado pueda revisar o buscar vulnerabilidades en todas las imagenes de sus proyectos, se me ocurrió el crear una herramienta que realice las mismas funciones que el panel de Interrogation Services
Harbor Security Portal
Este es el nombre que he puesto a esta herramienta que permite realizar mediante llamadas a la API las mismas tareas de CiberSeguridad que permite Interrogation Services internamente desde Harbor.

El desarrollo está realizado unicamente usando codigo HTML y JavaScript y todo está en una única página Web.
Para mantener la estética de Harbor y parezca una extensión del mismo he usado TailWindCSS, que permite darle un aspecto personalizado a la página web resultante.
Además hay dos versiones que aunque comparten el mismo código permiten "entornos" diferentes.
harbor-security-portal.htmlEsta pagina web usa CDN para incluir todo los CSS necesarios, para que funcione correctamente tiene que tener conexión a internet.harbor-security-local.htmlEsta pagina web se apoya en variosassetsque hay que copiar junto al codigo html. Esta pagina no necesita salida a internet y puede funcionar de forma interna en cualquier organización.
Con la página web publicada, ya sea mediante Apache, Nginx o cualquier servidor de paginas web solo hay que usar la que mejor se adapte a nuestra organización y pulsar sobre Ajustes de API

En esta ventana de configuración indicamos:
- URL de Harbor: Escribiremos la URL de nuestro servidor Harbor. No hace falta indicar la ruta de la API ya que la completa la aplicación
- Usuario/Robot: Podemos usar cualquier usuario registrado o incluso una cuenta de tipo
robot. Dependiendo de los proyectos a los que pueda acceder el usuario así de acotado estará el resultado de la lista de vulnerabilidades. - Contraseña/Token: Dependiendo de si es un usuario o robot escribiremos la password o secret necesario para logarnos en Harbor y usar su API
La aplicación nos permite Guadar las Credenciales de acceso en el localStorage de nuestro navegador y borrarlas cuando no las necesitemos. Si no marcarmos el check de Guardar credenciales solo se usarán en la sesión actual, en cada refresco del navegador hay que volver a introducirlas.
Si la aplicación no consigue conectar a la API con los datos suministrados se queda en Modo Simulación
Desde la ventana principal tienes la opción de Ver que permite visualizar un detalle de la vulnerabilidad

Ademas he incluido un panel de filtrado y busqueda identico al que tiene el propio Harbor en su Integration Services:

URI de Acceso y CORS
Harbor permite que se realicen consultas "normales" a su API, por ejemplo mediante llamadas curl, pero no permite que una página web realice consultas directamente sobre la API si no está en el mismo dominio ya que tiene implementado Access-Control-Allow-Origin dando errores de tipo CORS
Para que puedas usar esta herramienta desde cualquier PC de tu organización y no tengas problemas con CORS (Cross-Origin Resource Sharing, o Intercambio de Recursos de Origen Cruzado) hay una solución y es crear y usar tu propio proxy mediante un simple script en Python.
El esquema del funcionamiento del proxy para evitar el error de tipo CORS sería el siguiente:

El código del proxy se llama proxy-habor.py para que funcione en tu organización debes de cambiar la línea que pone HARBOR_URL=.... por la url de tu servidor Harbor

Copia, renombra o crea un link de la pagina harbor-security-xxxx.html como index.html
y lugeo simplemente inicialo mediante Python de la siguiente forma:
python3 proxy-harbor.pyComo has iniciado un proxy local, accede mediante tu navegador a la URL http://localhost:8080 y cuando se abra la página web vete de nuevo a la parte de Ajustes de API en vez de la URL de Harbor escribe:http://localhost:8080 en la configuración.
Descarga del código
Tienes todo el código disponible en mi servidor Gitea: https://gitea.soloconlinux.org.es/luisgulo/harbor-security