Настройка аутентификации через Keycloak

Инструкция подготовлена на примере Keycloak версии 20.0.2.

Терминология

  • Authentication — идентификация и проверка пользователя.
  • Authorization — предоставление доступа пользователю.
  • Realm — пространство для управления пользователями, приложениями, ролями и группами. Пользователь принадлежит к конкретному realm. Realm’ы изолированы друг от друга.
  • Clients — клиенты (приложения), которые могут обращаться к Keycloak для аутентификации пользователя. Чаще всего клиентами являются приложения и службы, которые используют Keycloak для обеспечения единого входа в систему.
  • Users — пользователи, которые могут войти в вашу систему. Им можно назначить членство в группе и/или определенные роли.
  • Roles — определяют тип/категорию пользователя. Читатель, писатель — типичные роли. Обычно, приложения назначают доступ и разрешения конкретным ролям, а не отдельным пользователям.

1.1 Создание клиента#

Выберите необходимый Realm, перейдите страницу Clients и нажмите на кнопку Create client, после чего укажите следующие параметры:

  • Client type: openid-connect
  • Client ID: <ИМЯ КЛИЕНТА>
  • Vision Core: vision-core-client

После ввода параметров нажмите Next.

  • Client authentication: ON
  • Authorization: OFF
  • Standard Flow: ON
  • Direct Access Grants: ON
  • Implicit Flow: OFF

После ввода параметров нажмите Save.

1.2 Параметры клиента#

После создания клиента откроется страница Client details.

Вкладка «Settings»#

Необходимо указать адреса приложения.

  • Root URL: <app_url>
  • Home URL (Base URL в ранних версиях): <app_url>
  • Valid Redirect URIs:
    • <app_url>/vision/api/v1/auth/login
    • <app_url>/vision/api/v1/auth/login-grafana
  • Web Origins: <app_url>
  • Admin URL: <app_url>

Где <app_url>, это - https://<ip_vision_vm>

При доступности приложений с нескольких <app_url> (по IP, по домену) укажите все допустимые варианты для Valid redirect URIs и Web Origins.

Прочие параметры конфигурации можно оставить со значениями по умолчанию.

После ввода параметров нажмите Save.

Вкладка «Roles»#

Необходимо создать роли администраторов клиента, которые затем можно назначать пользователям Keycloak для доступа к приложениям. Имена ролей чувствительны к регистру. Для создания роли нажмите Create role.

В клиенте для Vision Core создайте следующие роли:

  • obj_model Администратор объектной модели
  • role_model Администратор информационной безопасности
  • vsn_config Администратора конфигурации Визиона, также администратор Grafana

Также можно создать пользовательские роли. Распределение их полномочий производится после их добавления в Визион. Управление ролевой моделью Визион описано в разделе 17 Руководства Администратора .

Вкладка «Credentials»#

По-умолчанию на данной вкладке должны быть указаны следующие параметры

  • Client Authenticator: Client Id and Secret
  • Client secret: *****

При конфигурации приложений нам понадобятся следующие данные клиентов:

  • Client ID
  • Client secret

1.3 Назначение ролей пользователям#

  1. Откройте раздел Users
  2. Выберите необходимого пользователя или создайте нового.
  3. Перейдите во вкладку Role mapping и нажмите Assign role
  4. Нажмите на выпадающий список фильтра и выберите Filter by clients
  5. Отметьте необходимые роли и нажмите Assign

1.4 Конфигурация Визиона для работы с Keycloak#

Необходимо изменить параметры файла конфигурации проекта /opt/skala-r/etc/vision/server/vision_core/config.yml.

В ключе “auth” необходимо указать:

  • enabled - установить значение true
  • auth_type - ‘keycloak’
  • auth_server - URL Keycloak, например “https://192.168.1.1:8080”
  • realm - имя Realm.
  • client_id - ID клиента в Realm.
  • client_secret - значение является ключом из хранилища секретов. Не изменять.

Пример секции авторизации:

auth:
  enabled: true
  auth_type: keycloak
  auth_server: https://192.168.1.1:8080
  realm: vision
  client_id: vision-core-client
  client_secret: vault.auth.client_secret

Необходимо указать реальное значение Client secret клиента.

  1. Сделайте копию файла хранилища секретов: cp /opt/skala-r/vision/.secrets_vault /opt/skala-r/vision/.secrets_vault_bak.
  2. Откройте хранилище секретов командой: ansible-vault edit /opt/skala-r/vision/.secrets_vault. Для оперирования содержимым хранилища требуется ключ, выдаваемый разработчиком Визиона.
  3. Для ключа vault.auth.client_secret установите значение Client secret из раздела Credentials клиента.
  4. Сохраните файл и перезапустите сервис vision_core.service командой systemctl restart vision_core.service.
  5. Проверьте успешный запуск vision_core командой systemctl status vision_core.service и убедитесь, что в логе нет ошибок после перезапуска: journalctl -fu vision_core -n 20.