
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 ще започне да поиска логин и парола. В абонамента на ниво Basic е налична ролевата модел на базата на вътрешни потребители. Започвайки от Gold, можете да свързвате външни системи за удостоверяване — LDAP, PKI, Active Directory и системи за единично влизане.

Достъпът до обектите в Elasticsearch също може да бъде ограничен. Вярно е, че за да направите същото за документи или полета, ще е необходим платен абонамент (това е разкош, който започва от ниво Platinum). Тези настройки са достъпни в интерфейса на 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
