Архив метки: security

Elasticsearch. Настройка авторизации с помощью XPack

Начиная с версии 6.8.0 и 7.1.0 в Elasticsearch функция авторизации стала доступна для Basic версии.
Рассмотрим простую конфигурацию без сертификатов для кластера из одной ноды с авторизацией.

Шаг 1. Установка Elasticsearch.
https://www.elastic.co/downloads/past-releases

Скачать версию 6.8.2
Скачать версию 7.3.1

Шаг 2. Настройка XPack

В конфиге elasticsearch.yml указываем использование настроек безопасности XPack:

xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/config/cert/elastic-ca.p12
#xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/config/cert/elastic-cert.p12

Параметры xpack.security.transport.ssl.*: true необходимо указать для кластерной архитектуры Elasticsearch.
Подробнее о выпуске сертификатов в статье: Elasticsearch. Выпуск сертификата в формате PKCS#12.

Шаг 3. Создание сервисных учетных записей в Elasticsearch

Переходим в директорию /usr/share/elasticsearch и запускаем утилиту elasticsearch-setup-passwords в режиме interactive:

# cd /usr/share/elasticsearch
# bin/elasticsearch-setup-passwords interactive

Интерактивный диалог предложен задать пароль для основных сервисных пользователей Elastic-стека:
— elasic
— kibana
— APM
— beats
— logstash
— remote_monitoring
Подробнее про утилиту elasticsearch-setup-passwords.

После этого этапа Elasticsearch будет доступен только для авторизированных запросов, иначе мы получим 401 ошибку:

{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

Шаг 4. Настройка Kibana и Filebeat для общения.

Как видно из Шага 3, что теперь неавторизованные запросы к Elasticsearch отбиваются с ошибкой. Для этого необходимо прописать в конфиг сервисов авторизационные данные (логин\пароль) которые мы указали в Шаге 3 на этапе работы с bin/elasticsearch-setup-passwords interactive.

Для Kibana необходимо в конфиге kibana.yml указать два параметра elasticsearch.username и elasticsearch.password:

elasticsearch.username: "kibana"
elasticsearch.password: "qazqaz1"   

В случае с Filebeat мы должны отредактировать конфиг filebeat.yml добавив в графу output.elasticsearch параметры авторизации username и password:

  username: "elastic"
  password: "qazqaz1"

Подробнее про настройку Filebeat.

После изменения конфига необходимо перезагрузить сервис.

Теперь при попытки зайти в Kibana, она спрашивает логин\пароль для входа. Первый вход совершаем от учетки elasic (пароль мы задавали в Шаге 3) и создаем себе персональную учетную запись.

Шаг 4.1. Скрываем пароль в конфиге Filebeat.

Если Kibana обычно находиться рядом с Elasticsearch, то Filebeat как агент зачастую находиться на удаленном сервере, и лежащий в открытом виде пароль не очень хорошая затея.
Но пароль можно скрыть с помощью секрета в хранилище ключей и указать в конфиге в качестве переменной.

Первым делом необходимо создать хранилище и добавить туда запись:

# filebeat keystore create
# filebeat keystore add ES_PWD

После, редактируем конфиг filebeat.yml изменим значение параметра password и перезапустим сервис:

username: "elastic"
password: "${ES_PWD}"

Теперь пароль от пользователя elastic скрыт от лишних глаз.
Подробнее о хранилище ключей.

Полезная информация и первоисточник:
https://www.elastic.co/blog/getting-started-with-elasticsearch-security
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-passwords.html
https://www.elastic.co/guide/en/beats/filebeat/6.8/filebeat-configuration.html
https://www.elastic.co/guide/en/beats/filebeat/current/keystore.html

0