harbor

Введение

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

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

Реестр для облачных платформ

Harbor поддерживает как контейнерные образы, и Helm charts, что делает его идеальным реестром для облачных сред, включая контейнерные среды выполнения и платформы оркестрации.

Управление доступом на основе ролей

Harbor использует управление доступом на основе ролей (RBAC), позволяя пользователям получать доступ к различным репозиториям через ‘проекты’. Разрешения могут быть настроены для изображений или Helm charts внутри проекта.

Репликация на основе политик

  • Репликация: Образы и чарты могут быть реплицированы (синхронизированы) между несколькими экземплярами реестра на основе политик с использованием фильтров (репозиторий, тег и метка).
  • Автоматические повторные попытки: Harbor автоматически повторяет попытки репликации в случае ошибок.
  • Сценарии использования: Эта функция поддерживает балансировку нагрузки, высокую доступность и развертывания в нескольких центрах обработки данных в гибридных и многоклаудных сценариях.

Сканирование уязвимостей

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

Поддержка LDAP/AD

Harbor интегрируется с корпоративными LDAP/AD для аутентификации и управления пользователями. Группы LDAP могут быть импортированы в Harbor и назначены права на конкретные проекты.

Поддержка OIDC

Harbor поддерживает OpenID Connect (OIDC) для проверки подлинности пользователей через внешние серверы авторизации или поставщиков идентификации. Можно включить единый вход (SSO) для доступа к порталу Harbor.

Удаление изображений и сбор мусора

Системные администраторы могут запускать задания по сбору мусора для удаления нереференцированных изображений, висячих манифестов и блобов, периодически освобождая место.

Notary

Harbor поддерживает подпись контейнерных образов с использованием Docker Content Trust (воспользовавшись Notary) для гарантии подлинности и происхождения. Также можно установить политики для предотвращения развертывания неподписанных изображений.

Графический пользовательский портал

Пользователи могут легко просматривать, искать репозитории и управлять проектами через интуитивно понятный графический интерфейс Harbor.

Аудит

Все операции с репозиториями отслеживаются и записываются для целей аудита.

RESTful API

  • API: Доступны RESTful API для административных задач и интеграции с внешними системами.
  • Swagger UI: Встроенный Swagger UI предоставляется для исследования и тестирования API.

Простота развертывания

Harbor можно развернуть с использованием Docker Compose, Helm Charts или недавно добавленного Harbor Operator.

Official Documentations

Развертывание инфраструктуры

В статье мы будем использовать Docker Compose в качестве платформы для инфраструктуры. В качестве основы мы используем образы от Bitnami. Кроме того, вам потребуется тенант Microsoft EntraID для OAuth-аутентификации.

Демонстрационные файлы extadmin.space можно найти здесь

Установка сервера Harbor

  1. Создайте папку для проекта и скопируйте демонстрационные файлы из репозитория.

  2. Убедитесь, что переменные в файлах *.env определены корректно, с особым вниманием к тому, чтобы пароли были идентичными везде, где они встречаются.

  3. Обратите особое внимание на параметр CORE_KEY= в core.env; он должен быть фразой длиной 16 символов.

  4. Выполните команду docker compose up -d для развертывания сервера Harbor и окружающей инфраструктуры.

docker-compose.core.yaml
# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0

version: '2'

services:
  registry:
    image: docker.io/bitnami/harbor-registry:2
    env_file:
      - ./env/registry.env
    volumes:
      - registry_data:/storage
      - ./config/registry/:/etc/registry/:ro
  registryctl:
    image: docker.io/bitnami/harbor-registryctl:2
    env_file:
      - ./env/registryctl.env
    volumes:
      - registry_data:/storage
      - ./config/registry/:/etc/registry/:ro
      - ./config/registryctl/config.yml:/etc/registryctl/config.yml:ro
  postgresql:
    image: docker.io/bitnami/postgresql:13
    container_name: harbor-db
    env_file:
      - ./env/postgresql.env
    volumes:
      - postgresql_data:/bitnami/postgresql
  core:
    image: docker.io/bitnami/harbor-core:2
    container_name: harbor-core
    depends_on:
      - registry
    env_file:
      - ./env/core.env
    volumes:
      - core_data:/data
      - ./config/core/app.conf:/etc/core/app.conf:ro
      - ./config/core/private_key.pem:/etc/core/private_key.pem:ro
  portal:
    image: docker.io/bitnami/harbor-portal:2
    container_name: harbor-portal
    depends_on:
      - core
  jobservice:
    image: docker.io/bitnami/harbor-jobservice:2
    container_name: harbor-jobservice
    depends_on:
      - redis
      - core
    env_file:
      - ./env/jobservice.env
    volumes:
      - jobservice_data:/var/log/jobs
      - ./config/jobservice/config.yml:/etc/jobservice/config.yml:ro
  redis:
    image: docker.io/bitnami/redis:7.4
    env_file:
      - ./env/redis.env
  harbor-nginx:
    image: docker.io/bitnami/nginx:1.27
    container_name: nginx
    volumes:
      - ./config/proxy/nginx.conf:/opt/bitnami/nginx/conf/nginx.conf:ro
    ports:
      - '80:8080'
    depends_on:
      - postgresql
      - registry
      - core
      - portal
volumes:
  registry_data:
    driver: local
  core_data:
    driver: local
  jobservice_data:
    driver: local
  postgresql_data:
    driver: local
networks:
  harbor_net:

Внимание! Это развертывание откроет порт 80/TCP. Если вам нужно использовать другие порты, вам необходимо изменить их в docker-compose.yaml. Кроме того, если вы хотите получить внешний доступ к вашему частному серверу Harbor, настройте ваш брандмауэр.

harbor

Настройка Harbor

Сначала перейдите на сервер Harbor и войдите в систему под учетной записью admin, используя bitnami в качестве пароля.

harbor

harbor

Настройка OAuth-аутентификации

В дополнение к внутренней аутентификации, Harbor поддерживает различные виды внешней аутентификации, такие как LDAP или OIDC и т. д. В данной статье мы настраиваем OAuth2 OpenID Connect + Microsoft EntraID. Вам потребуется тенант Microsoft EntraID как минимум с бесплатной лицензией. Используя текущий метод, вам не потребуется ни внешний домен, ни публичный IP-адрес.

Сторона Harbor

  1. Перейдите в раздел Configuration в меню Administration и выберите OIDC из списка Auth Method.

harbor

Обратите внимание на Redirect URI внизу страницы.

Сторона Azure

  1. После входа в Microsoft EntraID создайте новую регистрацию приложения.

harbor

  1. Заполните поля Name и Redirect URI (http://localhost/c/oidc/callback).

harbor

  1. Создайте новый клиентский секрет для приложения.

  2. В зарегистрированном приложении в Token configuration добавьте групповые утверждения следующим образом.

harbor

  1. Создайте группу или группы, которые вы хотите сопоставить с вашим сервисом Harbor, и скопируйте их ObjectID.

harbor

Сторона Harbor (снова)

  1. Вернитесь на ваш локальный сервер Harbor и заполните необходимые поля, как показано на изображении ниже, и нажмите Save.

harbor

  1. Перейдите в Administration->Group и нажмите кнопку +New Group.

harbor

Заполните ObjectID группы и выберите роль.

harbor

Опыт входа пользователя

Для входа на сервер Harbor через SSO используйте кнопку Login with Microsoft EntraID.

Удостоверьтесь, что пользователь является членом вышеупомянутой AD группы

harbor

После успешного входа в учетную запись Microsoft завершите регистрацию в Harbor.

harbor

harbor

Перейдите в проект и нажмите Push command, чтобы получить информацию.

harbor

Для авторизации через Docker CLI используйте клиентский секрет, который можно найти в User Profile.

harbor