Auth
Содержание
Основная концепция
Что такое Auth
Auth — это механизм, который выполняет аутентификацию до того, как запрос попадёт к реальному сервису. Он позволяет обрабатывать аутентификацию на уровне ALB единообразно, без необходимости реализовывать логику аутентификации в каждом backend-сервисе.
Поддерживаемые методы аутентификации
ALB поддерживает два основных метода аутентификации:
-
Forward Auth (Внешняя аутентификация)
- Отправка запроса во внешний сервис аутентификации для проверки личности пользователя
- Сценарии применения: требуется сложная логика аутентификации, например OAuth, SSO и т.д.
- Рабочий процесс:
- Запрос пользователя поступает на ALB
- ALB пересылает информацию для аутентификации в сервис аутентификации
- Сервис аутентификации возвращает результат проверки
- На основе результата аутентификации принимается решение о допуске к backend-сервису
-
Basic Auth (Базовая аутентификация)
- Простой механизм аутентификации на основе имени пользователя и пароля
- Сценарии применения: простое управление доступом, защита среды разработки
- Рабочий процесс:
- Запрос пользователя поступает на ALB
- ALB проверяет имя пользователя и пароль в запросе
- Сравнивает с настроенной информацией для аутентификации
- Если проверка успешна, запрос перенаправляется к backend-сервису
Способы настройки Auth
-
Глобальная аутентификация
- Настраивается на уровне ALB, применяется ко всем сервисам
- Настраивается в ALB или FT CR
-
Аутентификация на уровне пути
- Настраивается на конкретном пути Ingress
- Настраивается на конкретном Rule
- Может переопределять глобальную конфигурацию аутентификации
-
Отключение аутентификации
- Отключение аутентификации для конкретного пути
- Настраивается в Ingress с аннотацией:
alb.ingress.cpaas.io/auth-enable: "false" - Настраивается в Rule с помощью CR
Обработка результата аутентификации
- Успешная аутентификация: запрос будет перенаправлен к backend-сервису
- Ошибка аутентификации: возвращается ошибка 401 unauthorized
- Можно настроить поведение перенаправления после ошибки аутентификации (применимо к Forward Auth)
Быстрый старт
Настройка Basic Auth с ALB
Развёртывание ALB
Настройка Secret и Ingress
Проверка
Связанные аннотации Ingress
Ingress-nginx определяет ряд аннотаций для настройки конкретных деталей процесса аутентификации. Ниже приведён список аннотаций, поддерживаемых ALB, где "v" означает поддержку, а "x" — отсутствие поддержки.
forward-auth
Связанные аннотации:
- nginx.ingress.kubernetes.io/auth-url
- nginx.ingress.kubernetes.io/auth-method
- nginx.ingress.kubernetes.io/auth-signin
- nginx.ingress.kubernetes.io/auth-signin-redirect-param
- nginx.ingress.kubernetes.io/auth-response-headers
- nginx.ingress.kubernetes.io/auth-proxy-set-headers
- nginx.ingress.kubernetes.io/auth-request-redirect
- nginx.ingress.kubernetes.io/auth-always-set-cookie
Эти аннотации описывают изменения, вносимые в auth-request, app-request и cli-response на диаграмме выше.
Конфигурация связанных аннотаций
auth-url
URL для auth-request, значение может быть переменной.
auth-method
Метод для auth-request.
auth-proxy-set-headers
Значение — ссылка на ConfigMap в формате ns/name.
По умолчанию все заголовки из cli-request отправляются auth-server. Дополнительные заголовки можно настроить через proxy_set_header. По умолчанию отправляются следующие заголовки:
Конфигурация аннотаций, связанных с app-request
auth-response-headers
Значение — строка с разделёнными запятыми заголовками, позволяющая перенести конкретные заголовки из auth-response в app-request. пример:
Когда ALB инициирует app-request, он включит Remote-User и Remote-Name из заголовков auth-response.
Обработка cookie
auth-response и app-response могут устанавливать cookie. По умолчанию, только если app-response.success, cookie из auth-response.set-cookie будут объединены с cli-response.set-cookie.
Конфигурация, связанная с Redirect sign
Когда auth-server возвращает 401, можно установить заголовок redirect в cli-response, чтобы браузер перенаправился на url, указанный в auth-signin, для прохождения проверки.
auth-signin
Значение — url, указывает заголовок location в cli-response.
auth-signin-redirect-param
Имя параметра запроса в signin-url, по умолчанию rd.
Если signin-url не содержит параметр с именем, указанным в auth-signin-redirect-param, alb автоматически добавит этот параметр. Значение параметра будет установлено в $pass_access_scheme://$http_host$escaped_request_uri, чтобы сохранить исходный URL запроса.
auth-request-redirect
Устанавливает заголовок x-auth-request-redirect в auth-request.
basic-auth
basic-auth — процесс аутентификации, описанный в RFC 7617. Процесс взаимодействия следующий:
auth-realm
описание защищённой области
Это значение realm в заголовке WWW-Authenticate cli-response.
WWW-Authenticate: Basic realm="$realm"
auth-type
Тип схемы аутентификации, в настоящее время поддерживается только basic
auth-secret
Ссылка на secret с именем пользователя и паролем, формат ns/name
auth-secret-type
Secret поддерживает два типа:
-
auth-file: данные secret содержат только один ключ "auth", значение — строка в формате Apache htpasswd. Например:
-
auth-map: данные secret, где каждый ключ — имя пользователя, а соответствующее значение — хэш пароля (без имени пользователя в формате htpasswd). Например:
Примечание: в настоящее время поддерживаются только хэши паролей в формате htpasswd, сгенерированные алгоритмом apr1.
CR
В ALB CR добавлены конфигурационные параметры, связанные с auth, которые можно настроить в ALB/Frontend/Rule CR. Во время выполнения ALB преобразует аннотации на Ingress в правила.
Auth поддерживает настройку в:
- Alb CR в
.spec.config.auth - Frontend CR в
.spec.config.auth - Rule CR в
.spec.config.auth
Порядок наследования: Alb > Frontend > Rule. Если дочерний CR не настроен, используется конфигурация родительского CR.
Специальная аннотация Ingress для ALB
При обработке Ingress ALB определяет приоритет на основе префикса аннотации. Приоритет от высокого к низкому:
index.$rule_index-$path_index.alb.ingress.cpaas.ioalb.ingress.cpaas.ionginx.ingress.kubernetes.io
Это позволяет решить проблему совместимости с ingress-nginx и задать конфигурацию auth для конкретного пути Ingress.
Auth-Enable
Новая аннотация, добавленная ALB, используется для указания, включена ли функция аутентификации для Ingress.
Другие функции, связанные с аутентификацией в Ingress-Nginx
Global-Auth
В ingress-nginx можно задать глобальную аутентификацию через ConfigMap. Это эквивалентно настройке auth для всех Ingress. В ALB можно настроить auth в ALB2 и FT CR. Правила под ними наследуют эти настройки.
No-Auth-Locations
В ALB можно отключить функцию auth для этого Ingress, настроив аннотацию: alb.ingress.cpaas.io/auth-enable: "false" в Ingress.
Примечание: несовместимые моменты с Ingress-Nginx
- Не поддерживается auth-keepalive
- Не поддерживается auth-snippet
- Не поддерживается auth-cache
- Не поддерживается auth-tls
- Basic-auth поддерживает только basic, digest не поддерживается
- Basic-auth basic поддерживает только алгоритм apr1, bcrypt, sha256 и другие не поддерживаются
Устранение неполадок
- Проверьте логи контейнера Nginx в pod ALB
- Проверьте заголовок
X-ALB-ERR-REASONв ответе