Версия сервера: 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
Но в логах апача такая переменная вообще не появляется.
Тоже пробовал вариант с блоком, но безуспешно.
Есть ли способ создать подобие ролевой модели в апаче?