Обзор Harbor. Реестр Docker образов с организацией прав доступа и сканированием образов на наличие угроз

Kate

Administrator
Команда форума
В основе концепции Docker лежит такое понятие как образ. В терминологии Docker образ — это исполняемый файл (шаблон), в котором содержится исходный код приложения, его библиотеки и все самое необходимое для запуска контейнера. Готовые образы хранятся в реестрах. Один из самых известных и в тоже время общедоступных реестров — это Docker Hub, официальный реестр от разработчиков Docker. Однако существуют сторонние продукты, которые значительно расширяют функционал реестров, например, путем использования прав доступа и сканирования образов на наличие уязвимостей. Одним их таких продуктов является Harbor.

Harbor — это бесплатный реестр для хранения Docker образов c открытым исходным кодом, который предоставляет доступ к образам с помощью политик, а также умеет сканировать образы на наличие уязвимостей. Проект был запущен в 2016 году силами командой инженеров из компании VMware. В 2018 году Harbor перешел под контроль организации CNCF и с тех пор активно развивается — новые версии стабильно выходят по несколько раз в месяц.

Установка Harbor​

Установить Harbor можно двумя способами:

При помощи онлайн-установщика — в этом случае все необходимые образы будут скачаны с Docker Hub. Данный способ подходит, только если есть доступ в интернет.

При помощи оффлайн-установщика — в этом случае все необходимые образы уже присутствуют, однако, они занимают больше места, чем при использовании онлайн-установщика. Подходит для случаев, когда нет доступа к сети.

Перед установкой необходимо проверить, чтобы на хосте присутствовало следующее ПО с необходимыми версиями:

Docker версии 17.06.0 и выше;

Docker Compose версии 1.18.0 и выше;

OpenSSL актуальной версии.

Также заранее нужно сгенерировать HTTPS сертификаты, которые необходимы для использования в репозиториях Harbor. Можно использовать как сертификаты, которые подписаны доверенным центром сертификации, так и использовать самоподписные сертификаты. Инструкция по созданию сертификатов описана в этом разделе.

Установка Harbor будет производиться на ОС Ubuntu 22.04.1 в редакции LTS и при помощи онлайн-установщика с последней актуальной версией2.6.2. Для начала необходимо скачать архив с установщиком.

wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-online-installer-v2.6.2.tgz
Далее разархивировать скачанный архив:

tar -xzvf harbor-online-installer-v2.6.2.tgz
Перейти в созданную директорию:

cd harbor
В директории будет присутствовать конфигурационный файл с именем harbor.yml.tmpl. Прежде чем приступить к его редактированию, необходимо переименовать его в harbor.yml:

mv harbor.yml.tmpl harbor.yml
Далее необходимо его открыть и внести следующие правки:

nano harbor.yml.tmpl
В параметре hostname задаем IP-адрес или имя хоста, на котором будет находиться веб-интерфейс Harbor.

В параметре certificate прописываем полный путь до файла с сертификатом с расширением .crt

В параметре private_key прописываем полный путь до файла с закрытым ключом с расширением .key

cbae1a526c4d195969f2dde3d2a2ac5c.png

По желанию можно изменить такие параметры, как порты веб-интерфейса (директивы http и https с параметром port), пароль от базы данных (директива database, параметр password) и т. д. Каждый параметр в конфигурационном файле подробно описан. После того как необходимые изменения внесены, следует сохраниться и закрыть файл.

Далее в статье будет описан функционал сканирования образов при помощи сканера безопасности Trivy. Trivy уже включен в состав Harbor в виде отдельного образа и для его интеграции в Harbr необходимо включить опцию --with-trivy в команду установки (см. ниже).

После этого запускаем установочный скрипт:

sudo ./install.sh --with-trivy
5272a42d89f17c60cae12791e7a4b10d.png

Установка в среднем занимает не более 5 минут. После того как все образы будут скачаны и запущены, в терминале отобразится фраза:

Harbor has been installed and started successfully.

1ad08952c45e39d97d914fd7ddf69dc6.png

Также можно проверить статус запущенных контейнеров:

docker ps
48c09c31dbb62be9981de5f30284609f.png

Обзор функций Harbor​

Чтобы попасть в веб-интерфейс Harbor, необходимо в браузере ввести имя хоста или IP-адрес сервера, который был задан в конфигурационном файле harbor.yml. Логин по умолчанию — admin, пароль — Harbor12345.

de94b493f4d195f0dcd31b7a9414e46f.png
293e970f38becefa1988c2cd1786878a.png

Для начала создадим нового пользователя, который будет использоваться для работы с реестром. Для этого в меню слева переходим в раздел Users, далее нажимаем на кнопку NEW USER:

aa4329c35541a0c3f4c0291be24c6a65.png

В качестве параметров необходимо задать следующие:

Username — имя пользователя;

Email — адрес электронной почты;

First and last name — Имя и фамилия пользователя;

Password — придумать пароль;

Confirm Password — повторить ввод пароля.

27ada629217af14755e529448e1ff89c.png

Далее необходимо создать новый проект. Harbor использует термин «Проект» для разграничения прав доступа к репозиториям. Проекты позволяют легко управлять пользователями и их ролями. Близкий термин для проектов — это группы пользователей, подобно группам в операционных системах. Для добавления нового проекта в левом меню выберите раздел Projects и в открывшемся окне нажмите на кнопку NEW PROJECT:

b1b24c321da3cd6c4f412274601351b7.png

В качестве параметров необходимо задать:

Project Name: имя проекта;

Access Level: если поставить галочку напротив Public, то к репозиторию смогут подключаться все пользователи, и не надо предварительно авторизоваться в нем (использовать команду docker login).

f8ade027c3926defc3ff4841498b69fc.png

После того как проект был создан, необходимо перейти в него, добавить ранее созданного пользователя и назначить ему необходимые права. Для этого переходим в раздел Members и нажимаем на кнопку USER:

f6d3a541dd1099b3ded5287b4f1f174d.png

В открывшемся окне вводим имя нужного пользователя, который уже был создан ранее на этапе создания пользователя. В данном случае это пользователь с именем user1:

7944cdf6ac3fc47755c51396611f7676.png

В параметре Role необходимо выбрать роль, которая будет присвоена пользователю. Harbor использует 5 типов ролей:

Project Admin;

Maintainer;

Developer;

Guest;

Limited Guest

Где роль Project Admin обладает максимальными правами, в то время как роль Limited Guest обладает самыми минимальными возможностями в системе. С полным списком всевозможных прав в Harbor можно ознакомиться в соответствующем разделе документации.

Посмотреть список всех пользователей с ролями репозитория можно в разделе Summary:

a3577fbd09cb8a10cc4f1b4f663cd4cb.png

Если перейти в раздел Repositories, то справа можно найти кнопку PUSH COMMAND:

67e5117d45890a52bc9fea73746a89b7.png

Если нажать на нее, то отобразится шпаргалка по команде push, т. е. описаны действия по загрузке образа в репозиторий:

50af0ba71cfe1c2d75436c96442aac28.png

Помимо образов Docker, Harbor также поддерживает загрузку образов Helm и CNAB. Попробуем загрузить какой-нибудь образ Docker в ранее созданный репозиторий с именем my_project.

Для начала требуется установить корневой самоподписной сертификат, который был сгенерирован ранее. Если этого не сделать, то при попытке выполнения команды docker login возникнет ошибка x509: certificate signed by unknown authority,которая означает, что сертификат подписан неизвестным УЦ. Если сертификат выпущен доверенным УЦ, то устанавливать корневой сертификат не нужно. Для установки корневого самоподписного сертификата необходимо выполнить следующие шаги:

1) Установить пакет ca-certificates если он не установлен в системе:

sudo apt -y install ca-certificates
2) Скопировать корневой сертификат с расширением .crt в директорию /usr/local/share/ca-certificates:

sudo cp harbor.crt /usr/local/share/ca-certificates
3) Произвести установку сертификата:

sudo update-ca-certificates
Далее необходимо авторизоваться в реестре выполнив команду:

docker login harbor-test.com
1c2789c0c9b9587f4994b58cd81ad140.png

Где harbor-test.com адрес, на котором располагается Harbor. Пользователь уже должен заранее присутствовать в репозитории. В качестве примера будет использоваться образ alpine. Перед отправкой образа в репозиторий ему необходимо присвоить тег:

docker tag alpine:latest harbor-test.com/my_project/alpine:alpine_new
85948d4e5dacba4d889f5134dce8bb0f.png

После того как тег присвоен, можно выполнять push, т.е. отправлять образ в репозиторий:

docker push harbor-test.com/my_project/alpine_new
b13078ec796b8b65190525bd803d409c.png

Перейдем в веб-интерфейс репозитория и убедимся, что образ успешно загрузился:

ea52ac4a803c18094343a2ec8b4495f5.png
58f45d92e3e9c6a35810f4ef1c9bcb8e.png

Как видно на скриншотах выше, был создан репозиторий с именем alpine, в котором присутствует артефакт с именем alpine_new. Также можно посмотреть подробную информацию о загруженном образе:

28940711f4d1a37ccaa6a3817cef62ba.png

Сканирование образов на наличие уязвимостей при помощи сканера Trivy​

В Harbor присутствует возможность сканировать образы на наличие уязвимостей. В качестве сканеров безопасности поддерживаются Trivy и Clair. Так как на этапе установки был установлен именно Trivy, то рассмотрим именно его.

Trivy представляет собой сканер безопасности, который умеет искать уязвимости не только в образах Docker, но также и в файловых системах, git репозиториях, в кластерах Kubernetes. Для поиска уязвимостей Trivy использует собственную БД под названием trivy-db. Проект разрабатывается и поддерживается компанией Aqua Security. Trivy проект с открытым исходным кодом.

В веб-интерфейсе Harbor в меню слева присутствует отдельный раздел под названием Interrogation Services, в котором собраны все сторонние подключенные сервисы. В данном разделе можно найти всю подробную информацию о подключенном сервисе:

c7729cf276fa6ad6ef228225d5ae81f0.png

Для того чтобы просканировать образ, необходимо перейти в раздел Projects, далее выбрать нужный проект и образ, который должен быть просканирован. Чтобы запустить сканирование, поставьте галочку слева — напротив нужного образа и нажмите на кнопку SCAN:

8be96c0178fb65f6bd16d8141f22cb7a.png

Начнется процесс сканирования. Если в образе не найдены уязвимости, то отобразится зеленая строка с надписью No vulnerability:

7e5072c869ca365910191ecabacbe7d4.png

Если уязвимости были найдены, то в пункте Vulnerabilities отобразится их общее количество. Если навести курсор мыши на строку с количеством найденных уязвимостей, то отобразится мини-график, на котором будут подсчитаны уязвимости по типу критичности. В Trivy используются 4 типа критичности уязвимостей в образах — Critical, High, Medium, Low:

e71db233a8d776de14f74eb9abb07a12.png

Если нажать на хэш-функцию образа, то будет отображен подробный отчет о каждой найденной уязвимости:

01fd69acaab113f0b570f44665f19c19.png

При переходе по ссылке из имени уязвимости, откроется сайт aqua vulnerability database, где можно найти еще более подробное описание уязвимости, а также способы её устранения:

f3294952df9e287c4be17b3018a4509b.png

Harbor представляет собой более продвинутый и более функциональный реестр — по сравнению с такими реестрами, как Docker Hub и Quay. Помимо организации доступа к репозиториям, Harbor поставляется со сканером безопасности, что немаловажно. Также стоит отметить, что Harbor полностью бесплатный и все функции уже доступны сразу.

 
Сверху