Harbor – Un docker registry évolué

Dans une approche Cloud Native, les applications sont de plus en plus souvent packagées sous forme d’image docker. Ces images sont ensuite déployées de manière distribuée sur des orchestrateurs de conteneurs comme Kubernetes. Plusieurs solutions de regitry existent sur le marché qu’elles soient publiques ou privées. Docker Hub est un registry public, proposant pour 7$/mois une partie privative. Docker met à disposition une image « registry » gratuitement pour héberger vous même un registry privé. Cependant, ce registry devient vite contraint si vous souhaitez plus que stocker des images.

Découvrez comment Harbor peut devenir une alternative et apporter de la valeur au référencement de vos images docker.

Harbor et les autres

Harbor n’est pas le premier service de registry compatible docker. On peut en citer beaucoup comme Nexus ou Artifactory. Des outils embarquent également leur propre registry comme Gitlab, Rancher ou Openshift afin de faciliter la vie aux developpeurs.

Ce qui différencie Harbor des autres c’est qu’il apporte des fonctionnalités qui sont pour certaines réservées à des éditions payante dans d’autres produits. Je reprends les éléments du site officiel :

  • Support orienté Cloud Natif des images : Docker et Helm
  • Gestion d’accès par Utilisateurs
  • Réplication d’image vers d’autres repositories
  • Scan de vulnérabilité
  • Support LDAP/Active Directory/OpenID
  • Garbage collection des images non utilisées
  • Signature d’image via certificats
  • Interface d’administration
  • API Rest
  • Journal d’audit

Le scan de vulnérabilité et la signature d’image sont des fonctionnalités qu’on ne retrouve pas souvent sur des produits gratuits et sont donc proposés par Harbor.

Et pour couronner le tout, Harbor fait partie de la Cloud Native Computing Foundation qui ajoute de la crédibilité au projet.

Une installation qui pourrait être plus simple

Harbor est disponible au choix via docker compose ou via un paquet Helm, pratique si vous souhaitez le déployer sur un cluster Kubernetes. J’ai installé pour ma part la version docker-compose sur mon Nas Synology pour effectuer quelques tests. Je m’attendais à quelque chose de plus simple, mais rien d’insurmontable.

Après avoir téléchargé la version de votre choix sur le Github officiel, vous êtes invités à dé-taré l’archive et vous retrouvez avec trois éléments

  • Un executable install.sh
  • Un executable prepare
  • Un fichier de configuration harbor.yml

HTTPS de bout en bout

Comme beaucoup d’outil nécessitant une sécurité accrue, Harbor vous demande d’avoir une connexion HTTPS de bout en bout par défaut. Et comme souvent, vous avez déjà un Reverse-Proxy qui termine les connexions SSL et qui communique en HTTP en interne. Harbor peut être configuré pour fonctionner derrière un Reverse Proxy mais sachez qu’il installe lui même un conteneur de reverse proxy pour son propre service. Deux bidouilles seront nécessaires :

  • Demander un paramétrage sur port 443 et faire planter l’installation, car le port est déjà pris
  • Modifier le docker-compose de la partie proxy pour changer le port d’exposition sur votre serveur, exemple 7443

Ensuite, vous paramétrez votre reverse proxy pour taper sur le port HTTPS du reverse proxy d’Harbor. Je n’ai pas essayé d’utiliser le HTTP en interne, mais à priori il faut simplement rediriger vers le port HTTP du reverse proxy d’Harbor.

Le reste de la configuration est standard même si non indiqué dans la doc officielle. Vous devrez paramétrer le nom d’hôte d’écoute, le dossier de référence des données, les différents scripts se baseront dessus pour les éléments de configuration comme l’emplacement des logs ou des certificats.

Une fois l’ensemble paramétré et lancé (avec la commande –with-clair), vous pouvez accéder à l’IHM via le nom d’hôte indiqué.

Portail d'administration
L’interface d’administration d’Harbor

Projet, permission et c’est parti

Une fois sur l’interface vous pouvez paramétrer un nouveau projet. Le nom du projet sera à concaténer à la fin de l’adresse d’Harbor pour pousser les différentes images docker sur le registry.

tableau de bord projet
Le tableau de bord vous indique l’adresse à utiliser

Dans la capture ci dessus j’ai donc poussé deux images docker : workload2 et workload3. Ces images font partie du projet « my_project » et ne seront accessibles au pull que pour les membres du projet.

erreur terminal non authentifié
Interdiction de pull une image si non authentifié

Le scan de vulnérbilité pour tous

Une des features vraiment appreciable dans ce logiciel gratuit est le scan de vulnérabilité. En effet il est de plus en plus courant d’hériter d’images diverses et variées pour les besoins d’un projet. Bien que les Dockerfile soient disponibles et permettent de vérifier que cette image ne pose pas de problème de détournement de données, il est rare de voir directement les versions des librairies embarquées. De plus si vous deviez chercher dans la base CVE les problèmes pour chaque version de chaque librairie la perte de temps serait enorme. Heureusement, Harbor vous fait un état des lieux en quelques secondes.

une image avec des vulnérabilités hautes
Les informations importantes à portée de main

Sur cette image docker, Harbor m’indique une vulnérabilité élevée avec un total de 11 problèmes qui peuvent être tous corrigés. En cliquant sur le numéro du tag, voyons les détails :

liste des vulnérabilités de l'image
Un tableau de bord des vulnérabilités complet

Ce tableau de bord montre l’ensemble des éléments importants dans le scan de vulnérabilité.

  • Quelle librairie est concernée
  • Dans quelle version nous sommes
  • Dans quelle version la vulnérabilité est corrigée
  • La sévérité
  • Un lien vers la CVE pour le détail.

Le test d’Harbor me permet donc de découvrir que mon Dockerfile pour mes applications Springboot n’est pas super fiable niveau sécurité et pourtant, j’étends une image officielle openjdk-8. Oui mais contrairement aux images standards, une version alpine qui elle n’a pas été mise à jour depuis plusieurs mois. En changeant l’image de base pour la version 8-openjdk-slim sur workload3, le résultat est plus rassurant :

image avec faible vulnérabilité
Peu de risques avec cette image

Vous pouvez paramétrer le scan automatiquement à chaque push d’image, mais aussi sécuriser votre environnement en interdisant le pull d’image à risque.

paramétrage protection téléchargement image vulnérable
Ajoutez une couche de sécurité en interdisant la récupération d’image vulnérable
terminal refus du pull sur une image vulnérable
Interdiction de pull l’image

Notarisation de vos images

Docker vous permet de paramétrer une liste de confiance associant serveur et certificat via le système DCT Docker Content Trust. Docker téléchargera uniquement les images signée une fois ce système activé. Harbor permet de configurer un agent de notarisation qui va signer les images uploadées (avec le certificat fourni à l’installation). La chaine de confiance sera établie de bout en bout une fois ce certificat paramétré sur les postes clients.

Pour conclure…

Si vous souhaitez un registry docker qui peut être mis en place relativement rapidement et proposant des fonctionnalités à forte valeur ajoutés Harbor est un candidat idéal. Les contrôles d’accès RBAC, Garbage collector, scan de vulnérabilité et signature de vos proposes images accroissent la sécurisation de votre workflow. De plus, l’interface est agréable et les fonctionnalités accessibles via une API Rest.

Une réponse sur “Harbor – Un docker registry évolué”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.