Elastic Locked Up: Активиране на опциите за сигурност на Elasticsearch Cluster за вътрешен и външен достъп

Elastic Locked Up: Активиране на опциите за сигурност на Elasticsearch Cluster за вътрешен и външен достъп

Elastic Stack е добре познат инструмент на пазара на SIEM системи (всъщност не само те). Той може да събира много различни по размер данни, както чувствителни, така и не много чувствителни. Не е напълно правилно, ако достъпът до самите елементи на Elastic Stack не е защитен. По подразбиране всички елементи на Elastic в кутия (колектори Elasticsearch, Logstash, Kibana и Beats) работят с отворени протоколи. И в самата Kibana удостоверяването е деактивирано. Всички тези взаимодействия могат да бъдат защитени и в тази статия ще ви кажем как да го направите. За удобство историята беше разделена на 3 семантични блока:

  • Ролеви модел за достъп до данни
  • Сигурност на данните в клъстер Elasticsearch
  • Сигурност на данните извън клъстер Elasticsearch

Детайли под кройката.

Ролеви модел за достъп до данни

Ако инсталирате Elasticsearch и не го настройвате по никакъв начин, достъпът до всички индекси ще бъде отворен за всички. Е, или тези, които могат да използват curl. За да избегне това, Elasticsearch има модел за подражание, който е достъпен, като се започне с абонамент за основно ниво (който е безплатен). Схематично това изглежда така:

Elastic Locked Up: Активиране на опциите за сигурност на Elasticsearch Cluster за вътрешен и външен достъп

Какво е на снимката

  • Потребители са всички, които могат да влизат с идентификационни данни.
  • Ролята е набор от права.
  • Правата са набор от привилегии.
  • Привилегиите са разрешения за писане, четене, изтриване и т.н. (Пълен списък с привилегии)
  • Ресурсите са индекси, документи, полета, потребители и други обекти за съхранение (моделът за подражание за някои ресурси е достъпен само при платени абонаменти).

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):

[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.password

Ако всичко е правилно, Kibana ще започне да иска потребителско име и парола. В основен абонамент е наличен модел за подражание, базиран на вътрешни потребители. Започвайки със Gold, можете да свържете външни системи за удостоверяване - LDAP, PKI, Active Directory и системи за единично влизане.

Elastic Locked Up: Активиране на опциите за сигурност на Elasticsearch Cluster за вътрешен и външен достъп

Правата за достъп до обекти в Elasticsearch също могат да бъдат ограничени. Вярно е, че за да направите същото за документи или полета, ще ви трябва платен абонамент (този лукс започва с ниво Platinum). Тези настройки са достъпни в интерфейса на Kibana или чрез API за сигурност. Можете да проверите чрез вече познатото меню 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" : "Alexander Pushkin",
  "email" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Сигурност на данните в клъстер Elasticsearch

Когато Elasticsearch работи в клъстер (което е обичайно), настройките за сигурност в клъстера стават важни. За сигурна комуникация между възлите Elasticsearch използва протокола TLS. За да настроите сигурна комуникация между тях, ви е необходим сертификат. Ние генерираме сертификат и частен ключ в PEM формат:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem

След като изпълните командата по-горе, в директорията /../elasticsearch ще се появи архивът elastic-stack-ca.zip. В него ще намерите сертификат и частен ключ с разширения crt и ключ съответно. Желателно е да ги поставите на споделен ресурс, до който трябва да има достъп от всички възли на клъстера.

Всеки възел вече се нуждае от собствени сертификати и лични ключове, базирани на тези в споделената директория. Когато командата бъде изпълнена, ще бъдете помолени да зададете парола. Могат да се добавят допълнителни опции -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 или други външни клиенти.

Elastic Locked Up: Активиране на опциите за сигурност на Elasticsearch Cluster за вътрешен и външен достъп

За да конфигурирате поддръжка за 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

защото сертификатът е защитен с парола, нека го добавим към хранилището за ключове и доверителното хранилище на всеки възел:

[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é:

Разбиране на машинното обучение в еластичния стек (известен още като Elasticsearch, известен още като ELK)

Оразмеряване на Elasticsearch

Източник: www.habr.com

Добавяне на нов коментар