Naarcha-AWS 7bb41fe4ce
Make API reference top level (#1637)
* Make API reference top level

Signed-off-by: Naarcha-AWS <naarcha@amazon.com>

* 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 <nbower@amazon.com>

* Update drag-drop-wizard.md

Co-authored-by: Nate Bower <nbower@amazon.com>

* 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 <jeffhuss@amazon.com>

* Making room for revamp

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Intro added

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Continuing to flesh out the intro section and overview

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Overview finalized

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Introducing docker compose

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Added link to compose

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Continuing docker image commentary

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Sometimes I wonder if anyone reads these

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Adding notes on installing compose with pip

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Adding prereqs

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Magnets - how do they work?

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Almonds and peaches are part of the same plant subgenus, Amygdalus

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* There are 293 ways to make change for a dollar

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* A shark is the only known fish that can blink with both eyes

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* A crocodile cannot stick its tongue out

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* wording

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Reorganizing a couple paragraphs to make it flow better

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Forgot a word

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Add tip about pruning stopped containers

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Cleaning up

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Add blurb about container ls

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Adding the Docker Compose stuff

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Working on compose

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Continuing work on the compose section - it's a lot of info

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Added important settings

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Updates to settings that need configured

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Still working through compose things

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Fixed wording

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Working through compose commands and guidance

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Reordering/rewording

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* More phrasing

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* More wording in steps

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* More wording in steps

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Organizing

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Adding stuff and things

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Continuing to work through the configuration steps

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Fixes

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Fixes

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Still working on the configuration steps

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Changes

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* More work

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Removed perf analyzer - refer to GH issue 1555

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Fixing things

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Adding guidance on passing settings in compose

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Working through dockerfile materials now

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* wording

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Finalized the sample dev compose file

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Continuing work with configuration

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Finished - ready for reviews

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Fixed a link I forgot to change before

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Changes from first proofread

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Changed heading

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Addressed reviewer comments and made some changes

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Forgot to incorporate one change. Fixed.

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* Final editorial changes

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* fix#1584-custom_attr_allowlist (#1636)

Signed-off-by: cwillum <cwmmoore@amazon.com>

Signed-off-by: cwillum <cwmmoore@amazon.com>

* Update TERMS.md with definition for Setting (#1632)

* fix#1631-Terms-setting

Signed-off-by: cwillum <cwmmoore@amazon.com>

* fix#1631-Terms-setting

Signed-off-by: cwillum <cwmmoore@amazon.com>

Signed-off-by: cwillum <cwmmoore@amazon.com>

* 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 <jeffhuss@amazon.com>

* Enhanced wording a little bit

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>

* [DOC] New documentation: Self-host maps server (#1625)

* Add new page self-host maps server

Signed-off-by: vagimeli <vagimeli@amazon.com>

* Added new content

Signed-off-by: vagimeli <vagimeli@amazon.com>

* Copy edit

Signed-off-by: vagimeli <vagimeli@amazon.com>

* Tech review edits

Signed-off-by: vagimeli <vagimeli@amazon.com>

* Doc review edits

Signed-off-by: vagimeli <vagimeli@amazon.com>

* Editorial review changes

Signed-off-by: vagimeli <vagimeli@amazon.com>

* Final edits

Signed-off-by: vagimeli <vagimeli@amazon.com>

Signed-off-by: vagimeli <vagimeli@amazon.com>

* Add feedback.

Signed-off-by: Naarcha-AWS <naarcha@amazon.com>

* Fix links

Signed-off-by: Naarcha-AWS <naarcha@amazon.com>

Signed-off-by: Naarcha-AWS <naarcha@amazon.com>
Signed-off-by: JeffH-AWS <jeffhuss@amazon.com>
Signed-off-by: cwillum <cwmmoore@amazon.com>
Signed-off-by: vagimeli <vagimeli@amazon.com>
Co-authored-by: Nate Bower <nbower@amazon.com>
Co-authored-by: Jeff Huss <jeffhuss@amazon.com>
Co-authored-by: Chris Moore <107723039+cwillum@users.noreply.github.com>
Co-authored-by: Melissa Vagi <105296784+vagimeli@users.noreply.github.com>
2022-10-27 11:50:39 -05:00

113 lines
4.8 KiB
Markdown

---
layout: default
title: Client certificate authentication
parent: Configuration
nav_order: 50
---
# Client certificate authentication
After obtaining your own certificates either from a certificate authority (CA) or by [generating your own certificates using OpenSSL]({{site.url}}{{site.baseurl}}/security-plugin/configuration/generate-certificates), 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`:
```yml
plugins.security.ssl.http.clientauth_mode: OPTIONAL
```
Next, enable client certificate authentication in the `client_auth_domain` section of `config.yml`.
```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]({{site.url}}{{site.baseurl}}/security-plugin/access-control/users-roles#predefined-roles). If you want to first create a role, refer to [how to create a role]({{site.url}}{{site.baseurl}}/security-plugin/access-control/users-roles#create-users), 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]({{site.url}}{{site.baseurl}}/security-plugin/access-control/users-roles#map-users-to-roles), [`roles_mapping.yml`]({{site.url}}{{site.baseurl}}/security-plugin/configuration/yaml#roles_mappingyml), or the [REST API]({{site.url}}{{site.baseurl}}/security-plugin/access-control/api#create-role-mapping) 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**
```json
PUT _plugins/_security/api/rolesmapping/readall
{
"backend_roles" : ["sample_role" ],
"hosts" : [ "example.host.com" ],
"users" : [ "CLIENT1" ]
}
```
**Sample response**
```json
{
"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.
```python
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:
```yml
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]({{site.url}}{{site.baseurl}}/opensearch/install/tar) 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]({{site.url}}{{site.baseurl}}/opensearch/install/docker#configuring-basic-security-settings).