-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
RBAC - Phase 3 - Feature Controls #20277
Comments
For those following this Issue, I edited the description to flesh out the privileges that will be added, and began to elaborate upon the technical implementation. |
/cc @AlonaNadler @jinmu03 |
@timroes I think it definitely makes sense to move Reporting to this new model; however, we were considering it "out of scope" for the initial implementation, with the hope of working with the app team to move it over to the new granular privileges once we have the sufficient basis to do so. |
@kobelb I know we talked about it in the past, and expecting users will have more granular requests for privileges within each app. There are couple services that will be available across Kibana such as alerting, reporting and maybe more in the future, these will be available in multiple locations in Kibana including within the solutions. Should we open a new issue for services privileges across applications? |
@AlonaNadler sure, opening separate issues for the features/applications that we'd like to be secured long-term that are currently out of scope for this phase would be great. |
For those following along, the description has been updated with the extension of this feature set to the basic license. |
will this feature be implemented by version 6.5 ? if not, when is it implemented? |
@DoubleAix, Granular Application Privileges will not be available for 6.5. 6.5 introduces Spaces, which gives you a way to organize your saved objects, and control who has access to each space within Kibana. Spaces was a prerequisite to implementing granular app privileges. While we can't comment on a specific release date, we have started working on this feature, so you should expect to see it in the near future! Keep an eye out on this issue if you'd like to follow along |
Will the "no access" privilege be an option for all of the applications? We have a use case where we may only want a group of users to only dashboards and discover. I'm sure others would have a similar use case with various groupings. |
Yup, you'll be able to only grant access to those 2 applications. |
First, Granular Application Privileges will be great and very useful! Then, I think there are more privileges to add :
|
Hey @fbaligand, I'm glad you'll find this useful! The privilege list in the issue was a bit out of date; I've just updated it to reflect our current plan. Regarding your list, we will be offering support for Timelion, ML*, Infra/Logs, APM*, and Monitoring*. Reporting, Watcher, and License Management are not currently in scope for the initial release, but if that changes, we'll update this issue.
|
Thanks for the description update! Then, I think it would be fine to be able to hide « Management » tab. This is particularly useful for business users. But maybe a nice way to do this is to disable manage* privileges and so Kibana does not display Management tab. |
We completely agree and are working through a few options that we have in regard to the manner in which we'd like the Management tab to behave with this functionality. |
/cc @sophiec20 I'll be updating this issue with more details about how APM/Monitoring/ML will behave in this model a little later today |
I’m very interested by this feature! |
It will not, it's our primary focus at this point, but it missed the 6.7 release. |
Ah, sad to hear this :( |
Sadly I guess this missed the 7.0 release as well? |
Ya kinda the one thing I was looking forward to. This and the Dark Theme. |
when will this be released? i need those features 👍 |
@nunosilvaaa 7.2 |
thanks :) |
I can't wait for this feature! |
is there an ETA for this release? |
@nunosilvaaa there is not at the moment. Given the nature of software development, unexpected delays are incredibly common. I'd recommend keeping an eye on our blog for the release announcement https://www.elastic.co/blog/ |
This is part of the 7.2 release. |
Overview
Phase 3 will implement the ability to hide features within each Space using a Basic license, in addition to defining feature level privileges to grant various levels of access to roles per space.
Space driven feature controls - Basic license
With a basic license, users will be able to hide features within spaces. It is important to note that this is not a security feature, but instead a usability feature. This will allow users to customize each space to fit their needs, by hidings links and other functionality.
By default, all features are visible for every space. Hiding a feature is an opt-in decision. By extension, any new features that are added to Kibana will be visible by default, until they are explicitly hidden within a space. This allows new features to still be easily discovered when upgrading, and it reinforces the fact that this is not a security feature.
Sample Screenshot
Security driven feature privileges - Standard/Gold/Platinum license
Once security is enabled, we will provide additional controls to actually secure access to specific features in Kibana. These controls will work regardless of whether Spaces are in use or not. Not only will this control the visibility of features in the UI, but it will also secure the Kibana API endpoints and prevent application bundles from being accessed.
With Spaces
When spaces are enabled, the Role Management screen will allow users to specify which features users are allowed to access within each space. Since each Space also controls the visibility of features, this will have additional logic to determine when a feature is shown/hidden. Configuring this does not preclude users from later disabling Spaces.
Users will be able to configure access via a UI similar to the following.
Without Spaces
When spaces are disabled, the Role Management screen will allow users to specify which features users are allowed to access within Kibana. Configuring this does not preclude users from later enabling Spaces.
Stack applications with custom privilege model
There are existing applications that implement their own privileges model that require the user to be explicitly granted various cluster and index privileges via a reserved role, which will not be able to be disabled using the security driven feature controls. Currently, there are two notable applications in this category: Machine Learning and Monitoring.
The access to these applications will continue to be driven by the reserved roles. We will be augmenting these reserved role definitions with the necessary changes, described more in-depth below, so that when the user is assigned the proper reserved role the application will be visible within Kibana. Prior to the introduction of Feature Controls, these applications have always been visible within Kibana, even if the user doesn't have the necessary privileges.
Technical Details
This phase builds rather heavily upon the RBAC - Phase 1 and RBAC - Phase 2 - Spaces infrastructure. The basis of which relies on the ability to assign Kibana specific privileges using Elasticsearch's application privileges which are then enforced by Kibana's server before granting the user access.
Privileges
The following is a list of privileges that will exist after this phase. Prior to this phase, we've only had base privileges, which allow users to assign access to all current and future features. This phase will be adding the feature privileges, which grant access to individual features.
Base Privileges
Feature Privileges
Actions
Each of these privileges will be associated with a set of
actions
per the ES application privileges.The following is an example of the actions that are associated with Discover's
all
privilege:Each of these actions corresponds to a specific authorization check which will be performed. For example, to determine whether the user is able to "find" a saved object of type "search", we check whether the user has the
saved_object:search/find
action, prior to permitting the user to perform the find operation. There are also actions for granting access to Kibana applications, APIs and various UI capabilities.The relationship between privileges and actions allows us the flexibility to adjust the internal subsystems and their authorization checks while effectively granting the user the same functionality.
Plugin Extensibility
During a Kibana plugin's
init
lifecycle event, the plugin must register their feature to opt-in to Feature Controls. If a plugin does not opt-in to Feature Controls, their application will always be visible in the nav bar; however, they will not be granted authorization to any of the internal Kibana subsystems, such as Saved Objects.The following is an example of registering a feature:
Dissecting the aforementioned feature registration, there are a few important things to note. Everything that is declared outside of the
privileges
subsection is used for both spaces driven feature controls and security driven feature privileges. When a feature is hidden using Spaces driven feature controls, we hide the navlink, application, catalogue entry and management section.The
privileges
subsection allows the plugin author to determine the access to various subsystems when the user is assigned the feature specificall
orread
privileges, and also using the baseall
andread
privileges. Everything that is declared outside theprivileges
subsection implicitly cascades into the privileges themselves. However, theapp
,catalogue
andmanagement
sections are override-able at the privilege definition itself. There are additional items which are only used by the security driven feature privileges, which can only be specified as part of a privilege itself. These include authorized APIs, saved object types, and specific UI capabilities.UI Capabilities
UI Capabilities are used for determining which capabilities should be enabled in the UI based on the Spaces disabled features and the user's privileges. When a feature is disabled using Spaces, all UI capabilities that are associated with that specific feature are disabled. Using the security driven feature privileges, different UI capabilities can be enabled or disabled based on the specific privilege.
Consuming UI Capabilities
To determine whether a specific UI capability is enabled, consumers can import
uiCapabilities
fromui/capabilities
like the following to determine whether to render or disable specific funtionality:Registering UI Capabilities
Plugins in OSS which are driven by UI Capabilities must specify their full-list of capabilities within
injectDefaultVars
. The following illustrates the Timelion plugin doing so:This allows the OSS plugins to always check to determine whether they should be enabling the "save" capabilities.
If a plugin is within the x-pack plugin, we can take advantage of the aforementioned feature registration to automatically determine the UI capabilities based on the privileges, so this manual step in
injectDefaultVars
can be skipped.Disabling UI Capabilites
Both the Spaces plugin and the Security plugin take advantage of the
replaceInjectedVars
lifecycle event to disable certain capabilities based on the disabled set of features for the Space, or based on the user's security privileges.The text was updated successfully, but these errors were encountered: