* Make API reference top level Signed-off-by: Naarcha-AWS <[email protected]> * Fix typo on Drag and Drop page (#1633) * Fix typo on Drag and Drop page * Update _dashboards/drag-drop-wizard.md Co-authored-by: Nate Bower <[email protected]> * Update drag-drop-wizard.md Co-authored-by: Nate Bower <[email protected]> * Putting all the Docker install material on a single page (#1452) * Putting all the Docker install material on a single page Signed-off-by: JeffH-AWS <[email protected]> * Making room for revamp Signed-off-by: JeffH-AWS <[email protected]> * Intro added Signed-off-by: JeffH-AWS <[email protected]> * Continuing to flesh out the intro section and overview Signed-off-by: JeffH-AWS <[email protected]> * Overview finalized Signed-off-by: JeffH-AWS <[email protected]> * Introducing docker compose Signed-off-by: JeffH-AWS <[email protected]> * Added link to compose Signed-off-by: JeffH-AWS <[email protected]> * Continuing docker image commentary Signed-off-by: JeffH-AWS <[email protected]> * Sometimes I wonder if anyone reads these Signed-off-by: JeffH-AWS <[email protected]> * Adding notes on installing compose with pip Signed-off-by: JeffH-AWS <[email protected]> * Adding prereqs Signed-off-by: JeffH-AWS <[email protected]> * Magnets - how do they work? Signed-off-by: JeffH-AWS <[email protected]> * Almonds and peaches are part of the same plant subgenus, Amygdalus Signed-off-by: JeffH-AWS <[email protected]> * There are 293 ways to make change for a dollar Signed-off-by: JeffH-AWS <[email protected]> * A shark is the only known fish that can blink with both eyes Signed-off-by: JeffH-AWS <[email protected]> * A crocodile cannot stick its tongue out Signed-off-by: JeffH-AWS <[email protected]> * wording Signed-off-by: JeffH-AWS <[email protected]> * Reorganizing a couple paragraphs to make it flow better Signed-off-by: JeffH-AWS <[email protected]> * Forgot a word Signed-off-by: JeffH-AWS <[email protected]> * Add tip about pruning stopped containers Signed-off-by: JeffH-AWS <[email protected]> * Cleaning up Signed-off-by: JeffH-AWS <[email protected]> * Add blurb about container ls Signed-off-by: JeffH-AWS <[email protected]> * Adding the Docker Compose stuff Signed-off-by: JeffH-AWS <[email protected]> * Working on compose Signed-off-by: JeffH-AWS <[email protected]> * Continuing work on the compose section - it's a lot of info Signed-off-by: JeffH-AWS <[email protected]> * Added important settings Signed-off-by: JeffH-AWS <[email protected]> * Updates to settings that need configured Signed-off-by: JeffH-AWS <[email protected]> * Still working through compose things Signed-off-by: JeffH-AWS <[email protected]> * Fixed wording Signed-off-by: JeffH-AWS <[email protected]> * Working through compose commands and guidance Signed-off-by: JeffH-AWS <[email protected]> * Reordering/rewording Signed-off-by: JeffH-AWS <[email protected]> * More phrasing Signed-off-by: JeffH-AWS <[email protected]> * More wording in steps Signed-off-by: JeffH-AWS <[email protected]> * More wording in steps Signed-off-by: JeffH-AWS <[email protected]> * Organizing Signed-off-by: JeffH-AWS <[email protected]> * Adding stuff and things Signed-off-by: JeffH-AWS <[email protected]> * Continuing to work through the configuration steps Signed-off-by: JeffH-AWS <[email protected]> * Fixes Signed-off-by: JeffH-AWS <[email protected]> * Fixes Signed-off-by: JeffH-AWS <[email protected]> * Still working on the configuration steps Signed-off-by: JeffH-AWS <[email protected]> * Changes Signed-off-by: JeffH-AWS <[email protected]> * More work Signed-off-by: JeffH-AWS <[email protected]> * Removed perf analyzer - refer to GH issue 1555 Signed-off-by: JeffH-AWS <[email protected]> * Fixing things Signed-off-by: JeffH-AWS <[email protected]> * Adding guidance on passing settings in compose Signed-off-by: JeffH-AWS <[email protected]> * Working through dockerfile materials now Signed-off-by: JeffH-AWS <[email protected]> * wording Signed-off-by: JeffH-AWS <[email protected]> * Finalized the sample dev compose file Signed-off-by: JeffH-AWS <[email protected]> * Continuing work with configuration Signed-off-by: JeffH-AWS <[email protected]> * Finished - ready for reviews Signed-off-by: JeffH-AWS <[email protected]> * Fixed a link I forgot to change before Signed-off-by: JeffH-AWS <[email protected]> * Changes from first proofread Signed-off-by: JeffH-AWS <[email protected]> * Changed heading Signed-off-by: JeffH-AWS <[email protected]> * Addressed reviewer comments and made some changes Signed-off-by: JeffH-AWS <[email protected]> * Forgot to incorporate one change. Fixed. Signed-off-by: JeffH-AWS <[email protected]> * Final editorial changes Signed-off-by: JeffH-AWS <[email protected]> Signed-off-by: JeffH-AWS <[email protected]> * fix#1584-custom_attr_allowlist (#1636) Signed-off-by: cwillum <[email protected]> Signed-off-by: cwillum <[email protected]> * Update TERMS.md with definition for Setting (#1632) * fix#1631-Terms-setting Signed-off-by: cwillum <[email protected]> * fix#1631-Terms-setting Signed-off-by: cwillum <[email protected]> Signed-off-by: cwillum <[email protected]> * Add disclaimer about remote fs usage and an example of setting env var (#1644) * Add disclaimer about remote fs usage and an example of setting env var Signed-off-by: JeffH-AWS <[email protected]> * Enhanced wording a little bit Signed-off-by: JeffH-AWS <[email protected]> Signed-off-by: JeffH-AWS <[email protected]> * [DOC] New documentation: Self-host maps server (#1625) * Add new page self-host maps server Signed-off-by: vagimeli <[email protected]> * Added new content Signed-off-by: vagimeli <[email protected]> * Copy edit Signed-off-by: vagimeli <[email protected]> * Tech review edits Signed-off-by: vagimeli <[email protected]> * Doc review edits Signed-off-by: vagimeli <[email protected]> * Editorial review changes Signed-off-by: vagimeli <[email protected]> * Final edits Signed-off-by: vagimeli <[email protected]> Signed-off-by: vagimeli <[email protected]> * Add feedback. Signed-off-by: Naarcha-AWS <[email protected]> * Fix links Signed-off-by: Naarcha-AWS <[email protected]> Signed-off-by: Naarcha-AWS <[email protected]> Signed-off-by: JeffH-AWS <[email protected]> Signed-off-by: cwillum <[email protected]> Signed-off-by: vagimeli <[email protected]> Co-authored-by: Nate Bower <[email protected]> Co-authored-by: Jeff Huss <[email protected]> Co-authored-by: Chris Moore <[email protected]> Co-authored-by: Melissa Vagi <[email protected]>
4.8 KiB
layout, title, parent, nav_order
| layout | title | parent | nav_order |
|---|---|---|---|
| default | Client certificate authentication | Configuration | 50 |
Client certificate authentication
After obtaining your own certificates either from a certificate authority (CA) or by generating your own certificates using OpenSSL, you can start configuring OpenSearch to authenticate a user using a client certificate.
Client certificate authentication offers more security advantages than just using basic authentication (username and password). Because client certificate authentication requires both a client certificate and its private key, which are often in the user's possession, it is less vulnerable to brute force attacks in which malicious individuals try to guess a user's password.
Another benefit of client certificate authentication is you can use it along with basic authentication, providing two layers of security.
Enabling client certificate authentication
To enable client certificate authentication, you must first set clientauth_mode in opensearch.yml to either OPTIONAL or REQUIRE:
plugins.security.ssl.http.clientauth_mode: OPTIONAL
Next, enable client certificate authentication in the client_auth_domain section of config.yml.
clientcert_auth_domain:
description: "Authenticate via SSL client certificates"
http_enabled: true
transport_enabled: true
order: 1
http_authenticator:
type: clientcert
config:
username_attribute: cn #optional, if omitted DN becomes username
challenge: false
authentication_backend:
type: noop
Assigning roles to your common name
You can now assign your certificate's common name (CN) to a role. For this step, you must know your certificate's CN and the role you want to assign to. To get a list of all predefined roles in OpenSearch, refer to our list of predefined roles. If you want to first create a role, refer to how to create a role, and then map your certificate's CN to that role.
After deciding which role you want to map your certificate's CN to, you can use OpenSearch Dashboards, roles_mapping.yml, or the REST API to map your certificate's CN to the role. The following example uses the REST API to map the common name CLIENT1 to the role readall.
Sample request
PUT _plugins/_security/api/rolesmapping/readall
{
"backend_roles" : ["sample_role" ],
"hosts" : [ "example.host.com" ],
"users" : [ "CLIENT1" ]
}
Sample response
{
"status": "OK",
"message": "'readall' updated."
}
After mapping a role to your client certificate's CN, you're ready to connect to your cluster using those credentials.
The code example below uses the Python requests library to connect to a local OpenSearch cluster and sends a GET request to the movies index.
import requests
import json
base_url = 'https://localhost:9200/'
headers = {
'Content-Type': 'application/json'
}
cert_file_path = "/full/path/to/client-cert.pem"
key_file_path = "/full/path/to/client-cert-key.pem"
root_ca_path = "/full/path/to/root-ca.pem"
# Send the request.
path = 'movies/_doc/3'
url = base_url + path
response = requests.get(url, cert = (cert_file_path, key_file_path), verify=root_ca_path)
print(response.text)
{% comment %}
Configuring Beats
You can also configure your Beats so that it uses a client certificate for authentication with OpenSearch. Afterwards, it can start sending output to OpenSearch.
This output configuration specifies which settings you need for client certificate authentication:
output.opensearch:
enabled: true
# Array of hosts to connect to.
hosts: ["localhost:9200"]
# Protocol - either `http` (default) or `https`.
protocol: "https"
ssl.certificate_authorities: ["/full/path/to/CA.pem"]
ssl.verification_mode: certificate
ssl.certificate: "/full/path/to/client-cert.pem"
ssl.key: "/full/path/to/to/client-cert-key.pem"
{% endcomment %}
Using certificates with Docker
While we recommend using the tarball installation of ODFE to test client certificate authentication configurations, you can also use any of the other install types. For instructions on using Docker security, see Configuring basic security settings.