- CentOS 7
- Active Directory
- Elasticsearch & Kibana 7.9.3
- Realms configured in ES: Kerberos and AD
- Kerberos authorization_realm: AD
ES cluster set up with keytabs on master and data nodes. I can run
curl --negotiate -u : https://master-fqdn:9200/_security/_authenticate?pretty aginst all nodes and get a nice JSON describing the user and groups from AD. I can do this from any Windows or Linux host where I have a Kerberos session.
Kibana is setup with only one provider:
xpack.security.authc.providers: kerberos.kerberos1: order: 0 description: "Log in with kerberos"
Kibana server is enrolled in kerberos domain (all machines are). Time sync and reverse lookup is working.
When using Firefox to access Kibana (after setting
network.negotiate-auth.trusted-uris in about:config) on both Linux and Windows it sends the
Authorization: Negotiate header with the SPNEGO data, just like curl does. But here I get
GSSException: Defective token detected. GSSHeader did not find the right tag in the ES log and a
401 Unauthorized from Kibana. In the Kibana log I get
SPNEGO is supported by the backend Re-initiating SPNEGO handshake Authentication attempt failed: Unauthorized
I have activated krb5 and spnego debug with JVM command line options for ES. When I run
curl --negotiate I see a lot of Kerberos output in the log, but it's silent when the Kibana reuqest fails. I only see the GSSException stacktrace in the ES log. It seems to me it fails early when trying to extract the SPNEGO token?
It's not NTLM (common error when you see "Defective token") since I get same error on Firefox@Linux and the token looks similar to the one I get with curl.
Is it possible to log the raw http requests coming into ES? It's TLS so not easy to tcpdump the traffic from Kibana to ES. I guess what should happen is that Kibana forwards the
Authorization header to ES.
Any other debugging steps to take?