-
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
By default, a plugin should not be disable-able #89584
Comments
Pinging @elastic/kibana-core (Team:Core) |
related #66621 |
Reducing the amount of permutations (and all the test cases to cover these permutations) is a good idea, we can get a lot of value by doing this for spaces, security, encrypted saved objects etc. However, I don't believe this should be the default. Every plugin that can't be disabled poses an operational risk for users:
Kibana is a gigantic monolith which comes with all the operational downsides of running a monolith. With Kibana being used increasingly for mission critical work loads these downsides have a bigger impact on users. Being able to enable/disable some plugins mitigates some of these downsides e.g. it's theoretically possible to scale up alerting-only Kibana instances, or only disable alerting if that's causing stability problems for other systems. So I would prefer if plugins had to opt-out of being disable-able, and I think we should evaluate plugins on a case by case basis to weigh up the benefits/risk. |
If the issue with keeping the ability to disable these items is testing & support, maybe we need to make it more clear that running with disabled plugins is not supported. Yes, it's a workaround that may work for some situations detailed above, however it's not something we test for, and we shouldn't rely on this feature working without breaking other things if we aren't testing for it. IMO, at the very least there should be a warning logged when disabling a plugin that we don't test for. I also think we can find other, well-tested solutions to most of the problems above that don't involve drastically changing which plugins are executing in production. The exception being the security vulnerability case, and while I can see how that is a useful defense, is it an explicit part of our security model? Are there other ways we can achieve this based on the patterns we've seen? For instance, if disabling plugins is usually used to disable vulnerable REST endpoints, we could add a feature for disabling some route paths instead.
I'd prefer we explicitly add features that are well-tested to support dedicated node types over having this feature exist by accident. What good is a feature if it may be breaking between releases? Overall, I do agree this functionality is needed in some cases, which is why I generally support this proposal over #66621. However, in the cases where we need this, we still need tests & verifications across versions to ensure we don't break configuration. If we agree that there is extra work that should be done for a plugin to be disable-able, then I think the default should reflect that. |
I suspect we would always fix vulnerabilities in supported releases, so strictly speaking we don't need to provide the ability to disable a plugin to fix a vulnerability, the real fix is to upgrade Kibana. When Kibana ships with 100+ plugins it becomes increasingly likely that some plugin you don't use has a vulnerability and having to upgrade just for that is rather annoying. However, upgrading for security vulnerabilities is definitely the norm in the industry and as long as we make this process as seamless as possible maybe the impact/frustration/cost on users is negligible.
I agree, we should rather provide a more stream-lined and better documented way to achieve this.
My concern is that most plugins would just opt to stick with the default. I agree there's probably better ways to address the problems I mentioned. But short term this would reduce the amount of options users and support have to fix/stabilize a Kibana deployment. I agree that in principle this default would reduce the amount of bugs we get from untested permutations. But is this currently a notable problem, I'm not aware of it impacting users. So my bias is towards the SDH's I've been part of where disabling a plugin was a quick win to get a deployment back up and running. |
I don't think it's an explicit part of our security model, but it us a useful mitigation to protect our users. @joshbressers / @douglasday do you have an opinion on this? Do you/our users find it helpful that we can mitigate certain vulnerabilities by disabling plugins, or is this something that just "feels" like a good thing to offer?
I'm all for exploring other options, but I think it needs to include an answer for client-side as well. The reports we get are a mixed bag of front-end and back-end, so disabling REST endpoints (for example) might not help as much as we'd like. |
I wanted to close this loop (Larry asked me about this in a security team meeting). I'm comfortable not disabling plugins. We do provide mitigation advice to disable certain functionality for some security vulnerabilities, but I don't suspect this is widely used (I get very few comments on the feedback, I recall in the past there have been some instructions that broke things and we only heard from one or two people). |
@kobelb @stacey-gammon Are we still comfortable moving forward with this? |
Yup! |
Next steps:
|
Just updated the description here with a table of all of the plugins which currently are disable-able. To the teams I tagged, please update the table according to the instructions above if you believe your plugin must continue to be disable-able in 8.0. We'd ask that you do this by 31 August 2021. |
Did some digging and it appears we do add the kibana/packages/kbn-config/src/config_service.ts Lines 177 to 178 in 2ddaddc
I put a little logic to log this case and found that all of these plugin config paths currently do not define a config schema and thus have this
|
Ah, that explains it then -- I had tested around plugins that already had a config schema. Thanks for clarifying! |
Hey @stratoula, I noticed that you marked a bunch of the plugins prefixed with |
Hey, @kobelb we haven't checked the telemetry but we discussed it with @timroes and we think that the legacy visualizations should be disableable. For example, a user works only with Lens and doesn't want the other editors. (this is the reason that Lens is also not disableable). I can also think of users that don't want vega as an option. We think that as there are a lot of ways to create the same types of visualizations in kibana (for example you can have a legacy pie and a Lens pie), a user might want to disable some of them to avoid confusion. |
Thanks to all who took the time to update the list above. After comparing this list with the list of implicitly disable-able plugins and following up with teams, we ended up with the following plugins which need to remain disable-able:
Other than the above, no other plugins will be disable-able beginning in 8.0 (unless they explicitly opt-in by adding this to their config schema). If you own a plugin which you still believe should be disable-able, and it is not in the list above, please speak up by the end of this week! (03 Sept 2021) Otherwise, we will be moving forward with logging deprecation warnings for the rest of the plugins in 7.16. #110614 |
@lukeelmers we discussed it again with Tim and we are fine if this one is not disableable. You can remove it from the list ;) |
We've just discussed this during Kibana Platform Security Sync and agreed that we'd like to keep |
An implementation-wise question: as we want to enforce this rule for the internal plugins-only, can we add a dedicated flag to the manifest file to differentiate between 1st party and 3rd party plugins? It will help us in the future to add more strict / relax rules for the Elastic plugins (like this one #61087) |
@azasypkin Yeah, agreed it makes sense to keep
@mshustov I'm not entirely sure this is the case -- once we remove the implicitly added |
@lukeelmers Do you recall why it was decided that the cloud plugin should not be disable-able? Why would an on-prem admin want this plugin enabled? |
@cjcenizal We didn't feel it needed to be disable-able because the main purpose of the plugin is to (A) check if this Kibana deployment is running on Cloud, and (B) provide information about the deployment if it is in fact running on Cloud. For on-prem users, the plugin effectively does nothing: it will start up, determine cloud isn't enabled (this doesn't require reaching out over the internet; it derives this from the yml config), and return empty/undefined values from its public contract. |
This issue will be closed as soon as #113495 merges. Just to close the loop here for clarity: with these changes, none of the plugins that ship with Kibana will be disable-able starting in 8.0, with the exception of the following:
Thanks all for your input as we worked to coordinate these changes ❤️ |
In an effort to create a more stable and well-tested architecture, starting in 8.0 we will require every plugin to explicitly opt-in to the ability to be disabled via the yml config file.
We have many small plugins that were not built with this capability in mind, and we don't test all of the possible permutations. Moving forward, we want developers to intentionally choose this feature for their plugin.
To make a plugin disable-able, you add an
enabled
setting in your plugin's config:Plugins without
enabled
in their config will be turned on by default and cannot be disabled in the Kibana yml config or cli.Plugins without any config schema implicitly have
enabled
added, however we will be removing this in 8.0.Here is a list of plugins which currently specify an
enabled
config. We believe the vast majority of these do not have a strong need to support disabling. However, if you own a plugin listed below and you believe it should support disabling, please add ayes
to the table.Additionally, if you own a plugin which isn't on this list because it doesn't have a config schema (as in Josh's list below), please speak up if you are relying on
enabled
being added to your plugin implicitly. Otherwise, your plugin will no longer be disable-able in 8.0.Toward the end of the 7.16 dev cycle, we will open a PR removing
enabled
from any plugins that don't have ayes
indicated below. To prepare for this update, we'd ask that folks review the affected plugins by 31 August 2021.apm_oss
console
interactive_setup
newsfeed
telemetry
timelion
vis_type_markdown
vis_type_metric
vis_type_table
vis_type_tagcloud
vis_type_timelion
vis_type_timeseries
vis_type_vega
vis_type_vislib
vis_type_pie
x-pack/actions
x-pack/alerting
x-pack/apm
x-pack/cases
x-pack/cloud
x-pack/cross_cluster_replication
x-pack/dashboard_mode
x-pack/encrypted_saved_objects
x-pack/enterprise_search
x-pack/event_log
x-pack/fleet
x-pack/graph
x-pack/grokdebugger
x-pack/index_lifecycle_management
x-pack/index_management
x-pack/infra
x-pack/lens
x-pack/license_management
x-pack/lists
x-pack/logstash
x-pack/maps
x-pack/metrics_entities
x-pack/monitoring
x-pack/observability
x-pack/osquery
x-pack/remote_clusters
x-pack/reporting
x-pack/rollup
x-pack/rule_registry
x-pack/saved_objects_tagging
x-pack/security
x-pack/security_solution
x-pack/snapshot_restore
x-pack/spaces
x-pack/stack_alerts
x-pack/task_manager
x-pack/timelines
x-pack/upgrade_assistant
The text was updated successfully, but these errors were encountered: