- Elastic Cloud Enterprise - Elastic Cloud on your Infrastructure: other versions:
- Introducing Elastic Cloud Enterprise
- Preparing your installation
- Installing Elastic Cloud Enterprise
- Identify the deployment scenario
- Install ECE on a public cloud
- Install ECE on your own premises
- Alternative: Install ECE with Ansible
- Log into the Cloud UI
- Install ECE on additional hosts
- Migrate ECE to Podman hosts
- Post-installation steps
- Configuring your installation
- System deployments configuration
- Configure deployment templates
- Tag your allocators
- Edit instance configurations
- Create instance configurations
- Create deployment templates
- Configure system deployment templates
- Configure index management for templates
- Updating custom templates to support
node_roles
and autoscaling - Updating custom templates to support Integrations Server
- Default instance configurations
- Include additional Kibana plugins
- Manage snapshot repositories
- Manage licenses
- Change the ECE API URL
- Change endpoint URLs
- Enable custom endpoint aliases
- Configure allocator affinity
- Change allocator disconnect timeout
- Migrate ECE on Podman hosts to SELinux in
enforcing
mode
- Securing your installation
- Monitoring your installation
- Administering your installation
- Working with deployments
- Create a deployment
- Access Kibana
- Adding data to Elasticsearch
- Migrating data
- Ingesting data from your application
- Ingest data with Node.js on Elastic Cloud Enterprise
- Ingest data with Python on Elastic Cloud Enterprise
- Ingest data from Beats to Elastic Cloud Enterprise with Logstash as a proxy
- Ingest data from a relational database into Elastic Cloud Enterprise
- Ingest logs from a Python application using Filebeat
- Ingest logs from a Node.js web application using Filebeat
- Manage data from the command line
- Administering deployments
- Change your deployment configuration
- Maintenance mode
- Terminate a deployment
- Restart a deployment
- Restore a deployment
- Delete a deployment
- Migrate to index lifecycle management
- Disable an Elasticsearch data tier
- Access the Elasticsearch API console
- Work with snapshots
- Restore a snapshot across clusters
- Upgrade versions
- Editing your user settings
- Deployment autoscaling
- Configure Beats and Logstash with Cloud ID
- Keep your clusters healthy
- Keep track of deployment activity
- Secure your clusters
- Deployment heap dumps
- Deployment thread dumps
- Traffic Filtering
- Connect to your cluster
- Manage your Kibana instance
- Manage your APM & Fleet Server (7.13+)
- Manage your APM Server (versions before 7.13)
- Manage your Integrations Server
- Switch from APM to Integrations Server payload
- Enable logging and monitoring
- Enable cross-cluster search and cross-cluster replication
- Access other deployments of the same Elastic Cloud Enterprise environment
- Access deployments of another Elastic Cloud Enterprise environment
- Access deployments of an Elasticsearch Service organization
- Access clusters of a self-managed environment
- Enabling CCS/R between Elastic Cloud Enterprise and ECK
- Edit or remove a trusted environment
- Migrate the cross-cluster search deployment template
- Enable App Search
- Enable Enterprise Search
- Enable Graph (versions before 5.0)
- Troubleshooting
- RESTful API
- Authentication
- API calls
- How to access the API
- API examples
- Setting up your environment
- A first API call: What deployments are there?
- Create a first Deployment: Elasticsearch and Kibana
- Applying a new plan: Resize and add high availability
- Updating a deployment: Checking on progress
- Applying a new deployment configuration: Upgrade
- Enable more stack features: Add Enterprise Search to a deployment
- Dipping a toe into platform automation: Generate a roles token
- Customize your deployment
- Remove unwanted deployment templates and instance configurations
- Secure your settings
- API reference
- Changes to index allocation and API
- Script reference
- Release notes
- Elastic Cloud Enterprise 3.7.3
- Elastic Cloud Enterprise 3.7.2
- Elastic Cloud Enterprise 3.7.1
- Elastic Cloud Enterprise 3.7.0
- Elastic Cloud Enterprise 3.6.2
- Elastic Cloud Enterprise 3.6.1
- Elastic Cloud Enterprise 3.6.0
- Elastic Cloud Enterprise 3.5.1
- Elastic Cloud Enterprise 3.5.0
- Elastic Cloud Enterprise 3.4.1
- Elastic Cloud Enterprise 3.4.0
- Elastic Cloud Enterprise 3.3.0
- Elastic Cloud Enterprise 3.2.1
- Elastic Cloud Enterprise 3.2.0
- Elastic Cloud Enterprise 3.1.1
- Elastic Cloud Enterprise 3.1.0
- Elastic Cloud Enterprise 3.0.0
- Elastic Cloud Enterprise 2.13.4
- Elastic Cloud Enterprise 2.13.3
- Elastic Cloud Enterprise 2.13.2
- Elastic Cloud Enterprise 2.13.1
- Elastic Cloud Enterprise 2.13.0
- Elastic Cloud Enterprise 2.12.4
- Elastic Cloud Enterprise 2.12.3
- Elastic Cloud Enterprise 2.12.2
- Elastic Cloud Enterprise 2.12.1
- Elastic Cloud Enterprise 2.12.0
- Elastic Cloud Enterprise 2.11.2
- Elastic Cloud Enterprise 2.11.1
- Elastic Cloud Enterprise 2.11.0
- Elastic Cloud Enterprise 2.10.1
- Elastic Cloud Enterprise 2.10.0
- Elastic Cloud Enterprise 2.9.2
- Elastic Cloud Enterprise 2.9.1
- Elastic Cloud Enterprise 2.9.0
- Elastic Cloud Enterprise 2.8.1
- Elastic Cloud Enterprise 2.8.0
- Elastic Cloud Enterprise 2.7.2
- Elastic Cloud Enterprise 2.7.1
- Elastic Cloud Enterprise 2.7.0
- Elastic Cloud Enterprise 2.6.2
- Elastic Cloud Enterprise 2.6.1
- Elastic Cloud Enterprise 2.6.0
- Elastic Cloud Enterprise 2.5.1
- Elastic Cloud Enterprise 2.5.0
- Elastic Cloud Enterprise 2.4.3
- Elastic Cloud Enterprise 2.4.2
- Elastic Cloud Enterprise 2.4.1
- Elastic Cloud Enterprise 2.4.0
- Elastic Cloud Enterprise 2.3.2
- Elastic Cloud Enterprise 2.3.1
- Elastic Cloud Enterprise 2.3.0
- Elastic Cloud Enterprise 2.2.3
- Elastic Cloud Enterprise 2.2.2
- Elastic Cloud Enterprise 2.2.1
- Elastic Cloud Enterprise 2.2.0
- Elastic Cloud Enterprise 2.1.1
- Elastic Cloud Enterprise 2.1.0
- Elastic Cloud Enterprise 2.0.1
- Elastic Cloud Enterprise 2.0.0
- Elastic Cloud Enterprise 1.1.5
- Elastic Cloud Enterprise 1.1.4
- Elastic Cloud Enterprise 1.1.3
- Elastic Cloud Enterprise 1.1.2
- Elastic Cloud Enterprise 1.1.1
- Elastic Cloud Enterprise 1.1.0
- Elastic Cloud Enterprise 1.0.2
- Elastic Cloud Enterprise 1.0.1
- Elastic Cloud Enterprise 1.0.0
- What’s new with the Elastic Stack
- About this product
Add custom bundles and plugins to your deployment
editAdd custom bundles and plugins to your deployment
editFollow these steps to upload custom bundles and plugins to your Elasticsearch clusters, so that it uses your custom bundles or plugins.
- Update your Elasticsearch cluster in the advanced configuration editor:
-
For bundles, modify the
resources.elasticsearch.plan.elasticsearch.user_bundles
JSON attribute of each Elasticsearch instance type. -
For plugins, modify the
resources.elasticsearch.plan.elasticsearch.user_plugins
JSON attribute of each Elasticsearch instance type.
We’ve provided some examples, including LDAP bundles, SAML bundles, synonym bundles, and adding a JVM trustore.
As part of the ECE high availability strategy, it’s a good idea to make sure that any web servers hosting custom bundles or plugins required by ECE are available to all allocators, so that they can continue to be accessed in the event of a network partition or zone outage. An instance that requires custom bundles or plugins will be unable to start in the event that it can’t access the plugin web server.
Add custom plugins to your deployment
editCustom plugins can include the official Elasticsearch plugins not provided with Elastic Cloud Enterprise, any of the community-sourced plugins, or plugins that you write yourself.
- Log into the Cloud UI.
-
From the Deployments page, select your deployment.
Narrow the list by name, ID, or choose from several other filters. To further define the list, use a combination of filters.
- In the left side navigation select Edit from your deployment menu, then go to the bottom of the page and select Advanced Edit.
-
Within the Deployment configuration JSON find the section:
resources
>elasticsearch
>plan
>elasticsearch
If there is an existing
user_plugins
section, then add the new plugin there, otherwise add auser_plugins
section.{ ... "resources": { "elasticsearch": [ ... "plan": { ... "elasticsearch": { ... "user_bundles": [ { .... } ] , "user_plugins": [ { "url" : "<some static non_expirable url>", "name" : "plugin_name", "elasticsearch_version" : "<es_version>" }, { "url": "http://www.MYURL.com/my-custom-plugin.zip", "name": "my-custom-plugin", "elasticsearch_version": "7.17.1" } ] }
The URL for the plugin must be always available. Make sure you host the plugin artifacts internally in a highly available environment. The URL must use the scheme
http
orhttps
The version must match exactly your Elasticsearch version, such as
7.17.1
. Wildcards (*) are not allowed.If the plugin URL becomes unreachable (if the URL changes at remote end, or connectivity to the remote web server has issues) you might encounter boot loops.
Don’t use the same URL to serve newer versions of the plugin. This may result in different nodes of the same cluster running different plugin versions.
A plugin URL that uses an
https
endpoint with a certificate signed by an internal Certificate Authority (CA) is not supported. Either use a publicly trusted certificate, or fall back to thehttp
scheme. - Save your changes.
-
To verify that all nodes have the plugins installed, use one of these commands:
GET /_nodes/plugins?filter_path=nodes.*.plugins
orGET _cat/plugins?v
Example: Custom LDAP bundle
editThis example adds a custom LDAP bundle for deployment level role-based access control (RBAC). To set platform level RBAC, check Configure RBAC.
-
Prepare a custom bundle as a ZIP file that contains your keystore file with the private key and certificate inside of a
truststore
folder in the same way that you would on Elastic Cloud. This bundle allows all Elasticsearch containers to access the same keystore file through yourssl.truststore
settings. -
In the advanced configuration editor, update your new Elasticsearch cluster with the custom bundle you have just created. Modify the
user_bundles
JSON attribute of each Elasticsearch instance type as shown in the following example:{ ... "resources": { "elasticsearch": [ ... "plan": { ... "elasticsearch": { ... "user_bundles": [ { "name": "ldap-cert", "url": "http://www.MYURL.com/ldapcert.zip", "elasticsearch_version": "*" } ] } ...
The URLs for the bundle ZIP files (
ldapcert.zip
) must be always available. Make sure you host the plugin artifacts internally in a highly available environment.If the bundle URL becomes unreachable (if the URL changes at remote end, or connectivity to the remote web server has issues) you might encounter boot loops.
Don’t use the same URL to serve newer versions of the bundle. This may result in different nodes of the same cluster running different bundle versions.
-
Custom bundles are unzipped in
/app/config/BUNDLE_DIRECTORY_STRUCTURE
, whereBUNDLE_DIRECTORY_STRUCTURE
is the directory structure within the bundle ZIP file itself. These file locations are needed in the next step.$ tree . . └── truststore └── keystore.ks
In this example, the unzipped keystore file gets placed under
/app/config/truststore/keystore.ks
.
Example: Custom SAML bundle
editThis example adds a custom SAML bundle for deployment level role-based access control (RBAC). To set platform level RBAC, check Configure RBAC.
-
If your Identity Provider doesn’t publish its SAML metadata at an HTTP URL, or if your Elasticsearch cluster cannot reach that URL, you can upload the SAML metadata as a file.
-
Prepare a ZIP file with a custom bundle that contains your Identity Provider’s metadata (
metadata.xml
) and store it in thesaml
folder.This bundle allows all Elasticsearch containers to access the metadata file.
-
In the advanced configuration editor, update your Elasticsearch cluster configuration with the bundle you prepared in the previous step. Modify the
user_bundles
JSON attribute of each Elasticsearch instance type as shown in the following example:{ ... "resources": { "elasticsearch": [ ... "plan": { ... "elasticsearch": { ... "user_bundles": [ { "name": "saml-metadata", "url": "http://www.MYURL.com/saml-metadata.zip", "elasticsearch_version": "*" } ] } ...
The URL for the bundle ZIP file must be always available. Make sure you host the plugin artifacts internally in a highly available environment.
If the bundle URL becomes unreachable (if the URL changes at remote end, or connectivity to the remote web server has issues) you might encounter boot loops.
Don’t use the same URL to serve newer versions of the bundle. This may result in different nodes of the same cluster running different bundle versions.
Custom bundles are unzipped in
/app/config/BUNDLE_DIRECTORY_STRUCTURE
, whereBUNDLE_DIRECTORY_STRUCTURE
is the directory structure within the ZIP file itself. These file locations are needed in the next step.In this example, the SAML metadata file is located in the path
/app/config/saml/metadata.xml
:$ tree . . └── saml └── metadata.xml
-
Adjust your
saml
realm configuration accordingly:
-
Example: Custom JVM trust store bundle
editThis functionality is supported for Elasticsearch versions 6.x, starting with 6.8.2, and Elasticsearch 7.x, starting with 7.2.1
If you are using SSL certificates signed by non-public certificate authorities, Elasticsearch is not able to communicate with the services using those certificates unless you import a custom JVM trust store containing the certificates of your signing authority into your Elastic Cloud Enterprise installation. You’ll need the trust store to access snapshot repositories like Minio, for your Elastic Cloud Enterprise proxy, or to reindex from remote.
To import a JVM trust store:
-
Prepare the custom JVM trust store:
-
Pull the certificate from the service you want to make accessible:
- Save it to a file with as a PEM extension.
-
Locate your JRE’s default trust store, and copy it to the current directory:
Default trust store contains certificates of many well known root authorities that are trusted by default. If you only want to include a limited list of CAs to trust, skip this step, and simply import specific certificates you want to trust into an empty store as shown next
-
Use keytool command from your JRE to import certificate(s) into the keystore:
$JAVA_HOME/bin/keytool -keystore cacerts -storepass changeit -noprompt -importcert -file <certificate>.pem -alias <some alias>
The file where you saved the certificate to import, and an alias you assign to it, that is descriptive of the origin of the certificate
We recommend that you keep file name and password for the trust store as JVM defaults (
cacerts
andchangeit
respectively). If you need to use different values, you need to add extra configuration, as detailed later in this document, in addition to adding the bundle.You can have multiple certificates to the trust store, repeating the same command. There is only one trust store per cluster currently supported. You cannot, for example, add multiple bundles with different trust stores to the same cluster, they will not get merged. Add all certificates to be trusted to the same trust store
-
-
Create the bundle:
A bundle may contain other contents beyond the trust store if you prefer, but we recommend creating separate bundles for different purposes.
-
In the advanced configuration editor, update your Elasticsearch cluster configuration with the bundle you prepared in the previous step. Modify the
user_bundles
JSON attribute of each Elasticsearch instance type as shown in the following example:{ ... "resources": { "elasticsearch": [ ... "plan": { ... "elasticsearch": { ... "user_bundles": [ { "name": "custom-ca-certs", "url": "http://www.MYURL.com/cacerts.zip", "elasticsearch_version": "*" } ] } ...
The URL for the bundle ZIP file must be always available. Make sure you host the plugin artefacts internally in a highly available environment.
Wildcards are allowed here, since the certificates are independent from the Elasticsearch version.
If the bundle URL becomes unreachable (if the URL changes at remote end, or connectivity to the remote web server has issues) you might encounter boot loops.
Don’t use the same URL to serve newer versions of the bundle, i.e. when updating certificates. This may result in different nodes of the same cluster running different bundle versions.
-
If you prefer to use a different file name and/or password for the trust store, you also need to add an additional configuration section to the cluster metadata before adding the bundle. This configuration should be added to the
Elasticsearch cluster data
section of the page:
The name of the trust store must match the filename included into the archive |
|
Password used to create the trust store Use only alphanumeric characters, dashes, and underscores in both file name and password. You do not need to do this step if you are using default filename and password ( |
Example: Custom GeoIP database bundle
edit-
Prepare a ZIP file with a custom bundle that contains a: GeoLite2 database. The folder has to be named
ingest-geoip
, and the file name can be anything that is appended-(City|Country|ASN)
with themmdb
file extension, and it must have a different name than the original nameGeoLite2-City.mmdb
.The file
my-geoip-file.zip
should look like this:$ tree . . └── ingest-geoip └── MyGeoLite2-City.mmdb
- Copy the ZIP file to a webserver that is reachable from any allocator in your environment.
-
In the advanced configuration editor, update your Elasticsearch cluster configuration with the bundle you prepared in the previous step. Modify the
user_bundles
JSON attribute of each Elasticsearch instance type as shown in the following example.{ ... "resources": { "elasticsearch": [ ... "plan": { ... "elasticsearch": { ... "user_bundles": [ { "name": "custom-geoip-db", "url": "http://www.MYURL.com/my-geoip-file.zip", "elasticsearch_version": "*" } ] }
-
To use this bundle, you can refer it in the GeoIP processor of an ingest pipeline as
MyGeoLite2-City.mmdb
underdatabase_file
such as:... { "geoip": { "field": ... "database_file": "MyGeoLite2-City.mmdb", ... } } ...
Example: Custom synonyms bundle
edit-
Prepare a ZIP file with a custom bundle that contains a dictionary of synonyms in a text file.
The file
synonyms.zip
should look like this:$ tree . . └── dictionaries └── synonyms.txt
- Copy the ZIP file to a webserver that is reachable from any allocator in your environment.
-
In the advanced configuration editor, update your Elasticsearch cluster configuration with the bundle you prepared in the previous step. Modify the
user_bundles
JSON attribute of each Elasticsearch instance type as shown in the following example.{ ... "resources": { "elasticsearch": [ ... "plan": { ... "elasticsearch": { ... "user_bundles": [ { "name": "custom-synonyms", "url": "http://www.MYURL.com/synonyms.zip", "elasticsearch_version": "*" } ] }
On this page