Auth — это механизм, который выполняет аутентификацию до того, как запрос попадёт в реальный сервис. Он позволяет обрабатывать аутентификацию на уровне ALB единообразно, без необходимости реализовывать логику аутентификации в каждом бэкенд-сервисе.
ALB поддерживает два основных метода аутентификации:
Forward Auth (Внешняя аутентификация)
Basic Auth (Базовая аутентификация)
Глобальная аутентификация
Аутентификация на уровне пути
Отключение аутентификации
alb.ingress.cpaas.io/auth-enable: "false"Настройка Basic Auth с ALB
Ingress-nginx определяет ряд аннотаций для настройки конкретных деталей процесса аутентификации. Ниже приведён список аннотаций, поддерживаемых ALB, где "v" означает поддержку, а "x" — отсутствие поддержки.
| support | type | note | |
|---|---|---|---|
| forward-auth | forward auth путём отправки http запроса | ||
| nginx.ingress.kubernetes.io/auth-url | v | string | |
| nginx.ingress.kubernetes.io/auth-method | v | string | |
| nginx.ingress.kubernetes.io/auth-signin | v | string | |
| nginx.ingress.kubernetes.io/auth-signin-redirect-param | v | string | |
| nginx.ingress.kubernetes.io/auth-response-headers | v | string | |
| nginx.ingress.kubernetes.io/auth-proxy-set-headers | v | string | |
| nginx.ingress.kubernetes.io/auth-request-redirect | v | string | |
| nginx.ingress.kubernetes.io/auth-always-set-cookie | v | boolean | |
| nginx.ingress.kubernetes.io/auth-snippet | x | string | |
| basic-auth | аутентификация по имени пользователя и паролю через секрет | ||
| nginx.ingress.kubernetes.io/auth-realm | v | string | |
| nginx.ingress.kubernetes.io/auth-secret | v | string | |
| nginx.ingress.kubernetes.io/auth-secret-type | v | string | |
| nginx.ingress.kubernetes.io/auth-type | - | "basic" or "digest" | basic: поддерживается apr1 digest: не поддерживается |
| auth-cache | |||
| nginx.ingress.kubernetes.io/auth-cache-key | x | string | |
| nginx.ingress.kubernetes.io/auth-cache-duration | x | string | |
| auth-keepalive | keepalive при отправке запроса. Поведение keepalive задаётся через набор аннотаций | ||
| nginx.ingress.kubernetes.io/auth-keepalive | x | number | |
| nginx.ingress.kubernetes.io/auth-keepalive-share-vars | x | "true" or "false" | |
| nginx.ingress.kubernetes.io/auth-keepalive-requests | x | number | |
| nginx.ingress.kubernetes.io/auth-keepalive-timeout | x | number | |
| auth-tls | при https запросе дополнительная проверка сертификата | ||
| nginx.ingress.kubernetes.io/auth-tls-secret | x | string | |
| nginx.ingress.kubernetes.io/auth-tls-verify-depth | x | number | |
| nginx.ingress.kubernetes.io/auth-tls-verify-client | x | string | |
| nginx.ingress.kubernetes.io/auth-tls-error-page | x | string | |
| nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream | x | "true" or "false" | |
| nginx.ingress.kubernetes.io/auth-tls-match-cn | x | string |
Связанные аннотации:
Эти аннотации описывают изменения, вносимые в auth-request, app-request и cli-response на диаграмме выше.
URL для auth-request, значение может быть переменной.
Метод для auth-request.
Значение — ссылка на ConfigMap в формате ns/name.
По умолчанию все заголовки из cli-request отправляются в auth-server. Дополнительные заголовки можно настроить через proxy_set_header. По умолчанию отправляются следующие заголовки:
Значение — строка с разделёнными запятыми заголовками, позволяющая передавать определённые заголовки из auth-response в app-request. пример:
Когда ALB инициирует app-request, он включит Remote-User и Remote-Name из заголовков auth-response.
auth-response и app-response могут устанавливать cookie. По умолчанию, только если app-response успешен, cookie из auth-response.set-cookie будут объединены с cli-response.set-cookie.
Когда auth-server возвращает 401, можно установить заголовок redirect в cli-response, чтобы браузер перенаправился на URL, указанный в auth-signin для прохождения проверки.
Значение — URL, задаёт заголовок location в cli-response.
Имя параметра запроса в signin-url, по умолчанию rd.
Если signin-url не содержит параметр с именем, указанным в auth-signin-redirect-param, ALB автоматически добавит этот параметр. Значение параметра будет установлено в $pass_access_scheme://$http_host$escaped_request_uri, используется для записи исходного URL запроса.
Устанавливает заголовок x-auth-request-redirect в auth-request.
basic-auth — процесс аутентификации, описанный в RFC 7617. Процесс взаимодействия следующий:
описание защищённой области
Это значение realm в заголовке WWW-Authenticate cli-response.
WWW-Authenticate: Basic realm="$realm"
Тип схемы аутентификации, в настоящее время поддерживается только basic
Ссылка на секрет с именем пользователя и паролем, формат ns/name
Секрет поддерживает два типа:
auth-file: данные секрета содержат только один ключ "auth", значение — строка в формате Apache htpasswd. Например:
auth-map: в данных секрета каждый ключ — это имя пользователя, а соответствующее значение — хэш пароля (без имени пользователя в формате htpasswd). Например:
Примечание: в настоящее время поддерживаются только хэши паролей в формате htpasswd, сгенерированные с использованием алгоритма apr1.
В ALB CR добавлены конфигурационные параметры, связанные с аутентификацией, которые можно настроить в ALB/Frontend/Rule CR. Во время выполнения ALB преобразует аннотации в Ingress в правила.
Поддерживается конфигурация Auth на:
.spec.config.auth.spec.config.auth.spec.config.authПорядок наследования: Alb > Frontend > Rule. Если дочерний CR не настроен, используется конфигурация родительского CR.
При обработке Ingress ALB определяет приоритет на основе префикса аннотации. Приоритет от высокого к низкому:
index.$rule_index-$path_index.alb.ingress.cpaas.ioalb.ingress.cpaas.ionginx.ingress.kubernetes.ioЭто позволяет решать проблему совместимости с ingress-nginx и задавать конфигурацию аутентификации на конкретном пути Ingress.
Новая аннотация, добавленная ALB, используется для указания, включена ли функция аутентификации для данного Ingress.
В ingress-nginx можно задать глобальную аутентификацию через ConfigMap. Это эквивалентно настройке аутентификации для всех Ingress. В ALB аутентификация настраивается в ALB2 и FT CR. Правила внутри них наследуют эти настройки.
В ALB можно отключить функцию аутентификации для данного Ingress, настроив аннотацию: alb.ingress.cpaas.io/auth-enable: "false" в Ingress.
X-ALB-ERR-REASON в ответе