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

Инструкция подготовлена на примере BVS Версия: 3.1.4 (от 21.06.2024)

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

  • BVS - Basis Virtual Security, продукт являющийся провайдером аутентификации и авториризации
  • Authentication — идентификация и проверка пользователя.
  • Authorization — предоставление доступа пользователю.
  • Домен — пространство для управления пользователями, приложениями, ролями и группами. Пользователь принадлежит к конкретному Домену. Домены изолированы друг от друга. Для пользователей Визиона достаточно одного домена
  • Клиентские системы — клиенты (приложения), которые могут обращаться к BVS для аутентификации пользователя. Клиентская система - объект, который содержит совокупность параметров, необходимых для связи с определенным приложением.
  • Users — Пользователи, которые могут войти в вашу систему. Им можно назначить членство в группе и/или определенные роли.
  • Roles — определяют тип/категорию пользователя. Читатель, писатель — типичные роли. Обычно, приложения назначают доступ и разрешения конкретным ролям, а не отдельным пользователям.

Приложения Визиона требующие Клиентских систем:

  • Vision Core
  • Grafana

1. Добавление домена#

В случае, если нужный домен уже есть в списке, перейдите к следующему пункту инструкции.

В разделе “Домены” нажмите кнопку “Создать”, заполните обязательные поля (например “vision” для имени домена) в появившемся окне и нажмите “Создать”. Созданный домен должен появиться в списке:

2. Добавление клиентской системы для Vision_core#

Выберите необходимый домен в выпадающем списке слева вверху (vision), нажмите на раздел “Безопасность” (раскроется контекстное меню) и выберите раздел “Клиентские системы”.

В открывшейся странице нажмите кнопку “Создать” и в появившемся окне заполните поля:

Поле Описание Пример заполнения
Идентификатор: Имя клиентской системы vision_core_48
Наименование: Произвольное имя vision_core_48
Тип доступа: Какой тип доступа будет использован Конфиденциальный (потребуется секретный ключ для инициализации протокола входа)
Адрес: IP адрес и порт для клиентской системы https://192.168.186.48/
Активность Отключенные системы не могут инициировать вход и получать токены доступа [x] (должен быть выбран)

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

2.1 Изменение параметров клиентской системы для Vision_core#

Откройте страницу со списком клиентских систем (“Безопасность” -> “Клиентские системы”), выберите созданную клиентскую систему и на вкладке “Основное” нажмите кнопку “Изменить”. Заполните значения полей:

Поле Описание Пример заполнения
Типы взаимодействия: типы взаимодействия разрешенные для клиентской системы Authorization Code Flow - стандартное OpenID Connect перенаправление основанное на аутентификации с кодом авторизации, Resource Owner Password Grant - клиентская система имеет доступ к имени пользователя и паролю и обменивает их напрямую с сервером авторизации на токен доступа
Основной путь: URL по умолчанию, используется если серверу требуется перенаправление или обратная ссылка на клиента /
Пути перенаправления: список URL на которые может быть перенаправлен браузер после успешного входа или выхода https://192.168.186.48/*
Доверенные источники CORS: Список доверенных источников в технологии CORS https://192.168.186.48/*

При доступности приложений с нескольких URL (по IP, по домену), указать все допустимые варианты для Пути перенаправления и Доверенных источников CORS.

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

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

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

3. Добавление ролей для Vision_core#

Для создания новой роли необходимо перейти в параметры клиентской системы (пример: выбрать домен “vision”, нажать “Клиентские системы” и выбрать “vision_core_48”). Перейти на вкладку “Роли” и нажать кнопку “Создать”.

В появившемся меню, заполнить поля в соответствии с ролевой моделью:

Поле Описание Пример заполнения
Имя роли Имя роли, используемой в Визион. На момент создания настоящей инструкции в Визионе две роли writer и reader reader

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

4. Редактирование области#

Для корректной передачи username пользователя следует в области “roles” добавить новое “Отображение”. Для этого следует на странице “Области” открыть области с названием “roles” и нажать кнопку “Создать” В появившемся меню следует заполнить следующие параметры:

Остальные значения можно оставить по умолчанию и нажать кнопку “Сохранить”

5. Создание пользователя для Визион#

Выберите домен “Vision” и перейдите в раздел Безопасность -> Пользователи. Нажмите “Создать”. Появится окно, в котором нужно заполнить поля и нажать “Создать”:

На вкладке “Основное” для пользователя выберите чек-бокс “E-mail подтвержден” и “Активность” (если не выбрали на стадии создания пользователя).

Перейдите на вкладку “Полномочия”. Введите “Новый пароль”, повторите его в поле “Подтверждение”, уберите чекбокс “Временный пароль” и нажмите “Сбросить пароль”. В появившемся окне подтверждения действия нажмите “Да”.

6. Добавление роли пользователю для Визион#

Для созданного пользователя перейдите на вкладку “Роли”. В разделе “Роли уровня клиентской системы” выберите клиентскую систему “vision”, выберите одну или несколько ролей (например, reader) и нажмите “Назначить выбранные роли”:

Убедитесь, что для вашей клиентской системы назначены области: Убедитесь, что для созданной клиенткой системы (пример Vision->Клиентcкие системы->vision_core_48->области) в разделе “Области по умолчанию” в окне “Назначенные области” отображаются:

  • roles
  • email

7. Настройка конфигурации для Vision_core#

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

auth:
  enabled: true
  auth_type: 'keycloak'
  auth_server: 'http://bvs-public.skala-r.tech/'
  realm: '<Домен приложения>'
  client_id: '<Клиентская система>'
  client_secret: vault.auth.client_secret
  tls_insecure_skip_verify: true
  request_timeout: 5

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

Сделайте копию файла хранилища секретов: cp /opt/skala-r/vision/.vault_store /opt/skala-r/vision/.vault_store_bak.

Запустите команду /opt/skala-r/vision/server/vision_venv/bin/python3 -c "import storage; print(storage.get_initial_data())" > ~/.vault_pass && ansible-vault edit /opt/skala-r/vision/.secrets_vault --vault-password-file=~/.vault_pass && rm -rf ~/.vault_pass && systemctl restart vision_core.service.

Для ключа vault.auth.client_secret установите значение поля “Пароль” (раздел Основное -> Пароль для Клиентской системы).

Сохраните файл и перезапустите сервис vision_core.service командой: systemctl restart vision_core.service.

Проверьте успешный запуск vision_core командой: systemctl status vision_core.service и убедитесь, что в логе нет ошибок после перезапуска: journalctl -fu vision_core -n 20.

8. Создание Клиентской системы для Grafana#

Выберите необходимый домен в выпадающем списке слева вверху (vision), нажмите на раздел “Безопасность” (раскроется контекстное меню) и выберите раздел “Клиентские системы”.

В открывшейся странице нажмите кнопку “Создать” и в появившемся окне заполните поля:

Поле Описание Пример заполнения
Идентификатор: Имя клиентской системы vision_grafana_48
Наименование: Произвольное имя vision_grafana_48
Тип доступа: Какой тип доступа будет использован Конфиденциальный (потребуется секретный ключ для инициализации протокола входа)
Адрес: IP адрес и порт для клиентской системы https://192.168.186.48/vision/grafana
Активность Отключенные системы не могут инициировать вход и получать токены доступа [x] (должен быть выбран)

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

8.1 Изменение параметров клиентской системы для Grafana#

Откройте страницу со списком клиентских систем (“Безопасность” -> “Клиентские системы”), выберите созданную клиентскую систему и на вкладке “Основное” нажмите кнопку “Изменить”. Заполните значения полей:

Поле Описание Пример заполнения
Типы взаимодействия: типы взаимодействия разрешенные для клиентской системы Authorization Code Flow - стандартное OpenID Connect перенаправление основанное на аутентификации с кодом авторизации, Resource Owner Password Grant - клиентская система имеет доступ к имени пользователя и паролю и обменивает их напрямую с сервером авторизации на токен доступа
Основной путь: URL по умолчанию, используется если серверу требуется перенаправление или обратная ссылка на клиента /
Пути перенаправления: список URL на которые может быть перенаправлен браузер после успешного входа или выхода https://192.168.186.48/vision/grafana/login, https://192.168.186.48/vision/grafana/login/generic_oauth

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

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

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

9. Создание ролей для Grafana#

Для создания новой роли необходимо перейти в параметры клиентской системы (пример: выбрать домен “vision”, нажать “Клиентские системы” и выбрать “vision_grafana_48”). Перейти на вкладку “Роли” и нажать кнопку “Создать”.

В появившемся меню, заполнить поля в соответствии с ролевой моделью:

Поле Описание Пример заполнения
Имя роли Имя роли, используемой в Grafana. На момент создания настоящей инструкции в Grafana используются роли editor, viewer, grafanaadmin, Admin viewer

Нажмите на кнопку “Создать”, после чего роль будет создана и появится в списке.

10. Создание пользователя для Grafana#

Для клиентской системы Grafana (в нашем примере vision_grafana_48) может быть использован тот же пользователь, что и для клиентской системы Визион (в нашем примере vision_core_48). Этому пользователю необходимо назначить роль в клиентской системе Grafana (vision_grafana_48).

11. Добавление ролей пользователю для Grafana#

Для пользователя перейдите на вкладку “Роли”. В разделе “Роли уровня клиентской системы” выберите клиентскую систему Grafana (vision_grafana_48), выберите одну или несколько ролей (например, viewer) и нажмите “Назначить выбранные роли”.

Убедитесь, что для созданной клиенткой системы (например Vision->Клиентcкие системы->vision_grafana_48->области) в разделе “Области по умолчанию” в окне “Назначенные области” отображаются:

  • roles
  • email
  • openid
  • profile

Если это не так, необходимо добавить недостающие области:

12. Настройка конфигурации для Grafana#

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

server:
  protocol: 'config.grafana.protocol'
  http_addr: 'config.grafana.host'
  http_port: '3000'
  domain: '{vision_ip}'
  root_url: '%(protocol)s://%(domain)s/vision/grafana/'
  cert_file: 'config.grafana.tls_cert_file'
  cert_key: 'config.grafana.tls_key_file'
analytics:
  reporting_enabled: 'false'
  check_for_updates: 'false'
  check_for_plugin_updates: 'false'
  feedback_links_enabled: 'false'
security:
  admin_user: 'admin'
  admin_password: 'vault.grafana.security.admin_password'
  allow_embedding: 'true'
dashboards:
  default_home_dashboard_path: '/opt/skala-r/vision/server/grafana/var/dashboards/home.json'
auth:
  signout_redirect_url: 'http://bvs-public.skala-r.tech/realms/vision/protocol/openid-connect/logout?client_id={id_клиентской системы}'
  oauth_allow_insecure_email_lookup: 'true'
auth.anonymous:
  enabled: 'false'
auth.generic_oauth:
  enabled: 'true'
  name: 'BVS'
  allow_sign_up: 'true'
  client_id: '{id_клиентской системы}'
  client_secret: 'vault.grafana.auth.generic_oauth.client_secret'
  scopes: 'openid email profile roles'
#  email_attribute_path: "(contains(keys(@), 'user')) && (contains(user, 'email')) && user.email || preferred_email || preferred_username"
#  login_attribute_path: 'username'
#  name_attribute_path: 'full_name'
  auth_url: 'http://bvs-public.skala-r.tech/realms/vision/protocol/openid-connect/auth'
  token_url: 'http://bvs-public.skala-r.tech/realms/vision/protocol/openid-connect/token'
  api_url: 'http://bvs-public.skala-r.tech/realms/vision/protocol/openid-connect/userinfo'
  role_attribute_path: "contains(roles[*], 'grafanaadmin') && 'GrafanaAdmin' || contains(roles[*], 'admin') && 'Admin' || contains(roles[*], 'editor') && 'Editor' || contains(roles[*], 'viewer') && 'Viewer'"
  role_attribute_strict: 'true'
  allow_assign_grafana_admin: 'true'
 

Необходимо указать реальное значение Client secret клиента. Выполните следующие действия:

  • Сделайте копию файла хранилища секретов: cp /opt/skala-r/vision/.vault_store /opt/skala-r/vision/.vault_store_bak.
  • Запустите команду /opt/skala-r/vision/server/vision_venv/bin/python3 -c "import storage; print(storage.get_initial_data())" > ~/.vault_pass && ansible-vault edit /opt/skala-r/vision/.secrets_vault --vault-password-file=~/.vault_pass && rm -rf ~/.vault_pass && systemctl restart vision_core.service.
  • Для ключа vault.grafana.auth.generic_oauth.client_secret установите значение поля “Пароль” из раздела Основное->Пароль Клиентской системы.
  • Пользователем root запустите скрипт /opt/skala-r/vision/tools/update_server_configs.sh
  • Убедитесь, что сервисы Визион.Сервера успешно запущены cd /opt/skala-r/vision/ && ./check_service.sh.
  • Перейдите в веб-интерфейс Визиона, открыв Интернет браузер, и введя в строке адреса IP-адрес сервера Визиона (https://<vision-ip>), после чего выберите пункт “Аналитические панели”.
  • Убедитесь, что была запрошена авторизация через BVS