The Identity Provider

The Elastic Stack supports the SAML 2.0 Web Browser SSO and the SAML 2.0 Single Logout profiles and can integrate with any Identity Provider (IdP) that supports at least the SAML 2.0 Web Browser SSO Profile. It has been tested with a number of popular IdP implementations.

This guide assumes that you have an existing IdP and wish to add Kibana as a Service Provider.

The Elastic Stack uses a standard SAML metadata document, in XML format that defines the capabilities and features of your IdP. You should be able to download or generate such a document within your IdP administration interface.

Download the IdP metadata document and store it within the config directory on each Elasticsearch node. For the purposes of this guide, we will assume that you are storing it as config/saml/idp-metadata.xml.

The IdP will have been assigned an identifier (EntityID in SAML terminology) which is most commonly expressed in Uniform Resource Identifier (URI) form. Your admin interface may tell you what this is, or you might need to read the metadata document to find it - look for the entityID attribute on the EntityDescriptor element.

Most IdPs will provide an appropriate metadata file with all the features that the Elastic Stack requires, and should only require the configuration steps described below. For completeness sake, the minimum requirements that the Elastic Stack has for the IdP’s metadata are:

  • An <EntityDescriptor> with an entityID that matches the Elasticsearch configuration
  • An <IDPSSODescriptor> that supports the SAML 2.0 protocol (urn:oasis:names:tc:SAML:2.0:protocol).
  • At least one <KeyDescriptor> that is configured for signing (that is, it has use="signing" or leaves the use unspecified)
  • A <SingleSignOnService> with binding of HTTP-Redirect (urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect)
  • If you wish to support Single Logout, a <SingleLogoutService> with binding of HTTP-Redirect (urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect)

The Elastic Stack requires that all messages from the IdP are signed. For authentication <Response> messages, the signature may be applied to either the response itself, or to the individual assertions. For <LogoutRequest> messages, the message itself must be signed, and the signature should be provided as a URL parameter, as required by the HTTP-Redirect binding.