Аутентификация и авторизация сервиса
Привязка профиля — настройка в конфигурации балансировки, которая включает профиль аутентификации на сервис. В ней задаётся, какие пути закрыты, кто проходит, как выглядит отказ и на каких адресах заканчивается сессия.
Один профиль можно привязать к нескольким сервисам, а к одному сервису — несколько профилей. Правила проверки и передачи остаются в профиле, а в привязке задаются только решения, которые относятся к конкретному сервису.
Где настраивается
Секция Аутентификация на вкладке Безопасность в конфигурации балансировки. Пока у сервиса нет привязок, вместо списка показана надпись «Аутентификация не требуется — сервис открыт для всех».
Привязки доступны только для сервисов с L4-протоколом TCP и L7-протоколом HTTP или HTTPS. Для других сочетаний протоколов секция не показывается: профиль проверяет заголовки HTTP-запроса, а у сервиса с другим прикладным протоколом запросы не проверяются. Сервис с протоколом gRPC попадает под это ограничение: привязать к нему профиль нельзя.
Смена протокола сервиса удаляет привязки. Диалог Изменение протокола предупредит заранее: «Выбранный протокол не поддерживает аутентификацию. Привязки профилей будут удалены из конфигурации при сохранении». Отказывайтесь, если закрытый сервис должен остаться закрытым.
Несколько привязок на сервис
Привязки применяются сверху вниз, в том порядке, в каком они перечислены; при двух и более привязках интерфейс подсказывает это подписью «Привязки проверяются сверху вниз». Порядок изменяется перетаскиванием; на одном сервисе профиль нельзя привязать дважды — в окне выбора он помечен как «Уже привязан».
Области привязок следует делать непересекающимися: каждому набору путей — свою привязку. Тогда порядок не влияет на результат, а правила не нужно сверять между собой.
Кнопка Заменить меняет профиль в привязке на другой, сохраняя пути, группы и вид отказа. Это способ перевести сервис на новый профиль, не переписывая привязку.
Область применения
Область применения — пути сервиса, на которых работает профиль.
- Весь сервис — профиль закрывает сервис целиком.
- Кроме путей — профиль закрывает всё, кроме перечисленных путей. Список называется Исключенные пути. Так оставляют открытыми, например, публичную часть сайта или health check.
- Только пути — профиль закрывает только перечисленные пути. Список называется Защищенные пути. Так закрывают админку, не трогая остальное приложение.
Путь — путь, который добавляют в список. Поле появляется для режимов Кроме путей и Только пути, и хотя бы один путь в списке должен быть. Путь записывают так, как он выглядит в адресе сервиса, например /admin. Для режима Весь сервис список путей не задаётся.
Типовой приём — открытый снаружи сервис с закрытой админкой: одна привязка с областью Кроме путей и путём /admin, вторая — с областью Только пути и тем же путём. Копировать профиль и создавать вторую базу пользователей не нужно: список путей и требуемые группы задаются в привязке, а профиль остаётся один.
Разрешенные группы
Разрешенные группы — список имён групп, любая из которых открывает доступ. Список действует по принципу «или»: достаточно совпадения одной группы.
Пустой список означает, что проходит любой аутентифицированный клиент, а принадлежность к группе ничего не добавляет. Это типично для сервиса, доступного всем сотрудникам.
Список выбора наполняется группами из наборов пользователей и требований других привязок. Группы, которые приходят только в токене, в списке не появятся — их указывают вручную, и тогда они попадают в словарь кластера.
Список проверяется целиком, и конфигурация не сохранится, если в нём есть пустое имя, имя длиннее 255 символов, повтор или запятая.
Запятая в имени группы делает список на бэкенд неоднозначным: группы передаются через запятую в заголовке X-Auth-Groups, поэтому строку «Продажи, EMEA» невозможно отличить от двух отдельных групп. Имя группы не должно содержать запятых.
Выход по пути приложения
Секция Выход по пути приложения перечисляет адреса, по которым приложение само завершает свою сессию: /logout, /owa/logoff.owa и подобные.
- Адрес — путь от корня сайта, без имени хоста и без параметров запроса:
/logout, а неhttps://app.example/logout. Адрес не должен содержать пробелов, знаков?и#и не должен повторяться. Параметры в самом запросе совпадению не мешают:/logout?next=/тоже распознаётся как выход, остальное сравнивается точно, с учётом регистра.
Запрос по такому адресу проходит на клиентский сервер как обычно, чтобы приложение закрыло свою сессию; сессия балансировщика на этом запросе завершается одновременно.
Без этих адресов кнопка Выйти в приложении не работает. Приложение закрывает свою сессию, но балансировщик сразу узнаёт клиента снова и передаёт имя пользователя и группы — приложение создаёт новую сессию для того же пользователя.
Адреса требуют включённых сессий в профиле: без них привязку сохранить нельзя. Адрес не должен совпадать со служебным адресом профиля на том же сервисе — запрос до приложения тогда не дойдёт.
Переопределить для этой привязки
Переключатель Переопределить для этой привязки задаёт вид отказа, отличный от профиля. Выключен — берётся поведение из профиля, см. раздел Поведение при отказе в статье о профиле.
Переопределение нужно, когда один профиль обслуживает сервисы с разным характером отказа. Например, у портала клиенту полезна HTML-страница с текстовым сообщением, а у API-сервиса — JSON с кодом 401, и профиль у них общий.
Порядок настройки
- Создайте профиль аутентификации — без него кнопка Привязать профиль не предложит ничего.
- Откройте конфигурацию балансировки и перейдите на вкладку Безопасность.
- В секции Аутентификация нажмите Привязать профиль и выберите профиль из списка.
- Задайте Область применения и пути, если профиль работает не на всём сервисе.
- Заполните Разрешенные группы, если доступ нужен не всем аутентифицированным.
- Добавьте адреса в Выход по пути приложения, если в приложении есть кнопка выхода.
- Сохраните конфигурацию балансировки.
Ссылка Управление профилями в заголовке секции открывает список профилей в соседней вкладке, не теряя правки конфигурации.
Правила, зависящие от метода запроса, заголовка, адреса клиента или от того, кто вошёл, привязкой не задаются: их выносят в политику или сценарий — см. Аутентификация в политиках и сценариях.
Проверка
Проверяйте на опубликованном адресе: запрос на клиентский сервер не передаётся, и проверка на самом сервере ничего не покажет.
- Откройте защищённый путь без учётных данных — ожидается отказ.
- Повторите запрос с верными учётными данными от клиента, входящего в разрешённую группу, — ожидается страница приложения.
- Повторите то же от клиента вне разрешённых групп — ожидается отказ, даже если пароль верный.
- Нажмите Выйти в приложении и после этого запросите защищённый путь снова — ожидается требование входа.
Если вместо отказа приходит страница приложения, проверьте область применения: она может не покрывать этот путь.