ProHoster > Блог > Администрирование > Elastic под замком: включаем опции безопасности кластера Elasticsearch для доступа изнутри и снаружи
Elastic под замком: включаем опции безопасности кластера Elasticsearch для доступа изнутри и снаружи
Elastic Stack — известный инструмент на рынке SIEM-систем (вообще-то, не только их). Может собирать в себя много разнокалиберных данных, как чувствительных, так и не очень. Не совсем правильно, если доступ к самим элементам Elastic Stack не будет защищён. По умолчанию все коробочные элементы Elastic (Elasticsearch, Logstash, Kibana и коллекторы Beats) работают по открытым протоколам. А в самой Kibana отключена аутентификация. Все эти взаимодействия можно обезопасить и в этой статье мы расскажем как это сделать. Для удобства разделили повествование на 3 смысловых блока:
Ролевая модель доступа к данным
Безопасность данных внутри кластера Elasticsearch
Безопасность данных вне кластера Elasticsearch
Подробности под катом.
Ролевая модель доступа к данным
Если установить Elasticsearch и никак его тюнить — доступ ко всем индексам будет открыт для всех желающих. Ну, или тех, кто может пользоваться curl. Чтобы этого избежать, в Elasticsearch есть ролевая модель, которая доступна начиная с подписки уровня Basic (она бесплатна). Схематически выглядит примерно так:
Что на картинке
Пользователи — это все кто может авторизоваться с использованием учётных данных.
Ресурсы — это индексы, документы, поля, пользователи и другие субъекты хранилища (ролевая модель для некоторых ресурсы доступна только в платных подписках).
В Elasticsearch по умолчанию есть коробочные пользователи, к которым привязаны коробочные роли. После включения настроек безопасности их можно сразу же начинать использовать.
Чтобы активировать безопасность в настройках Elasticsearch, нужно добавить в конфигурационный файл (по умолчанию это elasticsearch/config/elasticsearch.yml) новую строку:
xpack.security.enabled: true
После изменения файла конфигурации запускаем или перезапускаем Elasticsearch, чтобы изменения вступили в силу. Следующий шаг — присвоение паролей коробочным пользователям. Сделаем это интерактивно при помощи команды ниже:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
Проверяем:
[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Можно хлопнуть себя по плечу — настройки на стороне Elasticsearch выполнены. Теперь пришла очередь настроить Kibana. Если запустить её сейчас, посыплются ошибки, поэтому важно создать хранилище ключей. Делается, это в две команды (пользователь kibana и пароль, введённый на шаге создания паролей в Elasticsearch):
Если всё правильно — Kibana начнёт просить логин и пароль. В подписке уровня Basic доступна ролевая модель на основе внутренних пользователей. Начиная с Gold можно подключать внешние системы аутентификации — LDAP, PKI, Active Directory и системы Single sign-on.
Права доступа к объектам внутри Elasticsearch тоже можно ограничить. Правда, чтобы то же самое сделать для документов или полей, потребуется платная подписка (эта роскошь начинается с уровня Platinum). Эти настройки доступны в интерфейсе Kibana или через Security API. Можно проверить через уже знакомое меню Dev Tools:
Когда Elasticsearch работает в кластере (а это обычное дело), важными становятся настройки безопасности внутри кластера. Для безопасного взаимодействия между нодами, Elasticsearch использует протокол TLS. Чтобы настроить безопасное взаимодействие между ними, нужен сертификат. Генерируем сертификат и приватный ключ в PEM-формате:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem
После выполнения команды выше, в директории /../elasticsearch появится архив elastic-stack-ca.zip. Внутри него обнаружатся сертификат и приватный ключ с раширениями crt и key соответственно. Их желательно выложить на shared ресурс, к которому должен быть доступ со всех нод кластера.
Для каждой ноды теперь нужны свои сертификаты и приватные ключи на основе тех, что лежат в shared директории. При выполнении команды попросят задать пароль. Можно добавить дополнительные опции —ip и —dns для полной верификации взаимодействующих нод.
По итогам выполнения команды получим сертификат и приватный ключ в формате PKCS#12, защищённый паролем. Осталось переместить сгенерированный файл p12 в директорию с конфигурацией:
Есть ещё одна опция по безопасности — фильтрация IP-адресов (доступна в подписках от уровня Gold). Позволяет создавать белые списки IP-адресов, с которых разрешено обращаться к нодам.
Безопасность данных вне кластера Elasticsearch
Вне кластера означает подключение внешних инструментов: Kibana, Logstash, Beats или другие внешние клиенты.
Чтобы настроить поддержку https (вместо http), добавим в elasticsearch.yml новые строки:
После добавления ключей, ноды Elasticsearch готовы к подключению по https. Теперь их можно запустить.
Следующий шаг — создание ключа для подключение Kibana и его добавление в конфигурацию. На основе сертификата, который уже размещён в shared директории, сгенерируем сертификат в PEM-формате (PKCS#12 Kibana, Logstash и Beats пока не поддерживают):
Ключи есть, значит осталось изменить конфигурацию Kibana, чтобы она начала их использовать. В конфигурационном файле kibana.yml меняем http на https и добавляем строки с настройками SSL-подключения. Последние три строки настраивают безопасное взаимодействие между браузером пользователя и Kibana.
Таким образом, настройки выполнены и доступ к данным в кластере Elasticsearch зашифрован.
Если у вас есть вопросы по возможностям Elastic Stack на бесплатных или платных подписках, задачи по мониторингу или созданию SIEM-системы оставьте запрос в форме обратной связи на нашем сайте.