From db165293870e30bacd118736ea8c3a1a9b6f7f6d Mon Sep 17 00:00:00 2001 From: Owais Kazi Date: Tue, 23 Nov 2021 17:08:29 -0800 Subject: [PATCH 01/10] Blogpost for Introduction to OpenSearch Plugins Signed-off-by: Owais Kazi --- _authors/kazabdu.markdown | 9 ++ _posts/2021-11-29-plugins-intro.markdown | 149 ++++++++++++++++++ assets/media/authors/kazabdu.jpg | Bin 0 -> 220382 bytes .../security_manager.jpg | Bin 0 -> 21243 bytes 4 files changed, 158 insertions(+) create mode 100644 _authors/kazabdu.markdown create mode 100644 _posts/2021-11-29-plugins-intro.markdown create mode 100644 assets/media/authors/kazabdu.jpg create mode 100644 assets/media/blog-images/2021-11-29-plugins-intro/security_manager.jpg diff --git a/_authors/kazabdu.markdown b/_authors/kazabdu.markdown new file mode 100644 index 0000000000..5abb4f580d --- /dev/null +++ b/_authors/kazabdu.markdown @@ -0,0 +1,9 @@ +--- +name: Owais Kazi +short_name: kazabdu +photo: '/assets/media/authors/kazabdu.jpg' +twitter: 'owaiskazi19' +github: owaiskazi19 +--- + +**Owais Kazi** is a Software Engineer at AWS, focusing on OpenSearch and OpenSearch plugins. \ No newline at end of file diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown new file mode 100644 index 0000000000..65ef56e594 --- /dev/null +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -0,0 +1,149 @@ +--- +layout: post +title: "Introduction to OpenSearch Plugins" +authors: + - vemsarat + - kazabdu +date: 2021-11-22 +categories: + - technical-post +twittercard: + description: "This post walks through how plugins work in OpenSearch and how a custom Java Security Manager handle the security of OpenSearch." +--- + + +OpenSearch enables extending core features via plugins. Plugins are empowered to access all extensible features of OpenSearch and extend them. In this blog post we wanted to unbox the plugin architecture and help understand how they work. + + +## Pluggable Architecture + +Plugins in OpenSearch bring in modular architecture and enable developing/managing a large code base easier. The [blog post](https://logz.io/blog/opensearch-plugins/) from our partner [Logz.io](http://logz.io/) really helps understand why pluggable architecture is important and how the architecture works. + +Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) plugin reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. + +Plugins are of various types, generally could be categorized as: + + +* Analysis: Used for analysis of data available within the cluster. +* Discovery: Used for easy discovery of nodes in various platforms. +* Ingest: Used for pre/post processing data during ingestion. +* Mappers: Helps extend/create data fields to OpenSearch. +* Snapshot/Restore: Used to create snapshot and restore data + +To develop these plugins, the code base has well defined [interfaces](https://github.com/opensearch-project/OpenSearch/tree/main/server/src/main/java/org/opensearch/plugins) to solve specific sub-set of problems. + + +## Extension Points + +The architecture is built for plugins to hook onto various extension points with in the code base and subscribe to notifications/events they are interested in. There are a bunch of extension points few are default for all plugins and the rest are custom defined by few plugin interfaces. + +Extension points enable plugins to hook into various events within the lifecycle of OpenSearch cluster. +The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: + + +* `getFeature` - Could be used to implement a custom feature and respond to Cluster state API. +* `createGuiceModules` - Node level guice modules. +* `getGuiceServiceClasses` - Node level services which will be automatically called with node state changes. +* `createComponents` - Custom component implemented and its lifecycle being managed by OpenSearch. +* `additionalSettings` - Implement additional node level settings. +* `getNamedWriteables` - Custom parsers the plugin would use for transport messaging. +* `getNamedXContent` - Custom parsers the plugin would use for NamedObjects +* `onIndexModule` - Index level extension point, called before an index is created. +* `getSettings` - Implement additional cluster level settings. +* `getSettingsFilter` - Implement additional cluster level settings filter. +* `getSettingUpgraders` - Implement setting upgraders. +* `getIndexTemplateMetadataUpgrader` - An extension to modify index template metadata on startup. +* `getExecutorBuilders` - Implement custom thread pools for executions. +* `getBootstrapChecks` - Add additional bootstrap checks when OpenSearch node initializes. +* `getRoles` - Implement additional DiscoveryNodeRole’s. +* `getAdditionalIndexSettingProviders` - Implement additional index level settings for newly created indices. + +Custom plugin interfaces define their new extension points for plugins to hook onto. For example, [Engine Plugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/EnginePlugin.java) interface which could be used to provide additional implementations to the core engine exposes a hook to [node bootstrap](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/node/Node.java#L577) after the plugin is loaded to load the custom `engineFactory` and [Index Service](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/indices/IndicesService.java#L763) overrides it if plugin chooses to override. + + +## How do Plugins work? + +As you might have used plugins in OpenSearch bundle, There are 2 parts for plugins to work with OpenSearch. +a. Installing a plugin. +b. Loading a plugin + +### Installing a plugin + +OpenSearch bundle comes with a tool `./bin/opensearch-plugin` which helps to install a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, OpenSearch security plugin defines [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and tool verifies if it is using the right version of OpenSearch, and the dependencies are present. + +Also the tool verifies `plugin-security.policy` file, which is defined by the plugin which needs an additional security permissions. For example, OpenSearch security plugin defines a bunch of permissions it needs through [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager and have more details later in this post. + +After the tool verifies the plugin is valid, it copies all jars and put them into `plugins` directory. +By default, opensearch-min artifact does not package any plugins including the [native plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) which exist in the OpenSearch code base. + + +### Loading a plugin + +Plugins run within the same process as OpenSearch. As OpenSearch process is bootstraps, it initializes [PluginService](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L124) via [Node.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/node/Node.java#L392). All plugins are class-loaded via [loadPlugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L765:20) during the bootstrap of PluginService. +It checks the `plugins` directory and loads the classpath where all the plugin jars and its dependencies are already installed by the `opensearch-plugin` install tool. + +``` +~/opensearch-1.1.0/plugins$ ls +opensearch-alerting opensearch-asynchronous-search opensearch-index-management opensearch-knn opensearch-performance-analyzer opensearch-security +opensearch-anomaly-detection opensearch-cross-cluster-replication opensearch-job-scheduler opensearch-notebooks opensearch-reports-scheduler opensearch-sql +``` + +During the bootstrap, each plugin is initialized and they hook up to various extension points through the interfaces they choose to implement. + +As the plugins are class-loaded during the node bootstrap, the extension points initializes the data structures and +this design prevents plugins to be loaded on fly and cannot hot swap when the node is up. (i.e. after the node bootstrap is complete). + +### Plugins vs Modules + +As you might have noticed, OpenSearch defines [plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) and [modules](https://github.com/opensearch-project/OpenSearch/tree/main/modules) differently. The main difference is modules are [automatically loaded](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L163) in an OpenSearch node and are packaged with `opensearch-min` artifact. On the flip side, plugins are not automatically packaged and have to manually installed. + + +``` +~/opensearch-1.1.0/modules$ ls +aggs-matrix-stats geo ingest-geoip lang-expression lang-painless opensearch-dashboards percolator reindex transport-netty4 +analysis-common ingest-common ingest-user-agent lang-mustache mapper-extras parent-join rank-eval repository-url +``` + +Modules essentially are plugins and they implement plugin interfaces, but the only logical difference that they are loaded by default which makes them special. All core extendible features are built via modules for extensibility. + + +## Java Security Manager + +Java applications are prone to have vulnerabilities on a remote cluster or by a DDoS attack. To prevent this, JVM can be run in a sandbox mode which will prevent, for example: access to local hard disk or the network. All of these are handled by the Security Manager. + +### How is it used in OpenSearch? + +1. As OpenSearch bundles few plugins, every plugin can define its own custom security policy file which will be installed at the same time when OpenSearch is installing the plugin. +2. Security Manager is initialized in [Opensearch.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L91) and every plugin has a custom policy file called [plugin-secruity.policy](https://github.com/opensearch-project/anomaly-detection/blob/main/src/main/plugin-metadata/plugin-security.policy). +3. The [getPolicy()](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearchPolicy.java#L77-L79) method will take care of assigning the initial default policies required for the plugins and [setPolicy()](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/Security.java#L134) method will assign the custom policies of the plugins present in `plugin-secruity.policy`. +4. Each custom security policy file is signed and has a codebase which is basically a signed key between OpenSearch and the plugin. +5. Each security policy can be attached via gradle plugin [opensearch.opensearchplugin](https://github.com/opensearch-project/anomaly-detection/blob/main/build.gradle#L94) in the `build.gradle` file of the plugin. + +``` +opensearchplugin { + description 'The HDFS repository plugin adds support for Hadoop Distributed File-System (HDFS) repositories.' + classname 'org.opensearch.repositories.hdfs.HdfsPlugin' +} +``` + +![security-manager](/assets/media/blog-images/2021-11-29-plugins-intro/security_manager.jpg){: .img-fluid} + + +The security policy has a notion of per-user policies and it is useful in the context of manually configuring the application deployment on a single specific computer, but it is hard to use in the generic case. + +### **Benefits of Security Manager in OpenSearch** + +* Prevent access to OpenSearch cluster with all permissions. Any intruder can add new classes, change private members or access the ClassLoaders. Security Manager takes care of it by creating a sandbox environment. +* `exitVM` permission is allowed for a few special classes, for other classes the process will kill and exit the cluster. This method calls [checkPermission](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L94) with the RuntimePermission and throws a SecurityException. +* Security Manager Policy allows installing a plugin through `plugin-secruity.policy` which consists of dynamic configuration and dependencies required for a plugin to run. +* Plugins can ask for `AllPermission` of the OpenSearch cluster. Security Manager takes care of `AllPermission` and makes sure to check it as a part of Bootstrap. + +### **Benefit of Security Manager for Plugins** + +* Plugins can create a `plugin-secruity.policy` ``file and write dynamic configuration and permissions required to run from OpenSearch Cluster. + +## Closing Notes + +We hope this post helps unbox the mystery of how plugins work within OpenSearch. Now that you learnt how plugins work and what their limitations are, let us know if you have any feedback or would like new features in plugin architecture. + +In the coming days, look out for a follow up post soon on how plugins work with OpenSearch Dashboards. diff --git a/assets/media/authors/kazabdu.jpg b/assets/media/authors/kazabdu.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6cbc774fd2534253e6d8150db20a272f3094c23 GIT binary patch literal 220382 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 literal 0 HcmV?d00001 diff --git a/assets/media/blog-images/2021-11-29-plugins-intro/security_manager.jpg b/assets/media/blog-images/2021-11-29-plugins-intro/security_manager.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6abc63054730f882ae9779b542fd575e4048f524 GIT binary patch literal 21243 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 Date: Wed, 24 Nov 2021 14:09:49 -0800 Subject: [PATCH 02/10] PR changes Signed-off-by: Owais Kazi --- _posts/2021-11-29-plugins-intro.markdown | 51 ++++++++++++------------ 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown index 65ef56e594..5ee9b69301 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -8,36 +8,36 @@ date: 2021-11-22 categories: - technical-post twittercard: - description: "This post walks through how plugins work in OpenSearch and how a custom Java Security Manager handle the security of OpenSearch." + description: "This post contains an overview of how OpenSearch plugins are loaded and interact with Java Security Manager." --- -OpenSearch enables extending core features via plugins. Plugins are empowered to access all extensible features of OpenSearch and extend them. In this blog post we wanted to unbox the plugin architecture and help understand how they work. +OpenSearch enables extending core features via plugins. Plugins are empowered to access all extensible features of OpenSearch and extend them. In this blog post, we wanted to unbox the plugin architecture, and help understand how they work. ## Pluggable Architecture -Plugins in OpenSearch bring in modular architecture and enable developing/managing a large code base easier. The [blog post](https://logz.io/blog/opensearch-plugins/) from our partner [Logz.io](http://logz.io/) really helps understand why pluggable architecture is important and how the architecture works. +Plugins in OpenSearch bring in modular architecture and enable developing/managing a large codebase easier. The [blog post](https://logz.io/blog/opensearch-plugins/) from our partner [Logz.io](http://logz.io/) helps understand why pluggable architecture is important, and how the architecture works. -Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) plugin reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. +The Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) plugin reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. Plugins are of various types, generally could be categorized as: * Analysis: Used for analysis of data available within the cluster. * Discovery: Used for easy discovery of nodes in various platforms. -* Ingest: Used for pre/post processing data during ingestion. +* Ingest: Used for pre/post-processing data during ingestion. * Mappers: Helps extend/create data fields to OpenSearch. -* Snapshot/Restore: Used to create snapshot and restore data +* Snapshot/Restore: Used to create a snapshot and restore data To develop these plugins, the code base has well defined [interfaces](https://github.com/opensearch-project/OpenSearch/tree/main/server/src/main/java/org/opensearch/plugins) to solve specific sub-set of problems. ## Extension Points -The architecture is built for plugins to hook onto various extension points with in the code base and subscribe to notifications/events they are interested in. There are a bunch of extension points few are default for all plugins and the rest are custom defined by few plugin interfaces. +The architecture is built for plugins to hook onto various extension points within the codebase and subscribe to notifications/events they are interested in. There are a bunch of extension points few are the default for all plugins and the rest are custom defined by a few plugin interfaces. -Extension points enable plugins to hook into various events within the lifecycle of OpenSearch cluster. +Extension points enable plugins to hook into various events within the lifecycle of the OpenSearch cluster. The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: @@ -47,7 +47,7 @@ The default extension points are defined by [Plugin.java](https://github.com/ope * `createComponents` - Custom component implemented and its lifecycle being managed by OpenSearch. * `additionalSettings` - Implement additional node level settings. * `getNamedWriteables` - Custom parsers the plugin would use for transport messaging. -* `getNamedXContent` - Custom parsers the plugin would use for NamedObjects +* `getNamedXContent` - Custom parsers the plugin would use for NamedObjects. * `onIndexModule` - Index level extension point, called before an index is created. * `getSettings` - Implement additional cluster level settings. * `getSettingsFilter` - Implement additional cluster level settings filter. @@ -63,24 +63,24 @@ Custom plugin interfaces define their new extension points for plugins to hook o ## How do Plugins work? -As you might have used plugins in OpenSearch bundle, There are 2 parts for plugins to work with OpenSearch. +As you might have used plugins in the OpenSearch bundle. There are two parts for plugins to work with OpenSearch. a. Installing a plugin. b. Loading a plugin ### Installing a plugin -OpenSearch bundle comes with a tool `./bin/opensearch-plugin` which helps to install a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, OpenSearch security plugin defines [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and tool verifies if it is using the right version of OpenSearch, and the dependencies are present. +The OpenSearch bundle comes with a tool `./bin/opensearch-plugin` which helps to install a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, the OpenSearch security plugin defines [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and the tool verifies if it is using the compatible version of OpenSearch, and the dependencies are present. -Also the tool verifies `plugin-security.policy` file, which is defined by the plugin which needs an additional security permissions. For example, OpenSearch security plugin defines a bunch of permissions it needs through [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager and have more details later in this post. +Also, the tool verifies `plugin-security.policy` file, which is defined by the plugin which needs additional security permissions. For example, the OpenSearch security plugin defines many permissions like file read/write, classloading or networking that it needs through [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager and have more details later in this post. -After the tool verifies the plugin is valid, it copies all jars and put them into `plugins` directory. +After the tool validates the plugin, it copies all jars into `plugins` directory. By default, opensearch-min artifact does not package any plugins including the [native plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) which exist in the OpenSearch code base. ### Loading a plugin -Plugins run within the same process as OpenSearch. As OpenSearch process is bootstraps, it initializes [PluginService](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L124) via [Node.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/node/Node.java#L392). All plugins are class-loaded via [loadPlugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L765:20) during the bootstrap of PluginService. -It checks the `plugins` directory and loads the classpath where all the plugin jars and its dependencies are already installed by the `opensearch-plugin` install tool. +Plugins run within the same process as OpenSearch. As OpenSearch process is bootstraps, it initializes [PluginService](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L124) via [Node.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/node/Node.java#L392). All plugins are class-loaded via [loadPlugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L765:20) during the bootstrapped of PluginService. +It checks the `plugins` directory and loads the classpath where all the plugin jars and their dependencies are already installed by the `opensearch-plugin` install tool. ``` ~/opensearch-1.1.0/plugins$ ls @@ -90,12 +90,11 @@ opensearch-anomaly-detection opensearch-cross-cluster-replication opensearch-job During the bootstrap, each plugin is initialized and they hook up to various extension points through the interfaces they choose to implement. -As the plugins are class-loaded during the node bootstrap, the extension points initializes the data structures and -this design prevents plugins to be loaded on fly and cannot hot swap when the node is up. (i.e. after the node bootstrap is complete). +As the plugins are class-loaded during the node bootstrap, the extension points initialize the data structures and this design prevents plugins to be loaded on the fly and cannot hot-swap when the node is up. (i.e. after the node bootstrap is complete). ### Plugins vs Modules -As you might have noticed, OpenSearch defines [plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) and [modules](https://github.com/opensearch-project/OpenSearch/tree/main/modules) differently. The main difference is modules are [automatically loaded](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L163) in an OpenSearch node and are packaged with `opensearch-min` artifact. On the flip side, plugins are not automatically packaged and have to manually installed. +As you might have noticed, OpenSearch defines [plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) and [modules](https://github.com/opensearch-project/OpenSearch/tree/main/modules) differently. The main difference is modules are [automatically loaded](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L163) in an OpenSearch node and are packaged with `opensearch-min` artifact. On the flipside, plugins are not automatically packaged and have to be manually installed. ``` @@ -104,19 +103,19 @@ aggs-matrix-stats geo ingest-geoip lang-expression lang-painless opensearch-dash analysis-common ingest-common ingest-user-agent lang-mustache mapper-extras parent-join rank-eval repository-url ``` -Modules essentially are plugins and they implement plugin interfaces, but the only logical difference that they are loaded by default which makes them special. All core extendible features are built via modules for extensibility. +Modules essentially are plugins and they implement plugin interfaces, but the only logical difference is that they are loaded by default which makes them special. All core extendible features are built via modules for extensibility. ## Java Security Manager -Java applications are prone to have vulnerabilities on a remote cluster or by a DDoS attack. To prevent this, JVM can be run in a sandbox mode which will prevent, for example: access to local hard disk or the network. All of these are handled by the Security Manager. +Java applications are prone to have vulnerabilities on a remote cluster or by a DDoS attack. To prevent this, JVM can be run in a sandbox mode which will prevent, for example: access to the local hard disk or the network. All of these are handled by the Security Manager. ### How is it used in OpenSearch? -1. As OpenSearch bundles few plugins, every plugin can define its own custom security policy file which will be installed at the same time when OpenSearch is installing the plugin. +1. As OpenSearch bundles a few plugins, every plugin can define its own custom security policy file which will be installed at the same time when OpenSearch is installing the plugin. 2. Security Manager is initialized in [Opensearch.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L91) and every plugin has a custom policy file called [plugin-secruity.policy](https://github.com/opensearch-project/anomaly-detection/blob/main/src/main/plugin-metadata/plugin-security.policy). 3. The [getPolicy()](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearchPolicy.java#L77-L79) method will take care of assigning the initial default policies required for the plugins and [setPolicy()](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/Security.java#L134) method will assign the custom policies of the plugins present in `plugin-secruity.policy`. -4. Each custom security policy file is signed and has a codebase which is basically a signed key between OpenSearch and the plugin. +4. Each custom security policy file is signed and has a codebase which is a signed key between OpenSearch and the plugin. 5. Each security policy can be attached via gradle plugin [opensearch.opensearchplugin](https://github.com/opensearch-project/anomaly-detection/blob/main/build.gradle#L94) in the `build.gradle` file of the plugin. ``` @@ -133,17 +132,17 @@ The security policy has a notion of per-user policies and it is useful in the co ### **Benefits of Security Manager in OpenSearch** -* Prevent access to OpenSearch cluster with all permissions. Any intruder can add new classes, change private members or access the ClassLoaders. Security Manager takes care of it by creating a sandbox environment. +* Prevent access to OpenSearch cluster with all permissions. Any intruder can add new classes, change private members or access the ClassLoaders. The Security Manager takes care of it by creating a sandbox environment. * `exitVM` permission is allowed for a few special classes, for other classes the process will kill and exit the cluster. This method calls [checkPermission](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L94) with the RuntimePermission and throws a SecurityException. * Security Manager Policy allows installing a plugin through `plugin-secruity.policy` which consists of dynamic configuration and dependencies required for a plugin to run. -* Plugins can ask for `AllPermission` of the OpenSearch cluster. Security Manager takes care of `AllPermission` and makes sure to check it as a part of Bootstrap. +* Plugins can ask for `AllPermission` of the OpenSearch cluster. The Security Manager takes care of `AllPermission` and makes sure to check it as a part of Bootstrap. ### **Benefit of Security Manager for Plugins** -* Plugins can create a `plugin-secruity.policy` ``file and write dynamic configuration and permissions required to run from OpenSearch Cluster. +* Plugins can create a `plugin-secruity.policy` file and write dynamic configuration and permissions required to run from OpenSearch Cluster. ## Closing Notes We hope this post helps unbox the mystery of how plugins work within OpenSearch. Now that you learnt how plugins work and what their limitations are, let us know if you have any feedback or would like new features in plugin architecture. -In the coming days, look out for a follow up post soon on how plugins work with OpenSearch Dashboards. +In the coming days, lookout for a follow-up post soon on how plugins work with OpenSearch Dashboards. From 59737923634d9918b4393ea56d0e2feb601c0bed Mon Sep 17 00:00:00 2001 From: Sarat Vemulapalli Date: Wed, 24 Nov 2021 17:13:21 -0500 Subject: [PATCH 03/10] Addressing comments Signed-off-by: Sarat Vemulapalli --- _posts/2021-11-29-plugins-intro.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown index 5ee9b69301..89d7aac630 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -12,12 +12,12 @@ twittercard: --- -OpenSearch enables extending core features via plugins. Plugins are empowered to access all extensible features of OpenSearch and extend them. In this blog post, we wanted to unbox the plugin architecture, and help understand how they work. +OpenSearch enables extending core features via plugins. Plugins are empowered to access all extensible features of OpenSearch and extend them. In this blog post we wanted to unbox the plugin architecture, and help understand how they work. ## Pluggable Architecture -Plugins in OpenSearch bring in modular architecture and enable developing/managing a large codebase easier. The [blog post](https://logz.io/blog/opensearch-plugins/) from our partner [Logz.io](http://logz.io/) helps understand why pluggable architecture is important, and how the architecture works. +Plugins in OpenSearch bring in modular architecture and enable developing/managing a large code base easier. The [blog post](https://logz.io/blog/opensearch-plugins/) from our partner [Logz.io](http://logz.io/) helps understand why pluggable architecture is important, and how the architecture works. The Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) plugin reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. @@ -35,13 +35,13 @@ To develop these plugins, the code base has well defined [interfaces](https://gi ## Extension Points -The architecture is built for plugins to hook onto various extension points within the codebase and subscribe to notifications/events they are interested in. There are a bunch of extension points few are the default for all plugins and the rest are custom defined by a few plugin interfaces. +The architecture is built for plugins to hook onto various extension points within the code base and subscribe to notifications/events they are interested in. There are bunch of extension points defined by Plugin.java and are available by default to all plugins. Plugins implementing custom interfaces have additional extension points. Extension points enable plugins to hook into various events within the lifecycle of the OpenSearch cluster. The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: -* `getFeature` - Could be used to implement a custom feature and respond to Cluster state API. +* `getFeature` - Could be used to implement a custom feature and respond to cluster state API. * `createGuiceModules` - Node level guice modules. * `getGuiceServiceClasses` - Node level services which will be automatically called with node state changes. * `createComponents` - Custom component implemented and its lifecycle being managed by OpenSearch. From 482c7f5c08d4b2f25a28364a52d4e1bcc183763f Mon Sep 17 00:00:00 2001 From: Sarat Vemulapalli Date: Wed, 24 Nov 2021 17:28:45 -0500 Subject: [PATCH 04/10] Addressing comments Signed-off-by: Sarat Vemulapalli --- _posts/2021-11-29-plugins-intro.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown index 89d7aac630..44c844fd6f 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -42,7 +42,7 @@ The default extension points are defined by [Plugin.java](https://github.com/ope * `getFeature` - Could be used to implement a custom feature and respond to cluster state API. -* `createGuiceModules` - Node level guice modules. +* `createGuiceModules` - Implement node level dependency injection modules via Guice. * `getGuiceServiceClasses` - Node level services which will be automatically called with node state changes. * `createComponents` - Custom component implemented and its lifecycle being managed by OpenSearch. * `additionalSettings` - Implement additional node level settings. From 55e717741d2ce63e7bf8177e33923b822f062d2a Mon Sep 17 00:00:00 2001 From: Sarat Vemulapalli Date: Wed, 24 Nov 2021 17:30:41 -0500 Subject: [PATCH 05/10] Updating the date to Monday Signed-off-by: Sarat Vemulapalli --- _posts/2021-11-29-plugins-intro.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown index 44c844fd6f..395c92dd75 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -4,7 +4,7 @@ title: "Introduction to OpenSearch Plugins" authors: - vemsarat - kazabdu -date: 2021-11-22 +date: 2021-11-29 categories: - technical-post twittercard: From 3cdc4473c6a27a632cb6270fca3e51248f4544e4 Mon Sep 17 00:00:00 2001 From: Owais Kazi Date: Mon, 29 Nov 2021 10:29:00 -0800 Subject: [PATCH 06/10] Updated Number Links Signed-off-by: Owais Kazi --- _posts/2021-11-29-plugins-intro.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown index 5ee9b69301..a4604c1e5a 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -38,7 +38,7 @@ To develop these plugins, the code base has well defined [interfaces](https://gi The architecture is built for plugins to hook onto various extension points within the codebase and subscribe to notifications/events they are interested in. There are a bunch of extension points few are the default for all plugins and the rest are custom defined by a few plugin interfaces. Extension points enable plugins to hook into various events within the lifecycle of the OpenSearch cluster. -The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: +The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: * `getFeature` - Could be used to implement a custom feature and respond to Cluster state API. @@ -58,7 +58,7 @@ The default extension points are defined by [Plugin.java](https://github.com/ope * `getRoles` - Implement additional DiscoveryNodeRole’s. * `getAdditionalIndexSettingProviders` - Implement additional index level settings for newly created indices. -Custom plugin interfaces define their new extension points for plugins to hook onto. For example, [Engine Plugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/EnginePlugin.java) interface which could be used to provide additional implementations to the core engine exposes a hook to [node bootstrap](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/node/Node.java#L577) after the plugin is loaded to load the custom `engineFactory` and [Index Service](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/indices/IndicesService.java#L763) overrides it if plugin chooses to override. +Custom plugin interfaces define their new extension points for plugins to hook onto. For example, [Engine Plugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/EnginePlugin.java) interface which could be used to provide additional implementations to the core engine exposes a hook to [node bootstrap](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L577) after the plugin is loaded to load the custom `engineFactory` and [Index Service](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/indices/IndicesService.java#L763) overrides it if plugin chooses to override. ## How do Plugins work? @@ -79,7 +79,7 @@ By default, opensearch-min artifact does not package any plugins including the [ ### Loading a plugin -Plugins run within the same process as OpenSearch. As OpenSearch process is bootstraps, it initializes [PluginService](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L124) via [Node.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/node/Node.java#L392). All plugins are class-loaded via [loadPlugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/PluginsService.java#L765:20) during the bootstrapped of PluginService. +Plugins run within the same process as OpenSearch. As OpenSearch process is bootstraps, it initializes [PluginService](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/PluginsService.java#L125) via [Node.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L392). All plugins are class-loaded via [loadPlugin](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/PluginsService.java#L763:20) during the bootstrapped of PluginService. It checks the `plugins` directory and loads the classpath where all the plugin jars and their dependencies are already installed by the `opensearch-plugin` install tool. ``` @@ -110,13 +110,13 @@ Modules essentially are plugins and they implement plugin interfaces, but the on Java applications are prone to have vulnerabilities on a remote cluster or by a DDoS attack. To prevent this, JVM can be run in a sandbox mode which will prevent, for example: access to the local hard disk or the network. All of these are handled by the Security Manager. -### How is it used in OpenSearch? +### How Security Manager is used in OpenSearch? 1. As OpenSearch bundles a few plugins, every plugin can define its own custom security policy file which will be installed at the same time when OpenSearch is installing the plugin. -2. Security Manager is initialized in [Opensearch.java](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L91) and every plugin has a custom policy file called [plugin-secruity.policy](https://github.com/opensearch-project/anomaly-detection/blob/main/src/main/plugin-metadata/plugin-security.policy). -3. The [getPolicy()](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearchPolicy.java#L77-L79) method will take care of assigning the initial default policies required for the plugins and [setPolicy()](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/Security.java#L134) method will assign the custom policies of the plugins present in `plugin-secruity.policy`. +2. Security Manager is initialized in [Opensearch.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L91) and every plugin has a custom policy file called [plugin-secruity.policy](https://github.com/opensearch-project/anomaly-detection/blob/main/src/main/plugin-metadata/plugin-security.policy). +3. The [getPolicy()](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/OpenSearchPolicy.java#L77-L79) method will take care of assigning the initial default policies required for the plugins and [setPolicy()](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/Security.java#L134) method will assign the custom policies of the plugins present in `plugin-secruity.policy`. 4. Each custom security policy file is signed and has a codebase which is a signed key between OpenSearch and the plugin. -5. Each security policy can be attached via gradle plugin [opensearch.opensearchplugin](https://github.com/opensearch-project/anomaly-detection/blob/main/build.gradle#L94) in the `build.gradle` file of the plugin. +5. Each security policy can be attached via gradle plugin [opensearch.opensearchplugin](https://github.com/opensearch-project/anomaly-detection/blob/1.2/build.gradle#L94) in the `build.gradle` file of the plugin. ``` opensearchplugin { From dba0ef91aa84f8443c55288aa9fc4ff323a3b525 Mon Sep 17 00:00:00 2001 From: Sarat Vemulapalli Date: Mon, 29 Nov 2021 13:42:16 -0500 Subject: [PATCH 07/10] Addressing comments part 2 Signed-off-by: Sarat Vemulapalli --- _posts/2021-11-29-plugins-intro.markdown | 53 +++++++++++------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown index dfc4cc4d8b..8e77dc65f4 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -8,41 +8,40 @@ date: 2021-11-29 categories: - technical-post twittercard: - description: "This post contains an overview of how OpenSearch plugins are loaded and interact with Java Security Manager." + description: "OpenSearch enables enhancing core features in a custom way via Plugins. In this blog post we wanted to unbox how plugins load, install, and run in OpenSearch..." --- - -OpenSearch enables extending core features via plugins. Plugins are empowered to access all extensible features of OpenSearch and extend them. In this blog post we wanted to unbox the plugin architecture, and help understand how they work. - +OpenSearch enables enhancing core features in a custom way via plugins. For example, plugins could add custom mapping types, engine scripts etc. In this blog post we wanted to unbox how plugins load, install, and run in OpenSearch. ## Pluggable Architecture -Plugins in OpenSearch bring in modular architecture and enable developing/managing a large code base easier. The [blog post](https://logz.io/blog/opensearch-plugins/) from our partner [Logz.io](http://logz.io/) helps understand why pluggable architecture is important, and how the architecture works. +The modular architecture in OpenSearch makes it easier to develop on a large code base (4.5MM lines). The [blog post](https://logz.io/blog/opensearch-plugins/) from OpenSearch partner [Logz.io](http://logz.io/) describes why pluggable architecture is important and how plugins can be developed. -The Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) plugin reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. +The Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. -Plugins are of various types, generally could be categorized as: +Plugins are of various types, generally can be categorized as: -* Analysis: Used for analysis of data available within the cluster. -* Discovery: Used for easy discovery of nodes in various platforms. -* Ingest: Used for pre/post-processing data during ingestion. -* Mappers: Helps extend/create data fields to OpenSearch. -* Snapshot/Restore: Used to create a snapshot and restore data +* Analysis: Used for analysis of data available within the cluster, +* Discovery: Used for easy discovery of nodes in various platforms, +* Ingest: Used for pre/post-processing data during ingestion, +* Mappers: Helps extend/create data fields, +* Snapshot/Restore: Used to create a snapshot and restore data. To develop these plugins, the code base has well defined [interfaces](https://github.com/opensearch-project/OpenSearch/tree/main/server/src/main/java/org/opensearch/plugins) to solve specific sub-set of problems. ## Extension Points -The architecture is built for plugins to hook onto various extension points within the code base and subscribe to notifications/events they are interested in. There are bunch of extension points defined by Plugin.java and are available by default to all plugins. Plugins implementing custom interfaces have additional extension points. +The architecture is designed for plugins to hook onto various points within the OpenSearch code base. Plugins can subscribe to notifications/events they are interested in via these extension points. +The `Plugin.java` defines a list default extension points. -Extension points enable plugins to hook into various events within the lifecycle of the OpenSearch cluster. +Extension points enable plugins to hook into various events within the cluster and data lifecycles in OpenSearch. The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: * `getFeature` - Could be used to implement a custom feature and respond to cluster state API. -* `createGuiceModules` - Implement node level dependency injection modules via Guice. +* `createGuiceModules` - Implement node level dependency injection modules via [Guice](https://github.com/google/guice). * `getGuiceServiceClasses` - Node level services which will be automatically called with node state changes. * `createComponents` - Custom component implemented and its lifecycle being managed by OpenSearch. * `additionalSettings` - Implement additional node level settings. @@ -58,20 +57,18 @@ The default extension points are defined by [Plugin.java](https://github.com/ope * `getRoles` - Implement additional DiscoveryNodeRole’s. * `getAdditionalIndexSettingProviders` - Implement additional index level settings for newly created indices. -Custom plugin interfaces define their new extension points for plugins to hook onto. For example, [Engine Plugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/EnginePlugin.java) interface which could be used to provide additional implementations to the core engine exposes a hook to [node bootstrap](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L577) after the plugin is loaded to load the custom `engineFactory` and [Index Service](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/indices/IndicesService.java#L763) overrides it if plugin chooses to override. +Custom plugin interfaces can define new extension points for plugins to hook onto. For example, the [Engine Plugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/EnginePlugin.java) interface could be used to provide additional implementations to the core engine, expose a hook to [node bootstrap](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L577) to load the custom `engineFactory` and the [Index Service](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/indices/IndicesService.java#L763) overrides it if plugin chooses to override. -## How do Plugins work? +## How do plugins work? -As you might have used plugins in the OpenSearch bundle. There are two parts for plugins to work with OpenSearch. -a. Installing a plugin. -b. Loading a plugin +As you might have used plugins in the OpenSearch bundle. There are two parts for plugins to work with OpenSearch: Installing a plugin, and Loading a plugin. ### Installing a plugin -The OpenSearch bundle comes with a tool `./bin/opensearch-plugin` which helps to install a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, the OpenSearch security plugin defines [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and the tool verifies if it is using the compatible version of OpenSearch, and the dependencies are present. +The OpenSearch bundle comes with a tool `./bin/opensearch-plugin` which installs a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, the OpenSearch security plugin defines the [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and the tool verifies if it is using the compatible version of OpenSearch, and the dependencies are present. -Also, the tool verifies `plugin-security.policy` file, which is defined by the plugin which needs additional security permissions. For example, the OpenSearch security plugin defines many permissions like file read/write, classloading or networking that it needs through [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager and have more details later in this post. +Also, the tool verifies the `plugin-security.policy` file, defined by the plugin which needs additional security permissions. For example, the OpenSearch security plugin defines many permissions like file read/write, classloading or networking that it needs through the [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager and have more details later in this post. After the tool validates the plugin, it copies all jars into `plugins` directory. By default, opensearch-min artifact does not package any plugins including the [native plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) which exist in the OpenSearch code base. @@ -79,7 +76,7 @@ By default, opensearch-min artifact does not package any plugins including the [ ### Loading a plugin -Plugins run within the same process as OpenSearch. As OpenSearch process is bootstraps, it initializes [PluginService](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/PluginsService.java#L125) via [Node.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L392). All plugins are class-loaded via [loadPlugin](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/PluginsService.java#L763:20) during the bootstrapped of PluginService. +Plugins run within the same process as the OpenSearch. As OpenSearch process is bootstraps, it initializes [PluginService](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/PluginsService.java#L125) via [Node.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L392). All plugins are class-loaded via [loadPlugin](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/PluginsService.java#L763:20) during the bootstrapped of PluginService. It checks the `plugins` directory and loads the classpath where all the plugin jars and their dependencies are already installed by the `opensearch-plugin` install tool. ``` @@ -88,9 +85,8 @@ opensearch-alerting opensearch-asynchronous-search opensearch-index-management opensearch-anomaly-detection opensearch-cross-cluster-replication opensearch-job-scheduler opensearch-notebooks opensearch-reports-scheduler opensearch-sql ``` -During the bootstrap, each plugin is initialized and they hook up to various extension points through the interfaces they choose to implement. - -As the plugins are class-loaded during the node bootstrap, the extension points initialize the data structures and this design prevents plugins to be loaded on the fly and cannot hot-swap when the node is up. (i.e. after the node bootstrap is complete). +As the plugins are class-loaded during the node bootstrap, the extension points (defined by the plugin interface) initialize the data structures. +This design of loading plugins during the node bootstrap prevents them to be loaded on the fly and cannot be hot swapped. Each node within the cluster has to be restarted to load a new plugin. ### Plugins vs Modules @@ -143,6 +139,7 @@ The security policy has a notion of per-user policies and it is useful in the co ## Closing Notes -We hope this post helps unbox the mystery of how plugins work within OpenSearch. Now that you learnt how plugins work and what their limitations are, let us know if you have any feedback or would like new features in plugin architecture. +We hope this post helps unbox the mystery of how plugins work within OpenSearch. Now that you learnt how plugins work and their limitations, we would love to see you getting your hands dirty and develop plugins for OpenSearch. +Looking forward, we are thinking about solving the limitations in plugin architecture and would love your [feedback/thoughts](https://github.com/opensearch-project/OpenSearch/issues/1422). -In the coming days, lookout for a follow-up post soon on how plugins work with OpenSearch Dashboards. +In the coming days, lookout for a follow-up post soon on intro to plugins with OpenSearch Dashboards. From 4dbaca5efbe3de7a60a1dc6007b5746e3c9d1b07 Mon Sep 17 00:00:00 2001 From: Owais Kazi Date: Mon, 29 Nov 2021 14:18:33 -0800 Subject: [PATCH 08/10] PR comments Signed-off-by: Owais Kazi --- _posts/2021-11-29-plugins-intro.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-11-29-plugins-intro.markdown index 8e77dc65f4..717be1d6be 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-11-29-plugins-intro.markdown @@ -22,8 +22,8 @@ The Plugin architecture is designed to enable solving specific problems and exte Plugins are of various types, generally can be categorized as: -* Analysis: Used for analysis of data available within the cluster, -* Discovery: Used for easy discovery of nodes in various platforms, +* Analysis: Used for researching of data available within the cluster, +* Discovery: Used for easy recognition of nodes in various platforms, * Ingest: Used for pre/post-processing data during ingestion, * Mappers: Helps extend/create data fields, * Snapshot/Restore: Used to create a snapshot and restore data. From c005cff63b8bbdb23ade9e9b7143cb9039c07bd1 Mon Sep 17 00:00:00 2001 From: Owais Kazi Date: Tue, 30 Nov 2021 14:00:40 -0800 Subject: [PATCH 09/10] PR comments Signed-off-by: Owais Kazi --- ...down => 2021-12-01-plugins-intro.markdown} | 21 ++++++++---------- .../security_manager.jpg | Bin 2 files changed, 9 insertions(+), 12 deletions(-) rename _posts/{2021-11-29-plugins-intro.markdown => 2021-12-01-plugins-intro.markdown} (92%) rename assets/media/blog-images/{2021-11-29-plugins-intro => 2021-12-01-plugins-intro}/security_manager.jpg (100%) diff --git a/_posts/2021-11-29-plugins-intro.markdown b/_posts/2021-12-01-plugins-intro.markdown similarity index 92% rename from _posts/2021-11-29-plugins-intro.markdown rename to _posts/2021-12-01-plugins-intro.markdown index 717be1d6be..e8a14e56ac 100644 --- a/_posts/2021-11-29-plugins-intro.markdown +++ b/_posts/2021-12-01-plugins-intro.markdown @@ -4,14 +4,14 @@ title: "Introduction to OpenSearch Plugins" authors: - vemsarat - kazabdu -date: 2021-11-29 +date: 2021-12-01 categories: - technical-post twittercard: description: "OpenSearch enables enhancing core features in a custom way via Plugins. In this blog post we wanted to unbox how plugins load, install, and run in OpenSearch..." --- -OpenSearch enables enhancing core features in a custom way via plugins. For example, plugins could add custom mapping types, engine scripts etc. In this blog post we wanted to unbox how plugins load, install, and run in OpenSearch. +OpenSearch enables enhancing core features in a custom way via plugins. For example, plugins could add custom mapping types, engine scripts, etc. In this blog post we wanted to unbox how plugins load, install, and run in OpenSearch. ## Pluggable Architecture @@ -19,7 +19,7 @@ The modular architecture in OpenSearch makes it easier to develop on a large cod The Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. -Plugins are of various types, generally can be categorized as: +Plugins are of various types, generally categorized as: * Analysis: Used for researching of data available within the cluster, @@ -33,14 +33,14 @@ To develop these plugins, the code base has well defined [interfaces](https://gi ## Extension Points -The architecture is designed for plugins to hook onto various points within the OpenSearch code base. Plugins can subscribe to notifications/events they are interested in via these extension points. -The `Plugin.java` defines a list default extension points. +The architecture is designed for plugins to hook onto various points within the OpenSearch code base. Plugins can subscribe to relevant notifications/events via these extension points. +The `Plugin.java` file defines a list default extension points. Extension points enable plugins to hook into various events within the cluster and data lifecycles in OpenSearch. The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: -* `getFeature` - Could be used to implement a custom feature and respond to cluster state API. +* `getFeature` - Used to implement a custom feature and respond to cluster state API. * `createGuiceModules` - Implement node level dependency injection modules via [Guice](https://github.com/google/guice). * `getGuiceServiceClasses` - Node level services which will be automatically called with node state changes. * `createComponents` - Custom component implemented and its lifecycle being managed by OpenSearch. @@ -68,10 +68,7 @@ As you might have used plugins in the OpenSearch bundle. There are two parts for The OpenSearch bundle comes with a tool `./bin/opensearch-plugin` which installs a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, the OpenSearch security plugin defines the [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and the tool verifies if it is using the compatible version of OpenSearch, and the dependencies are present. -Also, the tool verifies the `plugin-security.policy` file, defined by the plugin which needs additional security permissions. For example, the OpenSearch security plugin defines many permissions like file read/write, classloading or networking that it needs through the [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager and have more details later in this post. - -After the tool validates the plugin, it copies all jars into `plugins` directory. -By default, opensearch-min artifact does not package any plugins including the [native plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) which exist in the OpenSearch code base. +Also, the tool verifies the `plugin-security.policy` file, defined by the plugin which needs additional security permissions. For example, the OpenSearch security plugin defines many permissions like file read/write, classloading or networking that it needs through the [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager(more details later in this post).After the tool validates the plugin, it copies all jars into the `plugins` directory. By default, the OpenSearch Minimum distribution does not package any plugins including the [native plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) which exist in the OpenSearch code base. ### Loading a plugin @@ -86,7 +83,7 @@ opensearch-anomaly-detection opensearch-cross-cluster-replication opensearch-job ``` As the plugins are class-loaded during the node bootstrap, the extension points (defined by the plugin interface) initialize the data structures. -This design of loading plugins during the node bootstrap prevents them to be loaded on the fly and cannot be hot swapped. Each node within the cluster has to be restarted to load a new plugin. +This design of loading plugins during the node bootstrap prevents them being loaded on the fly and cannot be hot swapped. Each node within the cluster has to be restarted to load a new plugin. ### Plugins vs Modules @@ -121,7 +118,7 @@ opensearchplugin { } ``` -![security-manager](/assets/media/blog-images/2021-11-29-plugins-intro/security_manager.jpg){: .img-fluid} +![security-manager](/assets/media/blog-images/2021-12-01-plugins-intro/security_manager.jpg){: .img-fluid} The security policy has a notion of per-user policies and it is useful in the context of manually configuring the application deployment on a single specific computer, but it is hard to use in the generic case. diff --git a/assets/media/blog-images/2021-11-29-plugins-intro/security_manager.jpg b/assets/media/blog-images/2021-12-01-plugins-intro/security_manager.jpg similarity index 100% rename from assets/media/blog-images/2021-11-29-plugins-intro/security_manager.jpg rename to assets/media/blog-images/2021-12-01-plugins-intro/security_manager.jpg From 9463e6c1f21cd4404fb378278ceeb8da6e5bba3c Mon Sep 17 00:00:00 2001 From: Sarat Vemulapalli Date: Wed, 1 Dec 2021 12:42:04 -0500 Subject: [PATCH 10/10] Addressing comments part 3 Signed-off-by: Sarat Vemulapalli --- _posts/2021-12-01-plugins-intro.markdown | 41 +++++++++++------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/_posts/2021-12-01-plugins-intro.markdown b/_posts/2021-12-01-plugins-intro.markdown index e8a14e56ac..446a3e9160 100644 --- a/_posts/2021-12-01-plugins-intro.markdown +++ b/_posts/2021-12-01-plugins-intro.markdown @@ -15,7 +15,7 @@ OpenSearch enables enhancing core features in a custom way via plugins. For exam ## Pluggable Architecture -The modular architecture in OpenSearch makes it easier to develop on a large code base (4.5MM lines). The [blog post](https://logz.io/blog/opensearch-plugins/) from OpenSearch partner [Logz.io](http://logz.io/) describes why pluggable architecture is important and how plugins can be developed. +The modular architecture in OpenSearch makes it easier to develop on a large codebase (4.5MM lines). The [blog post](https://logz.io/blog/opensearch-plugins/) from OpenSearch partner [Logz.io](http://logz.io/) describes why pluggable architecture is important and how plugins can be developed. The Plugin architecture is designed to enable solving specific problems and extending generic features. For example, [Anomaly Detection](https://github.com/opensearch-project/anomaly-detection) reads time stream data ingested and finds anomalies. Another example is [Job Scheduler](https://github.com/opensearch-project/job-scheduler) plugin which schedules and runs generic jobs. @@ -28,19 +28,19 @@ Plugins are of various types, generally categorized as: * Mappers: Helps extend/create data fields, * Snapshot/Restore: Used to create a snapshot and restore data. -To develop these plugins, the code base has well defined [interfaces](https://github.com/opensearch-project/OpenSearch/tree/main/server/src/main/java/org/opensearch/plugins) to solve specific sub-set of problems. +To develop these plugins, the codebase has well defined [interfaces](https://github.com/opensearch-project/OpenSearch/tree/main/server/src/main/java/org/opensearch/plugins) to solve specific sub-set of problems. ## Extension Points -The architecture is designed for plugins to hook onto various points within the OpenSearch code base. Plugins can subscribe to relevant notifications/events via these extension points. +The architecture is designed for plugins to hook onto various points within the OpenSearch codebase. Plugins can subscribe to relevant notifications/events via these extension points. The `Plugin.java` file defines a list default extension points. Extension points enable plugins to hook into various events within the cluster and data lifecycles in OpenSearch. The default extension points are defined by [Plugin.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/plugins/Plugin.java#L90) abstract class: -* `getFeature` - Used to implement a custom feature and respond to cluster state API. +* `getFeature` - Implement a custom feature and respond to cluster state API. * `createGuiceModules` - Implement node level dependency injection modules via [Guice](https://github.com/google/guice). * `getGuiceServiceClasses` - Node level services which will be automatically called with node state changes. * `createComponents` - Custom component implemented and its lifecycle being managed by OpenSearch. @@ -57,18 +57,18 @@ The default extension points are defined by [Plugin.java](https://github.com/ope * `getRoles` - Implement additional DiscoveryNodeRole’s. * `getAdditionalIndexSettingProviders` - Implement additional index level settings for newly created indices. -Custom plugin interfaces can define new extension points for plugins to hook onto. For example, the [Engine Plugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/EnginePlugin.java) interface could be used to provide additional implementations to the core engine, expose a hook to [node bootstrap](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L577) to load the custom `engineFactory` and the [Index Service](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/indices/IndicesService.java#L763) overrides it if plugin chooses to override. +Custom plugin interfaces can define new extension points for plugins to hook onto. For example, the [Engine Plugin](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/plugins/EnginePlugin.java) interface can be used to provide additional implementations to the core engine, expose a hook to [node bootstrap](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/node/Node.java#L577) to load the custom `engineFactory` and the [Index Service](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/indices/IndicesService.java#L763) overrides it if plugin chooses to override. ## How do plugins work? -As you might have used plugins in the OpenSearch bundle. There are two parts for plugins to work with OpenSearch: Installing a plugin, and Loading a plugin. +As you might have used plugins in the OpenSearch distribution. Plugins are installed and loaded when OpenSearch starts. ### Installing a plugin -The OpenSearch bundle comes with a tool `./bin/opensearch-plugin` which installs a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, the OpenSearch security plugin defines the [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and the tool verifies if it is using the compatible version of OpenSearch, and the dependencies are present. +The OpenSearch distribution comes with a tool `./bin/opensearch-plugin` which installs a plugin. [PluginCli](https://github.com/opensearch-project/OpenSearch/blob/main/distribution/tools/plugin-cli/src/main/java/org/opensearch/plugins/PluginCli.java) reads and validates `plugin-descriptor.properties` file packaged with every plugin. For example, the OpenSearch security plugin defines the [plugin-descriptor.properties](https://github.com/opensearch-project/security/blob/main/plugin-descriptor.properties) file which defines a bunch of parameters, and the tool verifies if it is using the compatible version of OpenSearch, and the dependencies are present. -Also, the tool verifies the `plugin-security.policy` file, defined by the plugin which needs additional security permissions. For example, the OpenSearch security plugin defines many permissions like file read/write, classloading or networking that it needs through the [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager(more details later in this post).After the tool validates the plugin, it copies all jars into the `plugins` directory. By default, the OpenSearch Minimum distribution does not package any plugins including the [native plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) which exist in the OpenSearch code base. +The tool verifies the `plugin-security.policy` file, defined by the plugin which needs additional security permissions. For example, the OpenSearch security plugin defines many permissions like file read/write, classloading or networking that it needs through the [plugin-security.policy](https://github.com/opensearch-project/security/blob/main/plugin-security.policy) file. These permissions are managed via Java Security Manager (more details later in this post).After the tool validates the plugin, it copies all jars into the `plugins` directory. By default, the OpenSearch Minimum distribution does not package any plugins including the [native plugins](https://github.com/opensearch-project/OpenSearch/tree/main/plugins) which exist in the OpenSearch codebase. ### Loading a plugin @@ -83,7 +83,7 @@ opensearch-anomaly-detection opensearch-cross-cluster-replication opensearch-job ``` As the plugins are class-loaded during the node bootstrap, the extension points (defined by the plugin interface) initialize the data structures. -This design of loading plugins during the node bootstrap prevents them being loaded on the fly and cannot be hot swapped. Each node within the cluster has to be restarted to load a new plugin. +This design of loading plugins during the node bootstrap prevents them being loaded on the fly and cannot be hot-swapped. Each node within the cluster has to be restarted to reload a new plugin. ### Plugins vs Modules @@ -105,11 +105,11 @@ Java applications are prone to have vulnerabilities on a remote cluster or by a ### How Security Manager is used in OpenSearch? -1. As OpenSearch bundles a few plugins, every plugin can define its own custom security policy file which will be installed at the same time when OpenSearch is installing the plugin. -2. Security Manager is initialized in [Opensearch.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L91) and every plugin has a custom policy file called [plugin-secruity.policy](https://github.com/opensearch-project/anomaly-detection/blob/main/src/main/plugin-metadata/plugin-security.policy). -3. The [getPolicy()](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/OpenSearchPolicy.java#L77-L79) method will take care of assigning the initial default policies required for the plugins and [setPolicy()](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/Security.java#L134) method will assign the custom policies of the plugins present in `plugin-secruity.policy`. -4. Each custom security policy file is signed and has a codebase which is a signed key between OpenSearch and the plugin. -5. Each security policy can be attached via gradle plugin [opensearch.opensearchplugin](https://github.com/opensearch-project/anomaly-detection/blob/1.2/build.gradle#L94) in the `build.gradle` file of the plugin. +* As OpenSearch bundles a few plugins, every plugin can define its own custom security policy file which will be installed at the same time when OpenSearch is installing the plugin. +* Security Manager is initialized in [Opensearch.java](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L91) and every plugin has a custom policy file called [plugin-security.policy](https://github.com/opensearch-project/anomaly-detection/blob/main/src/main/plugin-metadata/plugin-security.policy). +* The [getPolicy()](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/OpenSearchPolicy.java#L77-L79) method will take care of assigning the initial default policies required for the plugins and [setPolicy()](https://github.com/opensearch-project/OpenSearch/blob/1.2/server/src/main/java/org/opensearch/bootstrap/Security.java#L134) method will assign the custom policies of the plugins present in `plugin-security.policy`. +* Each custom security policy file is signed and has a codebase which is a signed key between OpenSearch and the plugin. +* Each security policy can be attached via gradle plugin [opensearch.opensearchplugin](https://github.com/opensearch-project/anomaly-detection/blob/1.2/build.gradle#L94) in the `build.gradle` file of the plugin. ``` opensearchplugin { @@ -127,16 +127,13 @@ The security policy has a notion of per-user policies and it is useful in the co * Prevent access to OpenSearch cluster with all permissions. Any intruder can add new classes, change private members or access the ClassLoaders. The Security Manager takes care of it by creating a sandbox environment. * `exitVM` permission is allowed for a few special classes, for other classes the process will kill and exit the cluster. This method calls [checkPermission](https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/bootstrap/OpenSearch.java#L94) with the RuntimePermission and throws a SecurityException. -* Security Manager Policy allows installing a plugin through `plugin-secruity.policy` which consists of dynamic configuration and dependencies required for a plugin to run. +* Security Manager Policy allows installing a plugin through `plugin-security.policy` which consists of dynamic configuration and dependencies required for a plugin to run. * Plugins can ask for `AllPermission` of the OpenSearch cluster. The Security Manager takes care of `AllPermission` and makes sure to check it as a part of Bootstrap. - -### **Benefit of Security Manager for Plugins** - -* Plugins can create a `plugin-secruity.policy` file and write dynamic configuration and permissions required to run from OpenSearch Cluster. +* Plugins can create a `plugin-security.policy` file and write dynamic configuration and permissions required to run from OpenSearch Cluster. ## Closing Notes -We hope this post helps unbox the mystery of how plugins work within OpenSearch. Now that you learnt how plugins work and their limitations, we would love to see you getting your hands dirty and develop plugins for OpenSearch. -Looking forward, we are thinking about solving the limitations in plugin architecture and would love your [feedback/thoughts](https://github.com/opensearch-project/OpenSearch/issues/1422). +We hope this post helped explain how plugins work within OpenSearch. We would love to see you get your hands dirty, and develop a new plugin for OpenSearch. +Looking forward, we are thinking about solving the limitations in plugin architecture and would ask for your feedback in [OpenSearch#1422](https://github.com/opensearch-project/OpenSearch/issues/1422). -In the coming days, lookout for a follow-up post soon on intro to plugins with OpenSearch Dashboards. +In the coming days, look out for a follow-up post soon on intro to plugins with OpenSearch Dashboards.