Вы можете разрешить пользователям платформы авторизоваться только с определённых IP-адресов и подсетей. Для этого:

  1. Создайте в платформе группы пользователей.
  2. Задайте для каждой группы список разрешённых IP-адресов.

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

Если пользователь не состоит ни в одной из групп, он может авторизоваться в платформе с любого IP-адреса.

Управление группами пользователей


Для управления группами перейдите в ПользователиГруппы пользователей.


Интерфейс раздела


Для создания группы:

  1. Нажмите Создать группу.
  2. Укажите параметры группы:
    1. Название.
    2. IP-адреса для доступа к платформе. Список может содержать отдельные IP-адреса, диапазоны и подсети IP-адресов.
  3. Нажмите Сохранить.

Пример создания группы


Чтобы изменить настройки созданной группы, нажмите  или Настроить.

Чтобы удалить группу, нажмите или Удалить.

Чтобы добавить или удалить пользователей из группы:

  1. Нажмите Изменить участников группы.
  2. Выберите пользователей, которых надо добавить.
  3. Снимите отметку у пользователей, которых надо удалить.
  4. Нажмите Сохранить изменения.

Пример изменения участников группы

Управление доступом через API


Для каждой группы пользователей платформа создаёт список управления доступом (ACL). ACL содержит email участников группы и списки разрешённых IP-адресов.

Создание ACL

Чтобы создать ACL:

  1. Получите токен авторизации:

    curl -X POST 'https://domain.com/api/auth/v4/public/token' -d '{"email": "admin_email", "password": "admin_pass"}'
    CODE

    domain.com — доменное имя или IP-адрес сервера с платформой

    admin_email — email администратора платформы

    admin_pass — пароль администратора платформы

    В ответ придёт сообщение вида:

    Пример ответа в JSON

    {
      "confirmed": true,
      "id": "6",
      "token": "4-e9726dd9-61d9-2940-add3-914851d2cb8a"
    }
    CODE

    Сохраните полученное значение параметра token — токен авторизации.

  2. Выполните запрос:

    curl -H 'x-xsrf-token: <token>' -X POST https://domain.com/auth/v4/acl -d '{"name": "<acl_name>", "ip_list": [<ip>], "members": [<users_id>]}' 
    CODE

    <token> — токен авторизации

    domain.com — доменное имя сервера с платформой

    <acl_name> — название ACL

    <ip> — список разрешённых IP-адресов. Список может содержать отдельные IP-адреса, диапазоны и подсети IP-адресов. Каждое значение списка должно быть указано в кавычках

    <users_id> — список id пользователей платформы. Каждое значение списка должно быть указано в кавычках

    Обратите внимание!

    id пользователей вы можете посмотреть в интерфейсе платформы в разделе Пользователи .

    Ответ будет содержать id созданного ACL.

    Пример создания ACL

    curl -H 'x-xsrf-token: 4-e9726dd9-61d9-2940-add3-914851d2cb8a' -X POST https://domain.com/auth/v4/acl -d '{"name": "admin1", "ip_list": ["192.0.2.1","192.0.2.10-192.0.2.20","192.0.2.100/28"], "members": ["1","3","7"}' 
    CODE

    Запрос создаcт ACL с именем admin1. Пользователям с id 1, 3, 7 будет разрешён доступ к платформе с IP-адресов 192.0.2.1, 192.0.2.10-192.0.2.20 и подсети 192.0.2.100/28.

    Пример ответа

    {
      "id": "12"
    }
    CODE

Просмотр ACL

Чтобы посмотреть все созданные ACL, выполните запрос:

curl -H 'x-xsrf-token: <token>' GET https://domain.com/auth/v4/acl
CODE

<token> — токен авторизации

domain.com — доменное имя сервера с платформой

Чтобы посмотреть конкретный ACL, выполните запрос:

curl -H 'x-xsrf-token: <token>' GET https://domain.com/auth/v4/acl/<acl_id>
CODE

<token> — токен авторизации

domain.com — доменное имя сервера с платформой

<acl_id> — id созданного ACL

Пример ответа

{
  "ip_list": [
    "192.0.2.1",
    "192.0.2.10-192.0.2.20",
    "192.0.2.100/28"
  ],
  "name": "admin1",
  "users": [
    "user1@example.com",
    "user3@example.com",
	"user7@example.com"
  ]
}
CODE

Удаление ACL

Чтобы удалить конкретный ACL, выполните запрос:

curl -H 'x-xsrf-token: <token>' -X DELETE https://domain.com/auth/v4/acl/<acl_id>
CODE

<token> — токен авторизации

domain.com — доменное имя сервера с платформой

<acl_id> — id созданного ACL

При успешном удалении ответ будет содержать "true".

Если потерян доступ к платформе


Обратите внимание!

Раздел содержит команды по изменению базы данных (БД) платформы. Перед выполнением этих действий рекомендуем создать резервную копию платформы.

Если из-за ошибок в настройках ACL доступ к платформе был потерян, вы можете удалить ACL из базы данных платформы:

  1. Подключитесь к серверу с платформой по SSH.
  2. Подключитесь к БД платформы:

    В связи с поэтапным переходом платформы на использование СУБД PostgreSQL, разные экземпляры VMmanager могут использовать разные СУБД:

    • VMmanager Hosting — MySQL;
    • VMmanager Infrastructure:
      • для новых установок на ОС Astra Linux, начиная с версии VMmanager 2023.06.1 — PostgreSQL;
      • в остальных случаях — MySQL.

    Чтобы определить тип СУБД, выполните на сервере с платформой команду: 

    docker ps --filter name=pgsql
    BASH

    Пример ответа

    CONTAINER ID   IMAGE         COMMAND                  CREATED      STATUS      PORTS      NAMES
    3213c5dc94d0   postgres:12   "docker-entrypoint.s…"   5 days ago   Up 4 days   5432/tcp   pgsql
    CODE

    Если вывод команды содержит информацию о контейнере, платформа использует PostgreSQL, если ответ пустой — MySQL.

    MySQL

    docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD"
    BASH

    PostgreSQL

    docker exec -it pgsql bash -c "psql -d isp"
    BASH
  3. Выполните запрос: 

    select * from auth_user2acl;
    SQL

    Пример ответа

    +----+------+-----+
    | id | user | acl |
    +----+------+-----+
    |  3 |  122 |   4 |
    +----+------+-----+
    CODE

    Сохраните значения из столбцов id и acl.

  4. Выполните запросы: 

    delete from auth_acl where id=<id>;
    SQL
    delete from auth_user2acl where id=<acl>;
    SQL

    <id> — значение столбца id из ответа на запрос в п.3

    <acl> — значение столбца acl из ответа на запрос в п.3