[DOCS] Adds breaking changes for 7.10 (#80926)
* [DOCS] Adds breaking changes for 7.10 * [DOCS] Added two new breaking changes * [DOCS] Added more breaking changes issues * Update docs/migration/migrate_7_10.asciidoc Co-authored-by: Jen Huang <its.jenetic@gmail.com> * Update docs/migration/migrate_7_10.asciidoc Co-authored-by: Jen Huang <its.jenetic@gmail.com> * Update docs/migration/migrate_7_10.asciidoc Co-authored-by: Jen Huang <its.jenetic@gmail.com> * [DOCS] Removes breakings changes for SIEM * [DOCS] Adds coming in 7.10 tag Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Jen Huang <its.jenetic@gmail.com>
This commit is contained in:
parent
958f8fa32d
commit
6028edeb1e
|
@ -6,6 +6,7 @@
|
|||
This section discusses the changes that you need to be aware of when migrating
|
||||
your application from one version of Kibana to another.
|
||||
|
||||
* <<breaking-changes-7.10, Breaking changes in 7.10>>
|
||||
* <<breaking-changes-7.9, Breaking changes in 7.9>>
|
||||
* <<breaking-changes-7.8, Breaking changes in 7.8>>
|
||||
* <<breaking-changes-7.7, Breaking changes in 7.7>>
|
||||
|
@ -20,6 +21,7 @@ your application from one version of Kibana to another.
|
|||
See also <<whats-new>> and <<release-notes>>.
|
||||
--
|
||||
|
||||
include::migration/migrate_7_10.asciidoc[]
|
||||
include::migration/migrate_7_9.asciidoc[]
|
||||
include::migration/migrate_7_8.asciidoc[]
|
||||
include::migration/migrate_7_7.asciidoc[]
|
||||
|
|
733
docs/migration/migrate_7_10.asciidoc
Normal file
733
docs/migration/migrate_7_10.asciidoc
Normal file
|
@ -0,0 +1,733 @@
|
|||
[[breaking-changes-7.10]]
|
||||
== Breaking changes in 7.10
|
||||
++++
|
||||
<titleabbrev>7.10</titleabbrev>
|
||||
++++
|
||||
|
||||
coming[7.10.0]
|
||||
|
||||
This page discusses the breaking changes that you need to be aware of when migrating
|
||||
your application to {kib} 7.10.
|
||||
|
||||
* <<user-facing-changes-7-10, Breaking changes for users>>
|
||||
* <<general-plugin-API-changes-7-10, Breaking changes for plugin developers>>
|
||||
|
||||
[discrete]
|
||||
[[user-facing-changes-7-10]]
|
||||
=== Breaking changes for users
|
||||
|
||||
// The following section is re-used in the Installation and Upgrade Guide
|
||||
|
||||
// tag::notable-breaking-changes[]
|
||||
|
||||
|
||||
[discrete]
|
||||
[[breaking_kibana_legacy_plugins]]
|
||||
==== Legacy plugins support removed
|
||||
|
||||
The legacy plugin system and the legacy plugin API have been removed.
|
||||
Legacy plugin owners should migrate their plugins to the {kib} Platform plugin API.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/77599[#77599]*
|
||||
|
||||
[discrete]
|
||||
[[breaking_kibana_plugins]]
|
||||
==== Support added for Kibana Platform plugins
|
||||
|
||||
The `bin/kibana-plugin` CLI has been updated to work with the new {kib}
|
||||
Platform plugin format instead of the legacy plugin format.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/74604[#74604]*
|
||||
|
||||
[discrete]
|
||||
[[breaking_vega_visualizations]]
|
||||
==== Vega visualizations without $schema property no longer supported
|
||||
|
||||
Previously, if you did not provide the $schema property,
|
||||
the default value was set and hardcoded in the Vega code.
|
||||
The visualization was then rendered with a warning message.
|
||||
This introduced difficulties when updating the version of the Vega library.
|
||||
|
||||
Now all Vega specs must contain the $schema param. In no $schema
|
||||
param exists, an error message is returned.
|
||||
Refer to the https://vega.github.io/vega/docs/specification/[Vega docs] for
|
||||
more information about this property.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/73805[#73805]*
|
||||
|
||||
// end::notable-breaking-changes[]
|
||||
|
||||
[discrete]
|
||||
[[general-plugin-API-changes-7-10]]
|
||||
=== Breaking changes for plugin developers
|
||||
|
||||
[[breaking_plugin_v7.10.0_79406]]
|
||||
.Config moved from `xpack.ingestManager` to `xpack.fleet`
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
To rename the Ingest Manger plugin to Fleet:
|
||||
|
||||
* The {kib} config for Ingest Manager moved from `xpack.ingestManager.*` to `xpack.fleet.*`.
|
||||
* The config options specific to agents moved to `xpack.ingestManager.fleet.*` and `xpack.fleet.agents.*`.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/79406[#79406]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_79379]]
|
||||
.Plugins server code no longer transpiled with Babel
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
Kibana plugins can no longer rely on their server code being automatically transpiled with Babel.
|
||||
The https://github.com/elastic/kibana/tree/master/packages/kbn-plugin-helpers[`@kbn/plugin-helpers`]
|
||||
provide a build task that will transform a plugin's server code to plain JS via Babel,
|
||||
but plugin authors can use a tool of their choosing to accomplish the same result.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/79176[#79176]* and https://github.com/elastic/kibana/pull/79379[#79379]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_79193]]
|
||||
.Ingest Manager APIs moved to Fleet
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The following Ingest Manager API routes changed:
|
||||
|
||||
* All API routes moved from `/api/ingest_manager/*` to `/api/fleet/*`
|
||||
* All previous Fleet routes moved from `/api/ingest_manager/fleet/*` to `/api/fleet/*`. This includes:
|
||||
** `/api/ingest_manager/fleet/agents` => `/api/fleet/agents`
|
||||
** `/api/ingest_manager/fleet/enrollment-api-keys` => `/api/fleet/enrollment-api-keys`
|
||||
* The Fleet setup API moved from `/api/ingest_manager/fleet/setup` to `/api/fleet/agents/setup`
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/79193[#79193]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_78383]]
|
||||
.`SearchSource` is now exposed on the server
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The high-level search API `SearchSource` is now available on the server:
|
||||
```js
|
||||
function async myRouteHandler(context, request, response) {
|
||||
const searchSource = await data.search.searchSource.asScoped(request);
|
||||
searchSource.createEmpty(); // API after calling `asScoped` matches the client-side service
|
||||
}
|
||||
```
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/78383[#78383]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_78006]]
|
||||
.Response status helpers added
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
This release introduces the following `search` helpers:
|
||||
|
||||
* `isCompleteResponse`
|
||||
* `isErrorResponse`
|
||||
* `isPartialResponse`
|
||||
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/78006[#78006]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_77791]]
|
||||
.The index pattern `factory` and `crud` methods refactored
|
||||
[%collapsible]
|
||||
====
|
||||
The refactoring includes the following changes:
|
||||
|
||||
* Create new indexPattern instance (unsaved) -
|
||||
`indexPatternService.make() => indexPatternService.create(indexPatternSpec, skipFetchFields)`
|
||||
|
||||
* Save new index pattern -
|
||||
`indexPattern.create() => indexPatternService.createSavedObject(indexPattern)`
|
||||
|
||||
* Setting the default index pattern is done as part of `indexPatternService.createSavedObject`,
|
||||
but can also be called individually-
|
||||
`uiSettings.set('defaultIndex', id) => indexPatternService.setDefault(indexPatternId, force)`
|
||||
|
||||
* Update index pattern -
|
||||
`indexPattern.save() => indexPatternService.updateSavedObject(indexPattern)`
|
||||
|
||||
* Additional changes:
|
||||
** `indexPatternService.get();` no longer returns a new IndexPattern instance
|
||||
** `indexPattern.fieldsFetcher` is replaced by `indexPatternService.getFieldsForWildcard` and `indexPatternService.getFieldsForIndexPattern`
|
||||
** `indexPattern.originalBody` => `indexPattern.originalSavedObjectBody` updates via `indexPattern.resetOriginalSavedObjectBody`
|
||||
** `indexPattern.refreshFields => indexPatternService.refreshFields(indexPattern)`
|
||||
** `indexPatternService.createAndSave(indexPatternSpec)` convenience method added
|
||||
** `indexPatternService.getFieldsForWildcard` can be called directly. Previously a temp index pattern had to be created.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/77791[#77791]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_77788]]
|
||||
.Error notifications now aligned
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `data.search` service now includes these explicit error types:
|
||||
|
||||
- `AbortError` if the request was canceled by the application or by calling `cancelPending`.
|
||||
- `SearchTimeoutError` if the request has timed out on the client **or** on the server.
|
||||
- `PainlessError` if there's an painless script error inside the response
|
||||
- If the error is unidentified, it throws the error as is.
|
||||
|
||||
The new `showError` function can be used with these errors to show customized toast messages.
|
||||
Applications may choose to handle errors differently. However, the `SearchTimeoutError`
|
||||
error notification is shown regardless.
|
||||
|
||||
|
||||
```.ts
|
||||
data.search.search(...)
|
||||
.catchError((e: Error) => {
|
||||
data.search.showError(e);
|
||||
}
|
||||
```
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/77788[#77788]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_76848]]
|
||||
.`className` prop added to QueryStringInput component
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
A `className` prop was added to the main container of the QueryStringInput component.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/76848[#76848]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_76822]]
|
||||
.KibanaRequest now has a `uuid` property
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
`KibanaRequest` now has a `uuid` property, which is a UUID that uniquely identifies the request.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/76822[#76822]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_76706]]
|
||||
.Index pattern save moved to index pattern service
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
`IndexPattern.save` has been replaced with `IndexPatternsService.save`.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/76706[#76706]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_76538]]
|
||||
.`FetchOptions` replaced with `ISearchOptions`
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `FetchOptions` type was removed—use the `ISearchOptions` type instead.
|
||||
The `ISearchOptions` `signal` option was renamed to `abortSignal`.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/76538[#76538]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_75943]]
|
||||
.Legacy {es} client APIs removed
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `__LEGACY` APIs have been removed from the `data` plugin's client-side search service.
|
||||
Specifically, `data.search.__LEGACY.esClient` is no longer exposed,
|
||||
and the legacy `elasticsearch-browser` package has been removed from the repo.
|
||||
If you rely on this client in your plugin, we recommend migrating to
|
||||
the new https://github.com/elastic/elasticsearch-js[`elasticsearch-js` client].
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/75943[#75943]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_75819]]
|
||||
.Plugin status API added
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
Kibana Platform plugins can now read the status of their dependencies,
|
||||
their plugin's default status, and manually override that status as
|
||||
reported to the end user and on the `/api/status` endpoint.
|
||||
|
||||
```ts
|
||||
class MyPlugin {
|
||||
setup(core) {
|
||||
// Override default behavior and only elevate severity when elasticsearch is not available
|
||||
core.status.set(
|
||||
core.status.core$.pipe(core => core.elasticsearch);
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/75819[#75819]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_75728]]
|
||||
.New advanced setting `searchTimeout` added
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The behavior of how search requests timeout changed:
|
||||
|
||||
* The {kib} server uses the new {es} client. The client already uses all timeout configurations
|
||||
such as `requestTimeout`, `shardTimeout`, and `maxRetries`.
|
||||
Because the client can't override those settings, in OSS,
|
||||
we removed the code governing the {es} timeout on the client. Instead, this change adds handling for a timeout error response.
|
||||
A nice side effect is being able to remove `injectDefaultVars` from the legacy core plugin.
|
||||
* With Basic+ licenses, users can control the maximum time for a search session
|
||||
(for example, a single re-load of a dashboard), per space. Aa new Advanced Setting
|
||||
can be set to a positive value, or to 0, allowing queries to run without a timeout, as long as a user stays on screen.
|
||||
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/75728[#75728]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_75717]]
|
||||
.`IndexPattern` class no longer uses `getConfig` or `uiSettingsValues`
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `IndexPattern` class now takes `shortDotsEnable` (boolean) and `metaFields` (string[]) as arguments.
|
||||
These were formerly provided by `uiSettings`
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/75717[#75717]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_75517]]
|
||||
.The `expressions` plugin has removed its `__LEGACY` APIs
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `expressions` plugin has removed its `__LEGACY` APIs,
|
||||
which were designed for internal use in Canvas.
|
||||
In the unlikely event that you rely on the `expressions.__LEGACY` namespace,
|
||||
you will need to copy the relevant code into your plugin before updating.
|
||||
|
||||
Also removed is the `createKibanaUtilsCore` helper from the `kibana_utils` plugin,
|
||||
which was only used in the legacy Expressions APIs.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/75517[#75517]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_75368]]
|
||||
.The search service's `getParamsFromSearchRequest` helper changed
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `getParamsFromSearchRequest` helper changed to
|
||||
prepare for exposing `SearchSource` on the server. If your plugin relies on this
|
||||
helper, update the dependencies passed to it as follows:
|
||||
|
||||
```diff
|
||||
import { getSearchParamsFromRequest } from '../../../src/plugins/data/public';
|
||||
|
||||
const params = getSearchParamsFromRequest(request, {
|
||||
- injectedMetadata: core.injectedMetadata,
|
||||
- uiSettings: core.uiSettings,
|
||||
+ esShardTimeout: core.injectedMetadata.getInjectedVar('esShardTimeout') as number,
|
||||
+ getConfig: core.uiSettings.get.bind(core.uiSettings),
|
||||
});
|
||||
```
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/75368[#75368]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_75185]]
|
||||
.Dependencies removed from index pattern list and field list
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The index pattern `fields` class has the following changes:
|
||||
|
||||
- The class is no longer created using a constructor. This produced odd side effects
|
||||
when array methods were used. In particular, removing the `IndexPattern` argument revealed that the
|
||||
`FieldList` constructor was being called when `filter` and similar were called, producing an error.
|
||||
Now, it's only created once by `IndexPattern`.
|
||||
- The `IndexPattern` object and `onNotification` are no longer provided to the creation function.
|
||||
|
||||
The index pattern `field` class has the following changes:
|
||||
|
||||
- The `IndexPattern` object and `onNotification` are no longer provided to the constructor.
|
||||
- The `format` attribute no longer exists. Use `IndexPattern.getFormatterForField` instead.
|
||||
- A callback is no longer used when an unknown field type is encountered.
|
||||
Instead it throws `FieldTypeUnknownError`.
|
||||
- `toSpec` now takes an optional argument, `{ getFormatterForField }`. This argument takes
|
||||
the field as an argument and returns a formatter.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/75185[#75185]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_74914]]
|
||||
.Agent and package configs renamed to agent and package policies
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The following Fleet (previously Ingest Manager) API routes changed:
|
||||
|
||||
- `/api/ingest_manager/agent_configs/*` renamed to `/api/fleet/agent_policies/*`
|
||||
- `/api/ingest_manager/package_configs/*` renamed to `/api/fleet/package_policies/*`
|
||||
|
||||
All Ingest Manager routes with payload fields that were previously in
|
||||
reference to agent configs or package configs have been renamed to agent policies
|
||||
and package policies. For example `configId` -> `policyId`, `package_configs` -> `package_policies`.
|
||||
|
||||
The following Ingest Manager app routes changed:
|
||||
|
||||
- `/app/ingestManager#/configs` renamed to `/app/ingestManager#/policies`
|
||||
|
||||
The following Ingest Manager settings changed:
|
||||
|
||||
- `xpack.ingestManager.fleet.agentConfigRolloutRateLimitIntervalMs` renamed to `xpack.fleet.agents.agentPolicyRolloutRateLimitIntervalMs`
|
||||
- `xpack.fleet.agents.agentConfigRolloutRateLimitRequestPerInterval` renamed to `xpack.fleet.agents.agentPolicyRolloutRateLimitRequestPerInterval`
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/74914[#74914]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_74607]]
|
||||
.SearchSource dependencies moved to the server
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `getSearchErrorType` and the `SearchError` class have been
|
||||
removed from the static exports of the `data` plugin's contract.
|
||||
If you rely on these, copy the code directly into your plugin.
|
||||
The `SearchError` interface is still exposed.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/74607[#74607]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_74472]]
|
||||
.`data.search.aggs` available on the server
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The `search.aggs` service in the `data` plugin is now available on the server.
|
||||
The usage is the same as on the client, except that a scoped saved objects client
|
||||
must be provided on the server to retrieve the `start` contract:
|
||||
|
||||
```ts
|
||||
const savedObjectsClient = savedObjects.getScopedClient(kibanaRequest);
|
||||
// `aggs.asScopedToClient` will return the same contract as is available in the browser
|
||||
const aggs = await data.search.aggs.asScopedToClient(savedObjectsClient);
|
||||
const allAggTypes = aggs.types.getAll();
|
||||
```
|
||||
|
||||
The `calculateAutoTimeExpression` method was removed from the `setup` contract,
|
||||
and now only exists on the `data` plugin's `start` contract. The method was
|
||||
was not used in `setup` elsewhere in {kib}, so it was removed for simplicity.
|
||||
|
||||
In addition, the agg types registry changed and now accepts a provider
|
||||
function, which is used to inject dependencies. This might be needed in the agg type definition,
|
||||
specifically a `getConfig` function used to retrieve uiSettings:
|
||||
|
||||
```ts
|
||||
const getMyAgg = ({ getConfig }) =>
|
||||
new MetricAggType({
|
||||
name: 'myAgg',
|
||||
expressionName: 'myAggFunction',
|
||||
getSerializedFormat: (agg) => ({ id: 'number' }),
|
||||
params: [
|
||||
{
|
||||
name: 'someParam',
|
||||
write: (agg, output, aggs) => ({
|
||||
const queryLanguage = getConfig('search:queryLanguage');
|
||||
...etc
|
||||
})
|
||||
}
|
||||
],
|
||||
});
|
||||
|
||||
// register the agg type provider
|
||||
dataSetup.search.aggs.registerMetric('myAgg', getMyAgg);
|
||||
```
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/74472[#74472]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_73730]]
|
||||
.Routes can specify the idle socket timeout
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
Route definitions can now specify the `idleSocket` timeout in addition to the `payload` timeout.
|
||||
|
||||
Resolves https://github.com/elastic/kibana/issues/73557[#73557].
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/73730[#73730]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_73651]]
|
||||
.New {es} client exposed
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
{kib} provides the new {es} client
|
||||
as a part of the {es} service on the server-side.
|
||||
The legacy client is deprecated on and subject for removal in `7.x`. Reference
|
||||
the https://github.com/elastic/kibana/blob/master/src/core/MIGRATION_EXAMPLES.md#elasticsearch-client[migration guide] to refactor your code
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/73651[#73651]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_72093]]
|
||||
.Query input string manager added
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
This PR allows gracefully extracting of the query string state, to be consumed by other services.
|
||||
You can now use the `data.query.state$` observable and receive all state updates in one place.
|
||||
|
||||
```TypeScript
|
||||
data.query.state$.subscribe((queryState: QueryState) => {...})
|
||||
```
|
||||
|
||||
This PR also adds the `data.query.queryString` service, allowing to you set the
|
||||
query string https://github.com/elastic/kibana/issues/52522[programmatically].
|
||||
```TypeScript
|
||||
data.query.queryString.setQuery({query: 'abc', language: 'kuery'});
|
||||
```
|
||||
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/72093[#72093]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_67157]]
|
||||
.Role-based access control added to the Alerting & Action plugins
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
This PR allows you to assign privileges to the Alerting framework when
|
||||
defining your feature in *Kibana*. When registering your feature, you can add
|
||||
a list of AlertTypes under your `read` and `all` keys of the `privileges` object, as such:
|
||||
|
||||
```ts
|
||||
features.registerFeature({
|
||||
id: 'alertsExample',
|
||||
name: 'alertsExample',
|
||||
app: [],
|
||||
privileges: {
|
||||
all: {
|
||||
alerting: {
|
||||
all: ['example.always-firing', 'example.people-in-space'],
|
||||
},
|
||||
},
|
||||
read: {
|
||||
alerting: {
|
||||
read: ['example.always-firing', 'example.people-in-space'],
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
This specifies:
|
||||
|
||||
* If users AbortError granted the `all` privilege to the `alertsExample` feature,
|
||||
then they are also granted `all` privileges to the `example.always-firing` and `example.people-in-space` AlertTypes
|
||||
under the `alertsExample` consumer.
|
||||
* If users are granted the `read` privilege to the `alertsExample` feature,
|
||||
then they are also granted `read` privileges to the `example.always-firing` and `example.people-in-space`
|
||||
AlertTypes under the `alertsExample` consumer.
|
||||
|
||||
For example, an `all` user will be able to create an `example.always-firing` alert
|
||||
with the `alertsExample` as consumer. This will also automatically grant the user the right to
|
||||
create an `example.always-firing` alert from within Alerts management, where `alerts` is the consumer.
|
||||
This **does not** grant the user the ability to create an `example.always-firing` alert under any other consumer.
|
||||
For that, the specific consumer will have to grant the user explicit rights through their privilege system.
|
||||
|
||||
For example, if Uptime wanted to allow users to create an `example.people-in-space`
|
||||
alert inside of the Uptime solution, then they will have to do the following:
|
||||
|
||||
```ts
|
||||
features.registerFeature({
|
||||
id: 'uptime',
|
||||
name: 'Uptime',
|
||||
app: [],
|
||||
privileges: {
|
||||
all: {
|
||||
alerting: {
|
||||
all: ['xpack.uptime.alerts.actionGroups.tls', 'example.people-in-space'],
|
||||
},
|
||||
},
|
||||
read: {
|
||||
alerting: {
|
||||
read: ['xpack.uptime.alerts.actionGroups.tls', 'example.people-in-space'],
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
This, assuming it's added by Uptime, would grant uptime users the privilege
|
||||
to create both their own `xpack.uptime.alerts.actionGroups.tls` alert and
|
||||
the `example.people-in-space` alert with `uptime` as the consumer.
|
||||
|
||||
This does not allow any Uptime user with `all` privileges to create an `example.people-in-space` alert.
|
||||
To create an `example.people-in-space` alert, the Uptime user needs both `all` in Uptime **and** in
|
||||
AlertsExample, as we always check whether the user is privileged to execute
|
||||
an operation (create/enable/delete etc.) in both the alert's _consumer_ and its _producer_.
|
||||
|
||||
The one exception to this is when the _producer_ is `alerts`, which represents a `built-in` AlertType,
|
||||
in which case we only check for _consumer_ privileges as all users are privileged to create built-in types by definition.
|
||||
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/67157[#67157]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_73257]]
|
||||
.The EventLog Setup contract now exposes a `registerSavedObjectProvider`
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The EventLog Setup contract now exposes a registerSavedObjectProvider method
|
||||
which can be used to register a Saved Object provider.
|
||||
|
||||
```ts
|
||||
export interface IEventLogService {
|
||||
isEnabled(): boolean;
|
||||
isLoggingEntries(): boolean;
|
||||
isIndexingEntries(): boolean;
|
||||
registerProviderActions(provider: string, actions: string[]): void;
|
||||
isProviderActionRegistered(provider: string, action: string): boolean;
|
||||
getProviderActions(): Map<string, Set<string>>;
|
||||
registerSavedObjectProvider(type: string, provider: SavedObjectProvider): void;
|
||||
getLogger(properties: IEvent): IEventLogger;
|
||||
}
|
||||
```
|
||||
|
||||
This API specifies the Saved Object type and a "provider"
|
||||
callback that is called whenever a new request asks for that type of Saved Object.
|
||||
|
||||
This example shows a provider for the alert SavedObject type,
|
||||
which creates a new AlertsClient for the request and returns a getter
|
||||
that attempts to get the SavedObject by its id.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/73257[#73257]*
|
||||
|
||||
```ts
|
||||
eventLogService.registerSavedObjectProvider('alert', (request: KibanaRequest) => {
|
||||
const client = getAlertsClientWithRequest(request);
|
||||
return (type: string, id: string) => client.get({ id });
|
||||
});
|
||||
```
|
||||
|
||||
The EventLog maintains a registry of each provider,
|
||||
and creates a getter on demand when the user actually requests an object of a
|
||||
certain type. An AlertsClient is only instantiated if
|
||||
the user requests to the events reference an Alert.
|
||||
Once a getter is created for a specific request,
|
||||
it is cached for the remainder of the lifecycle of that request.
|
||||
This means a single provider is used for multiple gets made by the request.
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_72289]]
|
||||
.New {es} client in SO service
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
The SO service was refactored to use https://github.com/elastic/elasticsearch-js[elasticsearch-js]
|
||||
under the hood. This change might affect plugins reading the response status field
|
||||
from the SO error bubbled to the Solutions code because the {es} error no longer
|
||||
provides the status field (statusCode is still provided).
|
||||
|
||||
Several plugins were adjusted to check SO errors with `SavedObjectsErrorHelpers`.
|
||||
Plugins must use this because we are going to stop wrapping errors in the Boom object.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/72289[#72289]*
|
||||
|
||||
====
|
||||
|
||||
[[breaking_plugin_v7.10.0_72029]]
|
||||
.Alerts Management now controlled via Feature Controls and privileges
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
If you want your plugin to grant a user access to Alerts Management,
|
||||
you must specify it under Management in your feature configuration:
|
||||
|
||||
```ts
|
||||
management: {
|
||||
insightsAndAlerting: ['triggersActions'],
|
||||
},
|
||||
```
|
||||
You can specify it in three places:
|
||||
|
||||
* Directly on the feature. When security is disabled, this grants access
|
||||
to every role granted access to the Feature via Feature Controls.
|
||||
When security is enabled, this specifies that the feature has access to
|
||||
this management section and is required before you can grant this to a specific role.
|
||||
|
||||
* Under the `all` privilege. When security is enabled, this grants access
|
||||
to every role granted the `all` privilege to the Feature via Feature Controls.
|
||||
|
||||
* Under the `read` privilege. When security is enabled, this grants access
|
||||
to every role granted the `read` privilege to the Feature via Feature Controls.
|
||||
|
||||
You're likely to have to specify this in 3 places in your plugin
|
||||
to cover all 3 scenarios. Although this is more verbose than before,
|
||||
it aligns with the rest of {kib}.
|
||||
It also means that the Triggers and Actions plugin no longer needs to
|
||||
know about each plugin that wants to gain access
|
||||
(which means {kib} can more easily support future alerting usage).
|
||||
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/72029[#72029]*
|
||||
|
||||
====
|
||||
|
||||
[discrete]
|
||||
[[breaking_plugin_v7.10.0_73778]]
|
||||
.API changed for creating a Jira connector
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
`casesConfiguration` was renamed to `incidentConfiguration`. Added optional `attributeisCaseOwned`.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/73778[#73778]*
|
||||
|
||||
====
|
||||
|
||||
[discrete]
|
||||
[[breaking_plugin_v7.10.0_74357]]
|
||||
.API changed for creating an IBM Resilient connector
|
||||
[%collapsible]
|
||||
====
|
||||
|
||||
`casesConfiguration` was renamed to `incidentConfiguration`. Added optional `attributeisCaseOwned`.
|
||||
|
||||
*via https://github.com/elastic/kibana/pull/74357[#74357]*
|
||||
|
||||
====
|
Loading…
Reference in a new issue