Естественно если вы прокидываете ваш кластер Elasticsearch во вне, то нужно очень сильно подумать о том, как его обезопасить от взлома.

Кластер без лицензии

Рассмотрим базовые методы защиты кластера без лицензии Elasticsearch.

Первым в голову приходит настроить на firewall доступ только с доверенных адресов. Также сам Elasticsearch рекомендует не прокидывать во не порт 9200.

Вторым методом конечно является прокидывание во вне не самого кластера Elasticsearch, а прокси сервера перед ним (nginx) и реализация аутентификации на этом прокси сервере.

Кластер с лицензией

Если вы обладаете золотой и платиновой лицензией вам доступны некоторые коммерческие функции безопасности. Включая ведение журнала аудита, фильтрацию IP, интеграцию с LDAP и Active Directory и другие механизмы аутентификации. Лицензии Platinum включают функции безопасности, такие как безопасность на уровне полей и документов, управление доступом на основе атрибутов, поддержка шифрования в состоянии покоя и режим соответствия Федеральному стандарту обработки информации (FIPS) 140-2.

Включаем функцию безопасности

Хотя безопасность Elasticsearch доступна, она не включена по умолчанию. Вам необходимо включить функцию безопасности на каждом узле в кластере с помощью файла elasticsearch.yml.

С версии 7 вам нужно будет настроить безопасность транспортного уровня (TLS / SSL) для обмена данными между узлами (в бесплатной версии тоже). В частности, это защищает информацию об имени пользователя и пароле от перехвата, что может привести к взлому кластера.

Если вы планируете запускать Elasticsearch в среде Федерального стандарта обработки информации (FIPS) 140-2, вам необходимо установить для xpack.security.fips_mode значение true в файле elasticsearch.yml.

После включения функции безопасности вам нужно будет перезапустить все узлы кластера и после этого выполнять команду, которая задаст пароли для всех встроенных пользователей Elasticsearch.

bin/elasticsearch-setup-password interactive

Настраиваем TLS

  1. Для начала нужно сгенерировать сертификаты
    bin/elasticsearch-certutil cert -out config/certificate.p12
    
  2. Копируем этот сертификат на все узлы кластера
  3. Включаем TLS взаимодействие на всех узлах кластера
    sudo vim elasticsearch.yml
    
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: certificate.p12
    xpack.security.transport.ssl.truststorepath: certificate.p12
    
  4. Перезапускаем все узлы кластера

Kibana

После включения xpack анонимный доступ к кластеру Elasticsearch заканчивается и соответственно если используется Kibana, то нужно указать пользователя для авторизации.

Вариант 1 Прописывается пароль и логин в файле kibana.yml. Из-за этого является не самым безопасным вариантом.

sudo vim kibana.yml
elasticsearch.username: kibana
elasticsearch.password: adsadsadsad

Вариант 2 Используем Kibana keystore.

bin/kibana-keystore create
bin/kibana-keystore add elasticsearch.username= kibana
bin/kibana-keystore add elasticsearch.password= adsadsadsad

После этого перезапускаем Kibana и можем авторизоваться под пользователем elastic пароль которому задавался при выполнении команды bin/elasticsearch-setup-password interactive