Рейтинг:1

Обратный прокси-сервер Apache с аутентификацией Kerberos и авторизацией LDAP

флаг to

Версия сервера: Apache/2.4.37 (Red Hat Enterprise Linux) Apache запускается как контейнер в кластере Openshift.

Я использую Apache в качестве прямого и обратного прокси для Kibana.

Обязательным требованием является использование Kerberos и наличие ролевой модели для разграничения доступа. Я создал в elasticsearch пользователей admin и viewer. В зависимости от группы LDAP апач должен передавать либо заголовок с логином и паролем администратора, либо вьювер. Но я никак не могу его получить.

  • Моя конфигурация:
<AuthnProviderAlias ldap ldap-access>
    AuthLDAPURL "ldap://ldap.example.com:389/dc=example,dc=com?cn?sub?(objectClass=user)"
    AuthLDAPBindDN "CN=ServiceAccount,OU=Users,DC=example,DC=com"
    AuthLDAPBindPassword "password"
</AuthnProviderAlias>

<AuthzProviderAlias ldap-group ldap-group-viewer CN=viewer,OU=Groups,DC=example,DC=com>
    AuthLDAPURL "ldap://ldap.example.com:389/dc=example,dc=com?cn?sub?(objectClass=user)"
    AuthLDAPBindDN "CN=ServiceAccount,OU=Users,DC=example,DC=com"
    AuthLDAPBindPassword "password""
</AuthzProviderAlias>

<AuthzProviderAlias ldap-group ldap-group-admin CN=admin,OU=Groups,DC=example,DC=com>
    AuthLDAPURL "ldap://ldap.example.com:389/dc=example,dc=com?cn?sub?(objectClass=user)"
    AuthLDAPBindDN "CN=ServiceAccount,OU=Users,DC=example,DC=com"
    AuthLDAPBindPassword "password""
</AuthzProviderAlias>


<LocationMatch "/kibana">
    AuthType GSSAPI
    AuthName "Kerberos Auth"

    GssapiSSLonly Off
    GssapiBasicAuth On
    GssapiAllowedMech krb5

    GssapiSessionKey file:/tmp/session.key
    GssapiCredStore keytab:/etc/httpd/krb5.keytab
    GssapiCredStore ccache:FILE:/var/run/httpd/krb5ccache
    GssapiDelegCcacheDir /var/run/httpd/clientcaches
    GssapiImpersonate On
    GssapiLocalName On

    GssapiUseSessions On
    Session On
    SessionExpiryUpdateInterval 300
    SessionInclude /
    SessionCookieName gssapi_session path=/;httponly;secure;
    
    BrowserMatch Windows gssapi-no-negotiate
    LogLevel debug

    AuthBasicProvider ldap-access
    <RequireAll>
      Require ldap-group-viewer
      Require ldap-group-admin
    </RequireAll>

    ProxyPass http://kibana:5601/kibana
    ProxyPassReverse http://kibana:5601/kibana

    RequestHeader set Authorization "Basic dmlld2VyOnZpZXdlcg=="
    
</LocationMatch>

В этой конфигурации все пользователи в группах заходят под одним логином, но мне нужно разделить права.

  • Для зрителей - RequestHeader установить авторизацию "Basic dmlld2VyOnZpZXdlcg=="
  • Для администраторов - RequestHeader установить авторизацию "Basic YWRtaW46YWRtaW4="

Я попытался добавить атрибут к URL-адресу LDAP и использовать переменную AUTHORIZATION_Viewer, как здесь Apache: как узнать, на каком сервере LDAP был аутентифицирован мой пользователь:

AuthLDAPURL "ldap://ldap.example.com:389/dc=example,dc=com?cn,Viewer?sub?(objectClass=user)" 

А потом:

RequestHeader устанавливает авторизацию "Basic dmlld2VyOnZpZXdlcg==" env=AUTHENTICATE_Viewer

Но в логах апача такая переменная вообще не появляется.

Тоже пробовал вариант с блоком, но безуспешно.

Есть ли способ создать подобие ролевой модели в апаче?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.