Настройка LDAP и OIDC авторизации в Harbor для Keycloak
Харбор — искусственный остров в Сиэтле, на котором расположена судостроительная верфь.
Ой, т.е. Harbor — это бесплатный реестр для хранения Docker образов c открытым исходным кодом, который предоставляет доступ к образам с помощью политик, а также умеет сканировать образы на наличие уязвимостей.
Установка Harbor
Установка Harbor достаточно легкая. Для начал устанавливаем Docker
Скачиваем дистрибутив Harbor и распаковываем его
1
2
$ wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-online-installer-v2.11.0.tgz
$ tar -zxvf harbor-online-installer-v2.11.0.tgz
Переходим в директорию, копируем и правим конфиг
1
2
3
$ cd harbor
$ cp harbor.yml.tmpl harbor.yml
$ nano harbor.yml
Дефолтный hostname надо заменить на любой другой
Запускаем установку
1
2
3
$ sudo ./install.sh
...
✔ ----Harbor has been installed and started successfully.----
На этом установка Harbor завершена
Настройка LDAP авторизации
В качестве LDAP-сервера будем использовать IDM (FreeIPA). Для настройки LDAP-авторизации авторизуемся в web-интерфейсе Harbor (Administration > Configuration)
-_Administration > Configuration
Параметры:
1
2
3
4
5
6
LDAP URL: ldap://freeipa.itdraft.ru
LDAP Search DN: uid=10.harbor_s,cn=users,cn=accounts,dc=itdraft,dc=ru
LDAP Search Password: %superpassword%
LDAP Base DN: cn=users,cn=accounts,dc=itdraft,dc=ru
LDAP Filter: memberOf=cn=g_registry,cn=groups,cn=accounts,dc=itdraft,dc=ru
LDAP UID: uid
Настаиваем сетевую связанность с LDAP-сервером, проверяем авторизацию
OIDC авторизация. Настройка Keycloak
На стороне Keycloak выбираем нужный Realm, создаем клиент со следующими параметрами
Во вкладке Settings нам понадобится ClientID
Во вкладке Credentials понадобится Client secret
Переходим во вкладку Client scopes > harbor2-dedicated и создаем новый Mapper
Параметры:
1
2
3
4
5
6
7
Mapper type: Group Membership
Name: groups
Token Claim Name: groups
Full group path: Off
Add to ID token: On
Add to access token: On
Add to userinfo: On
Этот mapper нам понадобится для назначения администраторов Harbor
Переходим в пункт меню Groups, создаем группу админов (harbor-admin и группу для доступа к проекту (у меня - express), добавляем в эти группы пользователей
На этом настройки на стороне Keycloak закончены
OIDC авторизация. Настройка Harbor
Авторизуемся в web-интерфейсе Harbor (Administration > Configuration), выбираем Auth Mode: OIDC
Если выпадающее меню для переключения типа авторизации неактивно, удаляем всех добавленных пользователей
Параметры:
1
2
3
4
5
6
7
8
9
10
11
Auth Mode: OIDC # Тип авторизации
OIDC Provider Name: KEYCLOAK # Наименование кнопки в админке
OIDC Endpoint: https://keycloak.itdraft.ru:8443/realms/itdraft # URL до нашего Realm
OIDC Client ID: harbor2 # Создавали в Keycloak
OIDC Client Secret: %token% # Копировали в Keycloak из вкладки Credentials
OIDC Group Filter: (express|harbor) # Группы, для назначения польщзователей в проект, поддерживаются регулярки
Group Claim Name: groups # Создавали в Keycloak (поле Token Claim Name)
OIDC Admin Group: harbor-admin # Создавали группу в Keycloak
OIDC Scope: openid,profile,email,offline_access,roles # roles - для назначения групп, offline_access - помогает с авторизацией из Docker
Automatic onboarding: On # Автоматическое назначение username для новых пользователей
Username Claim: preferred_username # какое поле будет подставляться. Можно так же name, first_name, last_name
Как ограничить доступ к Harbor группой доступа из Keycloak я пока что не нашел
Для получения токена авторизации в Harbor через Docker, авторизуемся в web-интерфейсе Harbor, username > User Profile, копируем CLI secret