Конфигурирование NGINX с заголовком http пользователя / заголовком пользователя?

У меня есть конфигурация nginx, которая выполняет аутентификацию ssl-pki - я с радостью могу аутентифицировать своих пользователей.

Тем не менее, я хочу пойти еще дальше - я хочу разрешить / запретить доступ к ресурсам на основе переменных ssl - в частности, $ssl_client_s_dn (и убедитесь, что $ssl_client_verify это "УСПЕХ")

Исходя из этого, я хочу выборочно разрешать / запрещать группы URL-адресов на основе списка пользователей. В этом сценарии Elasticsearch. Я имею:

  • Некоторые распространенные API, к которым я хочу получить доступ (состояние сервера, состояние кластера, "ping").
  • По некоторым признакам, я хочу, чтобы одна группа пользователей могла "видеть"
  • Некоторые показатели я хочу, чтобы другая группа пользователей "увидела".

Теперь, похоже, я могу сделать это с http_auth_request - перенаправить на URL-адрес 'auth' - как описано в этом блоге

Но это кажется мне немного излишним, так как для этого мне придется написать свой собственный "движок", чтобы принимать / читать http, проверять его на соответствие количеству регулярных выражений и выкладывать код ответа.

Что я пытаюсь сделать "белый список", например, для меня:

allow if /(logstash|filebeat|topbeat)-mygroup-.*/;

(где mygroup где-то читается из файла и в идеале позволяет иметь членство в нескольких группах).

Теперь это лучше всего сделать с http_auth_request и подача его в действительно урезанное веб-приложение валидатора (автономный скрипт или скрипт типа cgi внутри NGINX) или есть лучший способ?

Этот модуль является дополнительным для nginx, что означает перекомпиляцию. Это не катастрофа, но если в этом нет необходимости (и я смогу продолжать использовать 'stock' nginx), это было бы предпочтительнее.

1 ответ

Возможно, что-то подобное будет работать. Если указан путь к файлу, он вернет "Запрещенный" ответ, если $ssl_client_verify был установлен соответствующим образом.

location ^~ /(logstash|filebeat|topbeat) {
   if ($ssl_client_verify != "SUCCESS") {
    return 403;
   }
}
Другие вопросы по тегам