Использование Envoy proxy для внедрения HTTP-заголовков Kerberos SPN-авторизации

Для конечных точек Kerberized наша реализация плоскости управления предоставляет RDS следующим образом:

Для соответствующего префикса RouteMatch '/someService' RouteAction направляет к WeightedCluster. Envoy предоставляет средства для добавления пользовательских заголовков запросов на уровне ClusterWeight, поэтому в качестве части обнаружения службы мы генерируем токен spn и устанавливаем заголовок "Authorization: Negotiate [spn token] " для всех ClusterWeights, которые составляют WeightedCluster.

(Как правило, в Envoy существует один кластер (назовите его some_service), связанный с '/someService', и этот кластер будет хранить массив всех хостов (адресов), на которых запущен 'someService'. Но так как байты токена Kerberos spn являются функцией само имя хоста, и поскольку Envoy не позволяет устанавливать заголовки запросов на уровне адреса назначения, я создаю несколько "кластеров" для каждого хоста, связанного с "someService" (some_service_0, some_service_1 и т. д.), каждый из которых имеет один адрес, и заполнить мой ClusterWeights ссылками на эти "кластеры")

Это решение работает, я могу свернуть localhost:/someService, и мой вызов будет авторизован на foo.com/someService.

Проблема возникает, когда я делаю последующие запросы до того, как токен будет восстановлен плоскостью управления (xds). Похоже, что Kerberos не позволяет повторно использовать один и тот же токен аутентификации дважды, если это будет сделано, запрос будет отклонен с ошибкой "Запрос является воспроизведением".

Кто-нибудь успешно передал полномочия Kerberos Посланнику? Было бы неплохо, если бы боковая машина могла обрабатывать авторизацию Kerberos вместо того, чтобы наши микросервисы обрабатывали ее самостоятельно. Единственный обходной путь, о котором я могу подумать, - это создать несколько повторяющихся экземпляров ClusterWeight, даже если они указывают на один и тот же хост, причем каждый экземпляр ClusterWeight имеет собственный токен kerberos, и увеличить частоту опроса нашей службы xds, чтобы заявки часто создавались заново. Объединение этих решений только уменьшит вероятность "запроса является ошибкой воспроизведения", но не устранит проблему.

0 ответов

Другие вопросы по тегам