FAM Avanpost

Инструкция подготовлена на примере FAM Avanpost v1.13.6

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

  • Authentication (Аутентификация) — идентификация и проверка пользователя.
  • Authorization (Авторизация) — предоставление доступа пользователю.
  • Приложение — сущности, которые могут обращаться к Avanpost для аутентификации пользователя. Чаще всего ими являются приложения и службы, которые используют Avanpost для обеспечения единого входа в систему.
  • Пользователи — субъекты которые могут войти в вашу систему. Им можно назначить членство в группе и/или определенные роли.
  • Роли — определяют тип/категорию пользователя. Читатель, писатель — типичные роли. Обычно, приложения назначают доступ и разрешения конкретным ролям, а не отдельным пользователям.

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

Перейдите на страницу Приложения и нажмите кнопку “Добавить приложение”, после чего укажите следующие параметры:

  • Наименование - название для отображения в интерфейсе Avanpost
  • Тип - Open ID

После ввода параметров нажмите “Далее”. Введите данные:

  • Secret - “Пароль” для приложения
  • Redirect URIs - через пробел допустимые адреса для перенаправления:
    • <app_url>/vision/api/v1/auth/login
    • <app_url>/vision/api/v1/auth/login-grafana
  • Base URL - <app_url>. Адрес приложения
  • Logout URL - не заполняется

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

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

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

Выберите процесс аутентификации, по умолчанию Password.

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

Оставьте флажок “Сделать приложение активным” и нажмите “Сохранить”.

2. Настройка приложений и ролей#

В странице “Приложения” перейдите в “Настройки”, после нажмите на кнопку изменения настроек и измените следующие параметры:

  • ID synonym - синоним, который можно использовать вместо Client ID (опционально)
  • Post logout redirect URIs - <app_url>
  • Allowed grant types - необходимо включить: 
    • Authorization code
    • Password
    • Resresh token
  • Access token type - JSON web token

Ошибки аутентификации - снять флаг “Обрабатывать как ошибки протокола”. Необходимо для случаев, когда в Визион пытается зайти пользователь без соответствующих прав.

После нажмите “Сохранить”.

В разделе “Модель доступа” добавьте объект доступа.

  • Код - Client ID
  • Описание - Права доступа
  • Права (Scopes) - записи по количеству ролей, где:
    • Код - название роли
    • Описание - описание роли, отображаемое в интерфейсе Аванпоста

Примечание. Так как с версии 1.6 Визион переходит только на использование Client ID, для клиента Визион в административном интерфейсе Avanpost необходимо изменить значение поля «Код» на вкладке «Модель доступа» на значение Client ID

Раздел «Настройки интеграции» - используется Client ID, ID synonym не используется:

Раздел «Модель доступа»:

Добавьте роли с теми названиями, которые будут использованы в Визион. Для ролей администраторов - obj_model для администратора объектной модели, role_model для администратора информационной безопасности, vsn_config для администратора конфигурации Визиона (он же администратор Grafana). Также можно создать пользовательские роли. Подробнее управление ролевой моделью Визион описано в Руководстве Администратора .

Нажмите “Сохранить”.

В разделе “Сервис” в “Настройка ролей и прав” нажмите кнопку “Добавить” и заполните следующие значения:

  • Наименование - имя роли для интерфейса аванпоста
  • Описание - опционально

Выберите необходимые объекты доступа - они будут справа иметь название приложения и заданное ранее описание. 

Далее перейдите в созданную роль. Во вкладке “Пользователи” добавьте пользователей к этой роли:

Перейдите в раздел “Группы” и добавьте группу (для создания связи между пользователем и приложением). Заполните поля:

  • Наименование - наименование клиента
  • Описание - опционально

Нажмите “Сохранить”.

На странице группы во вкладках: 

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

Примечание. Необходимо добавление пользователей в группу lk-client для предоставления им доступа к личному кабинету (Avanpost). Это необходимо в случае, когда в Визион пытается зайти пользователь без соответствующих прав.

3. Настройка конфигурации#

В конфигурационный файл /opt/skala-r/etc/vision/server/vision_core/config.yml необходимо внести следующие изменения.

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

  • enabled - установить значение true
  • auth_type: ‘avanpost’
  • auth_server - URL Anapost, например “http://fam.skala-r.tech
  • client_id - Client ID/ID synonym. Если при настройке использовался ID synonym - указывать его
  • client_secret - значение является ключом из хранилища секретов. Не изменять.
  • tls_insecure_skip_verify - пропуск проверки tls сертификатов.

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

auth:
  enabled: true
  auth_type: avanpost
  auth_server: http://fam.skala-r.tech
  client_id: vision
  client_secret: vault.auth.client_secret
  tls_insecure_skip_verify: true

Необходимо указать реальное значение 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.

Примечание. Действия пользователя при попытке войти в Визион без соответствующих прав.

При выполнение настроек, описанных выше, если пользователь без соответствующих прав попытает аутентифицироваться в Визион через Avanpost, он получит окно с сообщением “Ошибка доступа”. Для получения возможности повторной аутентификации ему необходимо перейти в личный кабинет (соответствующая ссылка будет отображена вместе с сообщением об ошибке) и завершить сессию, нажав “Выход”.

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

В версии Avanpost FAM v1.10.10.379 отключение Регистрации на странице аутентификации пользователя осуществляется через конфигурационный файл Avanpost, пример пути конфигурационного файла /opt/idp/config.toml:

[selfregistration]
redirectUrl = 'https://<your_redirect_URL_after_registration>'
disabled = false

Функция Восстановления пароля в данной версии отключается через редактирование шаблона страницы аутентификации. 

Описание кастомизации пользовательских интерфейсов - указаны шаги, как редактировать шаблоны. В шаблоне login.password.html можно удалить/закомментировать следующий блок:

[{if ne .Username ""}]
<div class="field">
<a href="[{$path}]/user/restore_password?request_id=[{.RequestID}]">
  [{.ForgotPassword}]
</a>
</div>
[{else}]
<div class="field">
<a href="[{$path}]/user/restore_password?request_id=[{.RequestID}]">
  [{.ForgotPassword}]
</a>
</div>
[{end}]

3. Настройка Avanpost и Визион для функционала автоматической рассылки уведомлений#

Рекомендуется настроить отдельное техническое приложение (клиент), которое будет использоваться для подключения к Avanpost и получения списков пользователей и ролей. Для этого необходимо добавить приложение в интерфейсе Avanpost (в примере – tech_vision), пройдя несколько шагов.

На первом шаге (основные настройки) необходимо выбрать тип подключения:

На втором шаге (настройки интеграции) необходимо задать секрет, который потребуется для настройки конфигурации Визион. Необходимо также заполнить поле «Redirect URIs», которое не используется, но является обязательным полем:

На третьем шаге (настройка аутентификации) изменения не требуются. После добавления приложения необходимо зайти в него и на вкладке «Настройки» внести следующие изменения:

  • Allowed grant types: добавить Password
  • Access token type: выбрать JSON web token

Необходимо добавить технического пользователя, под учетной записью которого будут запрашиваться необходимые данные о пользователях и ролях (в примере – vision_api).

Далее необходимо создать группу, добавить в нее пользователя и назначить техническое приложение:

Необходимо создать роль с полномочиями на чтение объектов (пользователи, группы, приложения и т.д.) и назначить ее техническому пользователю:

В конфигурационном файле Визион требуется задать параметры для сервиса vision_iamsyncer.service, который запрашивает данные пользователей, необходимые для рассылки, у провайдера аутентификации и передает их в сервис vision_core.

Параметры:

  • iamsyncer_systemd_service - название сервиса, запрашивающего данные пользователей у провайдера аутентификации (изменять не требуется)
  • user_update_enabled - включение режима сбора данных пользователей (true) или выключение (false)
  • tech_auth_client_id - идентификатор технического приложения (клиента) для сбора данных пользователей
  • tech_auth_client_secret - ключ в secret vault, где хранится секрет для технического клиента
  • tech_auth_username - имя технического пользователя
  • tech_auth_password - ключ в secret vault, где хранится пароль технического пользователя
  • fetch_interval - интервал времени (в секундах), через который запускается каждый последующий процесс сбора данных пользователей.

Пример заполнения всего блока auth, включая параметры необходимые для vision_iamsyncer:

auth:
  enabled: true
  auth_type: avanpost
  auth_server: http://fam.skala-r.tech
  client_id: 'd1c20d9a-06c5-4aee-b2c1-4224afb61996'
  client_secret: vault.auth.client_secret
  tls_insecure_skip_verify: true
  request_timeout: 5
  iamsyncer_systemd_service: vision_iamsyncer.service
  user_update_enabled: true
  tech_auth_client_id: '4fb8a11f-efdd-4adc-b685-f72d29d1141c'
  tech_auth_client_secret: vault.auth.tech_auth_client_secret
  tech_auth_username: 'vision_api'
  tech_auth_password: vault.auth.tech_auth_password
  fetch_interval: 3600

Пароль технического пользователя и секрет для технического приложения необходимо добавить в secrets_vault. Для этого необходимо открыть хранилище секретов командой: ansible-vault edit /opt/skala-r/vision/.secrets_vault и установить:

  • для ключа vault.auth.tech_auth_password значение пароля технического пользователя, заданного в поле «Пароль пользователя» на вкладке «Безопасность»
  • для ключа vault.auth.tech_auth_client_secret значение секрета, заданного при создании технического приложения (клиента).

После внесения изменений в Avanpost и конфигурацию Визион необходимо:

  • перезапустить сервис vision_core командой systemctl restart vision_core (если изменялись настройки для клиента Визион)
  • применить конфигурацию сервиса vision_iamsyncer одним из способов:
    • вручную перезапустив vision_iamsyncer командой systemctl restart vision_iamsyncer
    • выполнив скрипт /opt/skala-r/vision/tools/update_server_configs.sh (особенно, если менялись еще какие-либо фрагменты конфигурации для других компонентов) Результаты работы сервиса vision_iamsyncer можно проверить командой tail -f /opt/skala-r/var/log/vision/server/vision_iamsyncer/vision_iamsyncer.log

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