Еластично под заклучување и клуч: овозможување безбедносни опции за кластерот на Elasticsearch за пристап од внатре и надвор

Еластично под заклучување и клуч: овозможување безбедносни опции за кластерот на Elasticsearch за пристап од внатре и надвор

Elastic Stack е добро позната алатка на пазарот на SIEM системи (всушност, не само тие). Може да собере многу податоци со различна големина, и чувствителни и не многу чувствителни. Не е сосема точно ако пристапот до самите елементи на Elastic Stack не е заштитен. Стандардно, сите Elastic елементи надвор од кутијата (Elasticsearch, Logstash, Kibana и Beats колекционери) работат на отворени протоколи. И во самата Кибана, автентикацијата е оневозможена. Сите овие интеракции може да се обезбедат и во оваа статија ќе ви кажеме како да го направите тоа. За погодност, го поделивме наративот на 3 семантички блока:

  • Модел за пристап до податоци заснован на улоги
  • Безбедност на податоците во кластерот Elasticsearch
  • Обезбедување податоци надвор од кластерот Elasticsearch

Детали под сечењето.

Модел за пристап до податоци заснован на улоги

Ако го инсталирате Elasticsearch и не го подесите на кој било начин, пристапот до сите индекси ќе биде отворен за секого. Па, или оние кои можат да користат навивам. За да се избегне ова, Elasticsearch има модел кој е достапен почнувајќи од основната претплата (која е бесплатна). Шематски изгледа вака:

Еластично под заклучување и клуч: овозможување безбедносни опции за кластерот на Elasticsearch за пристап од внатре и надвор

Што е на сликата

  • Корисници се сите кои можат да се логираат користејќи ги своите ингеренции.
  • Улогата е збир на права.
  • Правата се збир на привилегии.
  • Привилегиите се дозволи за пишување, читање, бришење итн. (Целосна листа на привилегии)
  • Ресурсите се индекси, документи, полиња, корисници и други ентитети за складирање (моделот за некои ресурси е достапен само со платени претплати).

Стандардно 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. Ако го извршите сега, ќе се појават грешки, па затоа е важно да креирате продавница за клучеви. Ова се прави во две команди (корисник кибана и лозинката внесена на чекорот за создавање лозинка во Elasticsearch):

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

Ако се е точно, Кибана ќе почне да бара најава и лозинка. Основната претплата вклучува модел за улоги заснован на внатрешни корисници. Почнувајќи со Gold, можете да поврзете надворешни системи за автентикација - LDAP, PKI, Active Directory и Single sign-on системи.

Еластично под заклучување и клуч: овозможување безбедносни опции за кластерот на Elasticsearch за пристап од внатре и надвор

Правата за пристап до објекти во Elasticsearch исто така може да бидат ограничени. Меѓутоа, за да го сторите истото за документи или полиња, ќе ви треба платена претплата (овој луксуз започнува со нивото на Платинум). Овие поставки се достапни во интерфејсот 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. Внатре во него ќе најдете сертификат и приватен клуч со екстензии крт и клучните соодветно. Препорачливо е да ги ставите на заеднички ресурс, кој треба да биде достапен од сите јазли во кластерот.

Секој јазол сега има потреба од свои сертификати и приватни клучеви врз основа на оние во споделениот директориум. Кога ја извршувате командата, ќе биде побарано да поставите лозинка. Можете да додадете дополнителни опции -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 и ги извршуваме навивам. Ако сè е направено правилно, ќе се врати одговор со неколку јазли:

[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 адреса (достапно во претплати од ниво на злато). Ви овозможува да креирате бели списоци на IP адреси од кои ви е дозволен пристап до јазли.

Обезбедување податоци надвор од кластерот Elasticsearch

Надвор од кластерот значи поврзување на надворешни алатки: Kibana, Logstash, Beats или други надворешни клиенти.

Еластично под заклучување и клуч: овозможување безбедносни опции за кластерот на Elasticsearch за пристап од внатре и надвор

За да ја конфигурирате поддршката за 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é:

Разбирање на машинското учење во Elastic Stack (познато како Elasticsearch, ака ELK)

Elasticsearch димензионирање

Извор: www.habr.com

Додадете коментар