Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document new xpack.security.authc.* settings and related 8.0.0 breaking changes. #61443

Merged
merged 5 commits into from
Apr 1, 2020

Conversation

azasypkin
Copy link
Member

@azasypkin azasypkin commented Mar 26, 2020

This PR documents a couple of recent changes in xpack.security.authc.* settings and related 8.0.0 breaking changes.

Fixes: #61117

@azasypkin azasypkin added Team:Docs Team:Security Team focused on: Auth, Users, Roles, Spaces, Audit Logging, and more! Feature:Security/Authentication Platform Security - Authentication v7.7.0 labels Mar 26, 2020
@azasypkin azasypkin requested a review from legrego March 26, 2020 12:28
@elasticmachine
Copy link
Contributor

Pinging @elastic/kibana-security (Team:Security)

@elasticmachine
Copy link
Contributor

Pinging @elastic/kibana-docs (Team:Docs)

@azasypkin azasypkin added the release_note:skip Skip the PR/issue when compiling release notes label Mar 26, 2020

[source,yaml]
--------------------------------------------------------------------------------
xpack.security.authc.http.schemes: [apikey, basic, something-custom]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: I intentionally omitted enabled and autoSchemesEnabled settings as we don't really want users to tweak those yet, unless they know what they're doing. We may document these when we decide to set autoSchemesEnabled to false by default, but it's probably 9.0+?

Copy link
Member

@legrego legrego left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only reviewed for technical accuracy so far. I had some grammatical nits along the way, but I decided not to comment on those because @elastic/kibana-docs is probably better suited for that review, and I didn't want you to have to make those adjustments twice (once for my poor review, and once for their better review)

For more information about basic authentication and built-in users, see
{ref}/setting-up-authentication.html[User authentication].

[[token-authentication]]
==== Token authentication

Token authentication allows users to login using the same {kib} provided login form as basic authentication, and is based on the Native security realm or LDAP security realm that is provided by {es}. The token authentication provider is built on {es} token APIs. The bearer tokens returned by {es}'s {ref}/security-api-get-token.html[get token API] can be used directly with {kib} using the `Authorization` request header with the `Bearer` scheme.
Token authentication allows users to log in using the same {kib} provided login form as basic authentication, and is based on the Native security realm or LDAP security realm that is provided by {es}. The token authentication provider is built on {es} token APIs.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unrelated to your changes, but since we're here, we might as well add AD to the list, since it's technically supported by our basic auth provider.

Suggested change
Token authentication allows users to log in using the same {kib} provided login form as basic authentication, and is based on the Native security realm or LDAP security realm that is provided by {es}. The token authentication provider is built on {es} token APIs.
Token authentication allows users to log in using the same {kib} provided login form as basic authentication, and is based on the Native, LDAP, or Active Directory security realm that is provided by {es}. The token authentication provider is built on {es} token APIs.

[float]
===== SAML and basic authentication

SAML support in {kib} is designed to be the primary (or sole) authentication method for users of that {kib} instance. However, you can configure both SAML and Basic authentication for the same {kib} instance:
SAML support in {kib} is designed to be the primary (or sole) authentication method for users of that {kib} instance. However, you can configure both SAML and Basic authentication for the same {kib} instance. This might be the case for {kib} or {es} admins whose accounts aren't linked to the Single Sign-On users database:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SAML support in {kib} is designed to be the primary (or sole) authentication method for users of that {kib} instance.

question Is this still true now that we have the login selector screen? I was thinking that all configured providers could be treated equally now

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I was thinking about this too. Let me describe the reason behind the decision to keep this sentence and you'll tell me if it's a reasonable justification or not. The main point is that we still don't/can't handle every use case on the same level as we do when we have a single provider:

  • user will still be able to log in with SAML even if selector isn't enabled. In case of multiple providers it will depend on the order.
  • and small things like when overwritten_session view is shown only if it's handled by the same SAML authentication provider

That's why I thought encouraging the simplest possible and well-supported scenario would make sense and advanced users will find their way in any case. But I don't really have a strong opinion on this and would appreciate your thoughts.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for explaining! I personally think it'll be less confusing if we just omit this sentence altogether. I don't want to discourage folks from using multiple auth providers if it suites their needs, and I expect that most admins who require multiple auth providers are already in the "advanced users" category, so I'm not convinced this adds a lot of value

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the input! Let's make it simple then, I'll remove this sentence for SAML and OpenID Connect.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, for SAML, OpenID Connect and PKI.

--------------------------------------------------------------------------------

[float]
===== OpenID Connect and basic authentication

Similar to SAML, OpenID Connect support in {kib} is designed to be the primary (or sole) authentication method for users
of that {kib} instance. However, you can configure both OpenID Connect and Basic authentication for the same {kib} instance:
Similar to SAML, OpenID Connect support in {kib} is designed to be the primary (or sole) authentication method for users of that {kib} instance. However, you can configure both OpenID Connect and Basic authentication for the same {kib} instance. This might be the case for {kib} or {es} admins whose accounts aren't linked to the Single Sign-On users database:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question here with OIDC being the primary/sole authentication method

@azasypkin azasypkin requested a review from KOTungseth March 30, 2020 15:36
@@ -13,6 +13,34 @@
- <<saml>>
- <<oidc>>
- <<kerberos>>
- <<http-authentication>>

It is possible to enable multiple authentication mechanisms at the same time specifying a prioritized list of the authentication _providers_ (typically of various types) in the configuration. Providers are consulted in ascending order. You must make sure each configured provider has a distinct name (e.g. `basic1` or `saml1` in the config example below) and `order` setting. In the event that two or more providers have the same name or `order`, {kib} will fail to start.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To match the other sections, I would remove It is possible to, then start with Enable multiple authentication ...

@@ -13,6 +13,34 @@
- <<saml>>
- <<oidc>>
- <<kerberos>>
- <<http-authentication>>

It is possible to enable multiple authentication mechanisms at the same time specifying a prioritized list of the authentication _providers_ (typically of various types) in the configuration. Providers are consulted in ascending order. You must make sure each configured provider has a distinct name (e.g. `basic1` or `saml1` in the config example below) and `order` setting. In the event that two or more providers have the same name or `order`, {kib} will fail to start.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the third sentence, how about:

Make sure each configured provider has a unique name ....

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, sounds much better!

@@ -13,6 +13,34 @@
- <<saml>>
- <<oidc>>
- <<kerberos>>
- <<http-authentication>>

It is possible to enable multiple authentication mechanisms at the same time specifying a prioritized list of the authentication _providers_ (typically of various types) in the configuration. Providers are consulted in ascending order. You must make sure each configured provider has a distinct name (e.g. `basic1` or `saml1` in the config example below) and `order` setting. In the event that two or more providers have the same name or `order`, {kib} will fail to start.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To meet accessibility standards, we are removing instances of below from our docs. Could we change this to:

(e.g. basic1 or saml1 in the configuration example)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow, didn't know what, will fix. For my own edification, what is the reason below and above aren't acceptable?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The issue was recently opened against the docs, so it is a relatively new concept for us too- #55566. From what I understand, we're going to follow these guidelines for spatial references - https://www.w3.org/WAI/WCAG21/quickref/#sensory-characteristics.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, interesting, thanks for sharing these links!


It is possible to enable multiple authentication mechanisms at the same time specifying a prioritized list of the authentication _providers_ (typically of various types) in the configuration. Providers are consulted in ascending order. You must make sure each configured provider has a distinct name (e.g. `basic1` or `saml1` in the config example below) and `order` setting. In the event that two or more providers have the same name or `order`, {kib} will fail to start.

When two or more providers are configured user will be presented with the Login Selector screen where they can choose which provider to use to log in to {kib}. The order provider appears in at the Login Selector screen is determined by its `order` setting. The appearance of the specific provider entry can be customized with the `description` setting.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since you are talking to the user, I would change the first two sentences to:

When two or more providers are configured, you can choose the provider you want to use on the Login Selector UI. The order the providers appear is determined by the order setting.


When two or more providers are configured user will be presented with the Login Selector screen where they can choose which provider to use to log in to {kib}. The order provider appears in at the Login Selector screen is determined by its `order` setting. The appearance of the specific provider entry can be customized with the `description` setting.

If you don't want specific provider to show up at the Login Selector screen (e.g. to only support third-party initiated login) you can hide it with `showInSelector` setting set to `false`. However in this case provider will still be presented in the provider chain and may be consulted during authentication based on its `order`. To completely disable provider use `enabled` setting instead.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't want specific provider > If you don't want a specific provider

--------------------------------------------------------------------------------

Users will be able to access the login page and use Basic authentication by navigating to the `/login` URL.
Basic authentication is supported _only_ if `basic` authentication provider is explicitly declared in `xpack.security.authc.providers` setting in addition to `oidc`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_only_ if basic authentication provider > _only_ if the basic authentication provider

--------------------------------------------------------------------------------

Users will be able to access the login page and use Basic authentication by navigating to the `/login` URL.
Basic authentication is supported _only_ if `basic` authentication provider is explicitly declared in `xpack.security.authc.providers` setting in addition to `oidc`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

explicitly declared in xpack.security.authc.providerssetting in addition tooidc. > explicitly declared in the xpack.security.authc.providerssetting, in addition tooidc.

Users will be able to access the login page and use Basic authentication by navigating to the `/login` URL.
Basic authentication is supported _only_ if `basic` authentication provider is explicitly declared in `xpack.security.authc.providers` setting in addition to `oidc`.

However, if you don't need username/password login form and just want to support `Basic` authentication for the applications like `curl` or when the `Authorization: Basic base64(username:password)` HTTP header is included in the request (for example, by reverse proxy) then it's recommended to add `Basic` scheme to the list of supported schemes for the <<http-authentication,HTTP authentication>> instead.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as above

xpack.security.authc.http.schemes: [apikey, basic, something-custom]
--------------------------------------------------------------------------------

With the configuration above users can send requests to {kib} with the `Authorization` header using `ApiKey`, `Basic` or `Something-Custom` HTTP schemes (case insensitive). Under the hood {kib} will just relay this header to {es} that will try to authenticate request using the credentials provided within the header.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To meet accessibility standards, we are removing instances of above from the docs. I would change this to:

With this configuration, you can send requests to...

xpack.security.authc.http.schemes: [apikey, basic, something-custom]
--------------------------------------------------------------------------------

With the configuration above users can send requests to {kib} with the `Authorization` header using `ApiKey`, `Basic` or `Something-Custom` HTTP schemes (case insensitive). Under the hood {kib} will just relay this header to {es} that will try to authenticate request using the credentials provided within the header.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would split up and shorten the last sentence to:

Under the hood, {kib} relays this header to {es}, then {es} authenticates the request using the credentials in the header.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much better, thanks!

Copy link
Member Author

@azasypkin azasypkin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for review @KOTungseth and @legrego! It should be ready for another pass.

@legrego I answered your question, but would like to hear your thoughts before I change anything.

@@ -13,6 +13,34 @@
- <<saml>>
- <<oidc>>
- <<kerberos>>
- <<http-authentication>>

It is possible to enable multiple authentication mechanisms at the same time specifying a prioritized list of the authentication _providers_ (typically of various types) in the configuration. Providers are consulted in ascending order. You must make sure each configured provider has a distinct name (e.g. `basic1` or `saml1` in the config example below) and `order` setting. In the event that two or more providers have the same name or `order`, {kib} will fail to start.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, sounds much better!

@@ -13,6 +13,34 @@
- <<saml>>
- <<oidc>>
- <<kerberos>>
- <<http-authentication>>

It is possible to enable multiple authentication mechanisms at the same time specifying a prioritized list of the authentication _providers_ (typically of various types) in the configuration. Providers are consulted in ascending order. You must make sure each configured provider has a distinct name (e.g. `basic1` or `saml1` in the config example below) and `order` setting. In the event that two or more providers have the same name or `order`, {kib} will fail to start.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow, didn't know what, will fix. For my own edification, what is the reason below and above aren't acceptable?

Basic authentication is supported _only_ if `basic` authentication provider is explicitly declared in `xpack.security.authc.providers` setting in addition to `saml`.

However, if you don't need username/password login form and just want to support `Basic` authentication for the applications like `curl` or when the `Authorization: Basic base64(username:password)` HTTP header is included in the request (for example, by reverse proxy) then it's recommended to add `Basic` scheme to the list of supported schemes for the <<http-authentication,HTTP authentication>> instead.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, thanks!

xpack.security.authc.http.schemes: [apikey, basic, something-custom]
--------------------------------------------------------------------------------

With the configuration above users can send requests to {kib} with the `Authorization` header using `ApiKey`, `Basic` or `Something-Custom` HTTP schemes (case insensitive). Under the hood {kib} will just relay this header to {es} that will try to authenticate request using the credentials provided within the header.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much better, thanks!

@azasypkin azasypkin requested a review from KOTungseth March 31, 2020 09:18
@azasypkin azasypkin requested a review from legrego April 1, 2020 05:45
Copy link
Member

@legrego legrego left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@azasypkin azasypkin merged commit 534155f into elastic:master Apr 1, 2020
@azasypkin azasypkin deleted the issue-xxx-new-authc-docs branch April 1, 2020 14:15
azasypkin added a commit to azasypkin/kibana that referenced this pull request Apr 1, 2020
gmmorris added a commit to gmmorris/kibana that referenced this pull request Apr 1, 2020
* master: (44 commits)
  [Alerting] add alerting privileges for uptime and metrics (elastic#61113)
  Update percy agent to latest version (elastic#62089)
  [APM] Update central configuration text (elastic#61556)
  [Fleet] Ouput api key do not need metricbeat* access (elastic#60319)
  Document new `xpack.security.authc.*` settings and related 8.0.0 breaking changes. (elastic#61443)
  Migrate test plugins ⇒ NP (kbn_tp_sample_panel_action) (elastic#60749)
  [Alerting] Add "Start trial" button for connectors (elastic#61774)
  [ML] Transforms: Fix handling of default and advanced search on step summary view. (elastic#61799)
  [Task Manager] Change info message "ran out Available Workers" to debug (elastic#62083)
  [Maps] Highlight selected layer in TOC (elastic#61510)
  ensure pageIndex is set correclty in analytics list (elastic#62041)
  [ML] Functional API tests - fix mml request bodies (elastic#62116)
  Fix validation for index threshold when selecting an index (elastic#61615)
  [SIEM][Detection Engine] Adds release notes link and updates one UI section
  [backport] Bump to 5.1.2 (elastic#62117)
  [APM] .apm-agent-configuration is not created if Kibana is started while ES is not ready (elastic#61610)
  [Fleet] Enrollment list page (elastic#61346)
  [ML] Fix maximum default enabled columns for data grid. (elastic#62005)
  [Home][Tutorial] Add Oracle data UI (elastic#61595)
  [APM] Ensure telemetry data matches SO/telemetry mapping (elastic#61957)
  ...
@azasypkin
Copy link
Member Author

7.7/7.7.0: 5ec514d
7.x/7.8.0: df091d2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backported Feature:Security/Authentication Platform Security - Authentication release_note:skip Skip the PR/issue when compiling release notes Team:Docs Team:Security Team focused on: Auth, Users, Roles, Spaces, Audit Logging, and more! v7.7.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[7.7] Document new auth provider configuration options and login selector
4 participants