Harbor – реджестри образов в Kubernetes (сканирование образов)

Thank you for reading this post, don't forget to subscribe!

Harbor – это облач­ный реестр с откры­тым исход­ным кодом, кото­рый хра­нит, под­пи­сы­ва­ет и ска­ни­ру­ет обра­зы кон­тей­не­ров на нали­чие уязвимостей.

Это руко­вод­ство пока­жет вам как уста­но­вить Harbor Image Registry в Kubernetes / OpenShift с помо­щью чар­та Helm.

Вот неко­то­рые из инте­рес­ных осо­бен­но­стей реест­ра обра­зов Harbour:

Особенности Harbour

  • Под­держ­ка Multi-tenant
  • Под­держ­ка ана­ли­за без­опас­но­сти и уязвимостей
  • Рас­ши­ря­е­мый API и веб-интерфейс
  • Под­пи­са­ние и про­вер­ка контента
  • Репли­ка­ция обра­зов в несколь­ких экзем­пля­рах Harbour
  • Инте­гра­ция и кон­троль досту­па на осно­ве ролей

Helm – это инстру­мент интер­фей­са команд­ной стро­ки (CLI), создан­ный для упро­ще­ния раз­вер­ты­ва­ния при­ло­же­ний и сер­ви­сов в кла­сте­рах Kubernetes / OpenShift 

Helm исполь­зу­ет фор­мат упа­ков­ки, назы­ва­е­мый чартами.

Чарт Helm – это набор фай­лов, опи­сы­ва­ю­щих ресур­сы Kubernetes.

Шаг 1: Установка Helm 3 на Linux / macOS

Helm име­ет бинар­ник, что озна­ча­ет, что для его уста­нов­ки на вашем ком­пью­те­ре Linux / macOS не тре­бу­ет­ся ника­ких зависимостей:

Про­верь­те уста­нов­лен­ную версию:

Шаг 2: Установите чарт Harbor в Kubernetes / OpenShift кластере

Чарт – это пакет Helm.

Он содер­жит все опре­де­ле­ния ресур­сов, необ­хо­ди­мые для запус­ка при­ло­же­ния, инстру­мен­та или служ­бы внут­ри кла­сте­ра Kubernetes.

Добавь­те репо­зи­то­рий Harbour Helm:

Обно­ви­те репозиторий:

Настройка чарта

Эле­мен­ты кон­фи­гу­ра­ции могут быть уста­нов­ле­ны с помо­щью фла­га –set во вре­мя уста­нов­ки или настро­е­ны путем непо­сред­ствен­но­го редак­ти­ро­ва­ния values.yaml.

Вы може­те ска­чать файл values.yaml по умолчанию.

Уста­но­ви­те чарт Harbor с поль­зо­ва­тель­ски­ми настрой­ка­ми после вне­се­ния изменений.

Про­верь­те ста­тус, что­бы под­твер­дить его развертывание:

Исправление инициализации:CrashLoopBackOff в поде harbor-harbor-database на OpenShift

Неко­то­рые обра­зы кон­тей­не­ров, такие как postgres и redis, тре­бу­ют руто­во­го досту­па и име­ют опре­де­лен­ные ожи­да­ния отно­си­тель­но вла­де­ния томами.

Нам нуж­но осла­бить без­опас­ность в кла­сте­ре, что­бы обра­зы не запус­ка­лись как пред­ва­ри­тель­но выде­лен­ный UID, не предо­став­ляя всем доступ к при­ви­ле­ги­ро­ван­но­му SCC:

Предо­ставь­те всем аутен­ти­фи­ци­ро­ван­ным поль­зо­ва­те­лям доступ к anyuid SCC:

Про­верь­те ста­тус ваших развертываний:

Про­верь­те ста­тус  подов:

Посмот­ри­те послед­ние создан­ные сер­ви­сы и ингрессы:

Посколь­ку я на самом деле делаю это раз­вер­ты­ва­ние в OpenShift, у меня будут созда­ны опре­де­лен­ные маршруты.

Так­же создан ряд pvc!
Под­би­рая зна­че­ния ука­зан­но­го вами размера.

Шаг 3: Доступ к панели управления Harbour

Исполь­зуй­те внеш­ний домен, настро­ен­ный во вре­мя уста­нов­ки, для досту­па к пане­ли мони­то­рин­га реест­ра кон­тей­не­ра Harbour.

Кре­ды по умолчанию:

Username: admin
Password: Harbor12345

 

 

использовать Harbor для сканирования образов Docker на наличие уязвимостей

 

Harbor – это локаль­ный реестр Docker, кото­рый, будучи собран­ным с под­держ­кой Clair, поз­во­ля­ет ска­ни­ро­вать спу­шен­ные обра­зы на нали­чие извест­ных уязвимостей.
Это долж­но счи­тать­ся обя­за­тель­ным в ком­па­ни­ях, кото­рые пола­га­ют­ся на контейнеры.
Но как исполь­зо­вать Harbour для ска­ни­ро­ва­ния этих образов?
 
Давай­те посмотрим.

Что вам нужно

Самое глав­ное, вам пона­до­бит­ся это Harbor (с под­держ­кой Clair).
Вам так­же пона­до­бят­ся обра­за для отправ­ки на сер­вер Harbor и учет­ную запись поль­зо­ва­те­ля на сер­ве­ре Harbour. 

Сертификаты

Если вы пла­ни­ру­е­те пере­да­вать обра­зы с ком­пью­те­ров в вашей сети (кото­рые не явля­ют­ся вашим сер­ве­ром Harbour), вам необ­хо­ди­мо ско­пи­ро­вать сер­ти­фи­ка­ты с сер­ве­ра Harbour на клиенты.

Если вы сле­до­ва­ли инструк­ци­ям по уста­нов­ке Harbor, воз­мож­но, вы исполь­зу­е­те само­за­ве­рен­ные сертификаты.

Я соби­ра­юсь пред­по­ло­жить, что это так.

И так … вот как ско­пи­ро­вать эти сер­ти­фи­ка­ты с сер­ве­ра на клиент:

  1. под­клю­чи­тесь по ssh (или вой­ди­те в кон­соль) к сер­ве­ру Harbor.
  2. Полу­чи­те root-доступ с помо­щью коман­ды sudo -s.
  3. Перей­ди­те в ката­лог сер­ти­фи­ка­тов с помо­щью коман­ды cd /etc/docker/certs.d/SERVER_IP (где SERVER_IP – это IP-адрес ваше­го сервера).
  4. Ско­пи­руй­те ключ ca.cert на кли­ент с помо­щью коман­ды scp ca.cert USER @ CLIENT_IP: / home / USER (где USER – имя поль­зо­ва­те­ля на кли­ент­ском ком­пью­те­ре, а CLIENT_IP – IP-адрес кли­ент­ско­го компьютера).
  5. Ско­пи­руй­те ключ ca.crt на кли­ент с помо­щью коман­ды scp ca.crt USER @ CLIENT_IP: / home / USER (где USER – это имя поль­зо­ва­те­ля на кли­ент­ском ком­пью­те­ре, а CLIENT_IP – это IP-адрес кли­ент­ско­го компьютера).
  6. Ско­пи­руй­те кли­ент­ский ключ ca.key с помо­щью коман­ды scp ca.key USER @ CLIENT_IP: / home / USER (где USER – это имя поль­зо­ва­те­ля на кли­ент­ском ком­пью­те­ре, а CLIENT_IP – это IP-адрес кли­ент­ско­го компьютера).
  7. SSH к кли­ент­ско­му ком­пью­те­ру с помо­щью коман­ды ssh USER @ CLIENT_IP (где USER – имя поль­зо­ва­те­ля на кли­ент­ском ком­пью­те­ре, а CLIENT_IP – IP-адрес кли­ент­ско­го компьютера).
  8. Создай­те новый ката­лог сер­ти­фи­ка­тов с помо­щью коман­ды sudo mkdir -p /etc/docker/certs.d/SERVER_IP (где SERVER_IP – это IP-адрес сер­ве­ра Harbour).
  9. Ско­пи­руй­те фай­лы с помо­щью коман­ды sudo cp ca. * /etc/docker/certs.d/SERVER_IP (где SERVER_IP – IP-адрес сер­ве­ра Harbor).
Теперь ваш кли­ент дол­жен иметь воз­мож­ность вой­ти в репо­зи­то­рий Harbor и отправ­лять образы.

Пометка образов ( теги )

Преж­де чем отпра­вить образ с кли­ен­та на сер­вер, сна­ча­ла необ­хо­ди­мо поме­тить его.

Допу­стим, у вас есть офи­ци­аль­ный образ Ubuntu, и вы хоти­те поме­тить его кон­крет­ным име­нем разработчика.

Что­бы поме­тить его так, что­бы его мож­но было пере­не­сти в реестр Harbor, коман­да tag будет выгля­деть так:

Где:
  •  SERVER_IP – это IP-адрес сер­ве­ра Harbour.
  • PROJECT_NAME – это имя про­ек­та на сер­ве­ре Harbour.
  • DEVNAME: имя раз­ра­бот­чи­ка, кото­ро­го вы хоти­те пометить.

 

Таким обра­зом, коман­да может выгля­деть так:

Пушинг образа

Сна­ча­ла вы долж­ны вой­ти в реестр на сер­ве­ре Harbor.

Для это­го выпол­ни­те команду:

Где SERVER_IP – это IP-адрес сер­ве­ра Harbor.

Вам будет пред­ло­же­но вве­сти имя поль­зо­ва­те­ля и пароль поль­зо­ва­те­ля на сер­ве­ре Harbour.

После вхо­да в систе­му вы може­те спу­шить образ с помо­щью команды:

После завер­ше­ния вы гото­вы отска­ни­ро­вать образ на нали­чие уязвимостей.

Сканирование образа

Вой­ди­те в свой реестр Harbor и перей­ди­те к про­ек­ту, в кото­ром раз­ме­щен недав­но под­тя­ну­тый образ

Вы долж­ны уви­деть образ в списке:

Created with GIMP

 

Щелк­ни­те на новый образ и в появив­шем­ся окне уста­но­ви­те фла­жок, свя­зан­ный с тегом образа.

После выбо­ра нажми­те кноп­ку SCAN, что­бы начать сканирование.

Created with GIMP
Когда ска­ни­ро­ва­ние завер­шит­ся, вы уви­ди­те поло­су, пред­став­ля­ю­щую резуль­та­ты сканирования.
Наве­ди­те кур­сор на эту поло­су, что­бы про­смот­реть отчет:
Created with GIMP

Если вы нажме­те на имя тега, вы уви­ди­те пол­ный отчет, в кото­ром пред­став­ле­ны пол­ные резуль­та­ты, вклю­чая CVE для каж­дой уязвимости:

Created with GIMP

Про­кру­ти­те весь отчет, что­бы про­смот­реть все уязвимости.

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

Но важ­но про­ска­ни­ро­вать эти уязвимости!