Настройка NGINX с http-заголовком / пользователем списка пользователей?

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

Однако я хочу пойти немного дальше - я хочу разрешить / запретить доступ к ресурсам на основе переменных ssl, в частности $ ssl_client_s_dn (и проверить, что $ ssl_client_verify is 'SUCCESS')

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

  • Некоторые общие API-интерфейсы, к которым я хочу получить доступ (состояние сервера, состояние кластера, «пинг»).
  • Некоторые признаки, что я хочу, чтобы одна группа пользователей могла «видеть»
  • Некоторые индексы, которые я хочу другая группа пользователей, которых нужно «увидеть».

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

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

То, что я пытаюсь внести в «белый список», например, для меня:

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

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

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

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

1
задан 27 January 2016 в 11:33
1 ответ

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

location ^~ /(logstash|filebeat|topbeat) {
   if ($ssl_client_verify != "SUCCESS") {
    return 403;
   }
}
0
ответ дан 4 December 2019 в 06:41

Теги

Похожие вопросы