
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
Иницииране на настройките на паролите за резервираните потребители elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
Ще бъдете подканени да въведете пароли в хода на процеса.
Моля, потвърдете, че искате да продължите [y\/N]y
Въведете парола за [elastic]:
Повторете паролата за [elastic]:
Въведете парола за [apm_system]:
Повторете паролата за [apm_system]:
Въведете парола за [kibana]:
Повторете паролата за [kibana]:
Въведете парола за [logstash_system]:
Повторете паролата за [logstash_system]:
Въведете парола за [beats_system]:
Повторете паролата за [beats_system]:
Въведете парола за [remote_monitoring_user]:
Повторете паролата за [remote_monitoring_user]:
Променена парола за потребител [apm_system]
Променена парола за потребител [kibana]
Променена парола за потребител [logstash_system]
Променена парола за потребител [beats_system]
Променена парола за потребител [remote_monitoring_user]
Променена парола за потребител [elastic]
Проверяваме:
[elastic@node1 ~]$ curl -u elastic 'node1:9200\/_cat\_nodes?pretty'
Въведете паролата за хоста за потребител 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Можете да се потупате по рамото — настройките отстрани на Elasticsearch са завършени. Сега е времето да конфигурирате Kibana. Ако я стартирате сега, ще излязат грешки, така че е важно да създадете хранилище за ключове. Това се прави с две команди (потребител kibana и парола, въведени на стъпката за създаване на паролите в Elasticsearch):
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.passwordАко всичко е наред — Kibana ще започне да изисква логин и парола. В плановете на базисно ниво е налична ролевата модел, базиран на вътрешни потребители. Започвайки от златен план, можете да свързвате външни системи за удостоверяване — LDAP, PKI, Active Directory и системи за еднократно влизане.

Достъпът до обектите в Elasticsearch също може да бъде ограничен. Въпреки това, за да направите същото за документи или полета, ще е нужна платена абонаментна услуга (това удоволствие започва от платината). Тези настройки са налични в интерфейса на Kibana или чрез . Можете да проверите през вече познатото меню Dev Tools:
Създаване на роля
PUT \/_security\/_role\/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}Създаване на потребител
POST \/_security\/_user\/pushkin
{
"password" : "nataliaonelove",
"roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
"full_name" : "Александър Пушкин",
"email" : "pushkin@lyceum.edu",
"metadata" : {
"hometown" : "Санкт Петербург"
}
}Сигурност на данните вътре в кластера Elasticsearch
Когато Elasticsearch работи в клъстер (а това е обичайна практика), важни стават настройките за сигурност в клъстера. За безопасно взаимодействие между нодовете, Elasticsearch използва TLS протокол. За да конфигурирате безопасното взаимодействие между тях, е необходим сертификат. Генерираме сертификат и частен ключ в PEM формат:
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-certutil ca --pemСлед изпълнението на горната команда в директорията /../elasticsearch ще се появи архив elastic-stack-ca.zip. Вътре ще намерите сертификат и частен ключ с разширения crt и key съответно. Препоръчително е да ги поставите на споделян ресурс, до който да имат достъп всички възли в клъстера.
За всяка възел сега са необходими свои сертификати и частни ключове на база тези, които се намират в споделената директория. При изпълнение на командата ще поискат да зададете парола. Можете да добавите допълнителни опции —ip и —dns за пълна верификация на взаимодействието между възлите.
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.keyВ резултат на изпълнение на командата ще получите сертификат и частен ключ в формат PKCS#12, защитен с парола. Остава да преместите генерирания файл p12 в директорията с конфигурацията:
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/configДа добавим паролата към сертификата в формат p12 в keystore и truststore на всяка възел:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_passwordВ вече известния elasticsearch.yml остава да добавите редовете с информация за сертификата:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12Стартирайте всички възли на Elasticsearch и изпълнете curl. Ако всичко е изпълнено правилно, ще получите отговор с информация за няколко възли:
[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1Има още една опция за сигурността — филтрация на IP адреси (достъпна в абонаментите от ниво Gold). Позволява създаването на бели списъци с IP адреси, от които е разрешен достъп до възлите.
Сигурност на данните извън кластера Elasticsearch
Извън клъстера означава свързване на външни инструменти: Kibana, Logstash, Beats или други външни клиенти.

За да настроим поддръжка на https (вместо http), добавете нови редове в elasticsearch.yml:
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12Тъй като сертификатът е защитен с парола, добавете я в keystore и truststore на всяка възел:
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_passwordСлед добавянето на ключовете, нодовете на Elasticsearch са готови за свързване чрез https. Сега могат да бъдат стартирани.
Следващата стъпка е създаването на ключ за свързване с Kibana и добавянето му в конфигурацията. На базата на сертификата, който вече се намира в споделената директория, ще генерираме сертификат във формата PEM (PKCS#12, като Kibana, Logstash и Beats все още не го поддържат):
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-certutil cert --ca-cert \/shared_folder\/ca\/ca.crt --ca-key \/shared_folder\/ca\/ca.key --pemОстава само да разархивираме създадените ключове в папката с конфигурацията на Kibana:
[elastic@node1 ~]$ unzip elasticsearch\/certificate-bundle.zip -d kibana\/configКлючовете са налични, така че остава само да променим конфигурацията на Kibana, за да започне да ги използва. В конфигурационния файл kibana.yml променяме http на https и добавяме редове с настройки за SSL връзка. Последните три реда настройват сигурната комуникация между браузъра на потребителя и Kibana.
elasticsearch.hosts: ["https:\/${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: \/shared_folder\/ca\/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: \/..\/kibana\/config\/instance\/instance.key
server.ssl.certificate: \/..\/kibana\/config\/instance\/instance.crtТака настройките са извършени и достъпът до данните в кластера Elasticsearch е криптиран.
Ако имате въпроси относно възможностите на Elastic Stack на безплатни или платени абонаменти, задачи за мониторинг или изграждане на SIEM система, оставете запитване в на нашия сайт.
Още наши статии за Elastic Stack в Хабре:
Източник: habr.com
