具有 Kerberos 身份验证和 LDAP 授权的 Apache 反向代理

具有 Kerberos 身份验证和 LDAP 授权的 Apache 反向代理

服务器版本:Apache/2.4.37(Red Hat Enterprise Linux)Apache 作为 Openshift 集群中的容器启动。

我正在使用 Apache 作为 Kibana 的正向和反向代理。

强制性要求是使用 Kerberos 并需要一个角色模型来区分访问。我在 elasticsearch 中创建了管理员和查看者用户。根据 LDAP 组,Apache 必须传输带有管理员登录名和密码的标头或查看者。但我没有办法得到它。

  • 我的配置:
<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 设置 Authorization "Basic YWRtaW46YWRtaW4="

我尝试向 LDAP url 添加一个属性并使用变量 AUTHORIZATION_Viewer ,如下所示Apache:如何判断我的用户通过哪个 LDAP 服务器进行了身份验证

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

进而:

RequestHeader set Authorization "Basic dmlld2VyOnZpZXdlcg==" env=AUTHENTICATE_Viewer

但是在Apache日志中根本没有出现这样的变量。

还尝试了块选项,但没有成功。

有没有什么方法可以在 Apache 中创建一个类似于榜样的东西?

相关内容