Аутентификация
Аутентификация трафика — проверка учётных данных клиента, которую система 5А выполняет до отправки запроса на клиентский сервер. Она отвечает на два вопроса: кто пришёл и можно ли его пустить на этот сервис.
Проверенный клиентский запрос передаётся на клиентский сервер, а тот получает вместо учётных данных имя пользователя, группы и атрибуты. Приложению не нужно вести собственный учёт пользователей и проверять пароль на каждом запросе.
Обычная конфигурация балансировки пропускает всех, кто обращается по опубликованному адресу. Аутентификация превращает такую конфигурацию в закрытую: запрос без учётных данных на бэкенд не передаётся.
Аутентификация трафика — не то же самое, что вход в интерфейс системы 5А. Учётные записи операторов, роли и вход через LDAP описаны в разделе Управление доступом.
Из чего состоит
Настройка держится на четырёх объектах кластера балансировки:
| Объект | Что задаёт | Где создаётся |
|---|---|---|
| Набор пользователей | Логины, пароли и группы, которые проверяет балансировщик | Главная → <Кластер> → Аутентификация → Наборы пользователей |
| Профиль аутентификации | Как принимать учётные данные, как проверять, что передать на бэкенд | Главная → <Кластер> → Аутентификация → Профили |
| Провайдер аутентификации | Адреса и ключи внешней системы входа, общие в рамках кластера | Главная → <Кластер> → Аутентификация → Провайдеры |
| Привязка профиля | На каких путях сервиса работает профиль и кого он пускает | Вкладка Безопасность в конфигурации балансировки |
В боковом меню кластера балансировки раздел Аутентификация содержит три вкладки — Профили, Наборы пользователей и Провайдеры. Привязка профиля к сервису настраивается отдельно, в конфигурации балансировки. В GSLB-кластере аутентификации трафика нет.
Набор пользователей нужен не для каждого профиля. Там, где клиент приходит уже с подписанным токеном от внешнего поставщика идентификации — Keycloak, Azure AD, Okta, — пароли в системе 5А не хранятся, и набор можно не создавать.
Привязка работает только на сервисах с L4-протоколом TCP и L7-протоколом HTTP или HTTPS. Для других сочетаний протоколов секция Аутентификация на вкладке Безопасность не показывается. Сервис с протоколом gRPC попадает под это ограничение: профиль к нему привязать нельзя, и запросы к такому сервису проходят без проверки учётных данных.
Название и описание
У профилей аутентификации, наборов пользователей и провайдеров два общих поля.
Все поля, отмеченные
, являются обязательными для заполнения.
- Название — имя, по которому объект выбирают в списках и в привязках. Уникально в пределах кластера: на повтор система отвечает, что объект с таким именем уже существует.
- Описание — произвольный текст для администратора, на проверку не влияет. Пустое значение показывается в таблице прочерком.
Порядок настройки
-
Создайте набор пользователей — если клиенты будут входить по логину и паролю. В нём задайте логины, пароли и группы. Группы понадобятся, чтобы пускать к сервису не всех подряд, а только сотрудников нужного отдела.
-
Создайте профиль аутентификации и выберите в нём модули: как балансировщик примет учётные данные, чем проверит и что отдаст на бэкенд.
-
Привяжите профиль к сервису на вкладке Безопасность его конфигурации балансировки. В привязке укажите, какие пути закрыть и какие группы пропускать.
Порядок именно такой: профиль действует только там, куда он привязан, а привязка настраивается на конкретный профиль. Набор пользователей можно создать и позже: профиль ссылается на него, а не хранит копию записей, поэтому изменения в наборе подхватываются автоматически.
Для входа через внешнюю систему идентификации порядок другой: сначала создаётся провайдер аутентификации, затем профиль с модулями oidc. Полный порядок — в статье Вход через внешний провайдер (OIDC).
Привязка задаёт, какую часть сервиса закрыть и кого на неё пускать: можно закрыть сервис целиком или отдельные пути и допускать только определённые группы. Если правило должно учитывать что-то помимо этого — метод запроса, заголовок, адрес клиента, — добавьте политику или сценарий: см. Аутентификация в политиках и сценариях.
Типовые задачи
Закрыть сервис паролем
Задача: опубликованный сервис открыт всем, кто знает адрес. Нужно пускать только сотрудников с логином и паролем.
-
Создайте набор пользователей с логинами сотрудников. Сотрудникам, которым доступен не весь сервис, задайте общую группу, например
office. -
Создайте профиль аутентификации: в блоке Приём учётных данных добавьте модуль
basic, в блоке Проверка —local_dbи укажите набор, в блоке Передача на бэкенд —header. -
Привяжите профиль к сервису с областью применения Весь сервис.
Клиент без заголовка Authorization получит отказ, и запрос на бэкенд передан не будет. Клиентский сервер при этом получит заголовки X-Auth-User и X-Auth-Groups и увидит, кто именно обратился.
Открыть админку отдельно от основного сервиса
Задача: основной сервис открыт всем аутентифицированным сотрудникам, а административный интерфейс — только группе admins. Оба пути обслуживает один и тот же клиентский сервер.
-
Создайте набор пользователей с двумя группами:
officeдля всех иadminsдля сотрудников с доступом к админке. -
Создайте один профиль аутентификации — он может и принять пароль, и передать имя пользователя и группы заголовками.
-
Добавьте в конфигурацию балансировки две привязки этого профиля: первую с областью Кроме путей и пути админки, вторую — только на эти пути с разрешённой группой
admins.
Копировать профиль и создавать вторую базу пользователей не нужно: список путей и требуемые группы задаются в привязке, а профиль остаётся один.
Пускать клиентов с токеном внешнего провайдера
Задача: сотрудники входят во внешнюю систему и получают там подписанный токен. На второй сервис они должны попадать без повторного ввода пароля.
-
Уточните у провайдера адрес набора ключей, издателя, получателя и имена утверждений, в которых лежат имя пользователя и группы.
-
Создайте профиль аутентификации: в блоке Приём учётных данных — модуль
jwt, в блоке Проверка —jwtс источником ключа Набор ключей провайдера (JWKS). Если провайдер кладёт токен не вAuthorization, задайте источник в настройках модуляjwt. -
Проверьте имена утверждений: в Утверждение с именем пользователя и Утверждение со списком групп должны стоять имена полей токена провайдера. Если поля пустые, используются
subиgroups. -
В блоке Передача на бэкенд добавьте модуль
header, чтобы приложение получило имя пользователя и группы отдельными заголовками. -
Привяжите профиль к сервису, указав требуемые группы, если доступ к сервису не для всех.
Набор пользователей при этом не создаётся: пароли в системе 5А не хранятся, проверяется только подпись токена.
Пускать клиентов через внешнюю систему идентификации
Задача: сотрудники входят в Keycloak или Entra ID, а приложение должно получать имя пользователя и группы без единого пароля в системе 5А.
- Создайте провайдера аутентификации с адресом вашей системы входа и нажмите Получить сведения, чтобы подставить адреса эндпоинтов, адрес набора ключей и свойства провайдера из метаданных.
- Создайте профиль аутентификации с модулями oidc в блоках Приём учётных данных и Проверка, укажите провайдера и ID клиента с Секретом клиента из регистрации в Keycloak.
- Проверьте имена полей токена: в Поле токена с пользователем и Поле токена с группами должны стоять имена, которые использует ваш провайдер. У Keycloak группы лежат во вложенном поле
realm_access.roles. - Сохраните профиль, привяжите его к сервису и передайте администратору Keycloak адрес возврата из секции Регистрация у провайдера.
Подробный порядок с примерами — в статье Вход через внешний провайдер (OIDC).
Передать имя пользователя и завершить выход
Задача: приложение ведёт сессию само и показывает пользователю кнопку Выйти. После выхода приложение не должно тут же создать новую сессию для того же пользователя.
-
Создайте профиль аутентификации с модулем
formв блоке приёма и на вкладке Сессии включите сессии. -
В привязке профиля добавьте адреса выхода приложения, например
/logout, и оставьте область применения Весь сервис.
Запрос по адресу выхода передаётся на бэкенд как обычно, но сессия балансировщика на этом запросе завершится. Без этих адресов кнопка Выйти в приложении не работает: следующий запрос снова содержит имя пользователя и группы, поэтому приложение создаёт новую сессию для того же пользователя.
Что проверить
Проверяйте аутентификацию на опубликованном адресе, а не на клиентском сервере: на бэкенд запрос не передаётся, и проверка на самом сервере ничего не покажет.
-
Откройте защищённый путь в браузере без учётных данных — ожидается отказ с кодом, заданным в настройках отказа, а не страница приложения.
-
Повторите запрос с верными учётными данными — ожидается штатная страница приложения.
-
Посмотрите заголовки запроса, отправленного на клиентский сервер: в них должны быть
X-Auth-UserиX-Auth-Groupsс именем пользователя и его группами.
Если вместо отказа приходит страница приложения, профиль не привязан к этому сервису либо область применения привязки его не покрывает.