Elastic under lock: omogočanje varnostnih možnosti gruče Elasticsearch za dostop od znotraj in zunaj

Elastic under lock: omogočanje varnostnih možnosti gruče Elasticsearch za dostop od znotraj in zunaj

Elastic Stack je dobro poznano orodje na trgu sistemov SIEM (pravzaprav ne samo njih). Zbere lahko veliko podatkov različnih velikosti, občutljivih in manj občutljivih. Ni povsem pravilno, če dostop do samih elementov Elastic Stack ni zaščiten. Privzeto se vsi že pripravljeni elementi Elastic (zbiralniki Elasticsearch, Logstash, Kibana in Beats) izvajajo na odprtih protokolih. In v sami Kibani je preverjanje pristnosti onemogočeno. Vse te interakcije je mogoče zavarovati in v tem članku vam bomo povedali, kako to storiti. Zaradi udobja smo pripoved razdelili na 3 pomenske bloke:

  • Model dostopa do podatkov na podlagi vlog
  • Varnost podatkov znotraj gruče Elasticsearch
  • Zaščita podatkov zunaj gruče Elasticsearch

Detajli pod krojem.

Model dostopa do podatkov na podlagi vlog

Če namestite Elasticsearch in ga ne nastavite na noben način, bo dostop do vseh indeksov odprt vsem. No, ali tisti, ki lahko uporabljajo curl. Da bi se temu izognili, ima Elasticsearch vzornik, ki je na voljo od osnovne naročnine (ki je brezplačna). Shematično je videti nekako takole:

Elastic under lock: omogočanje varnostnih možnosti gruče Elasticsearch za dostop od znotraj in zunaj

Kaj je na sliki

  • Uporabniki so vsi, ki se lahko prijavijo s svojimi poverilnicami.
  • Vloga je skupek pravic.
  • Pravice so skupek privilegijev.
  • Privilegiji so dovoljenja za pisanje, branje, brisanje itd. (Celoten seznam privilegijev)
  • Viri so indeksi, dokumenti, polja, uporabniki in druge entitete za shranjevanje (vzornik za nekatere vire je na voljo samo s plačanimi naročninami).

Elasticsearch ima privzeto uporabniki škatle, na katerega so pritrjeni box vloge. Ko omogočite varnostne nastavitve, jih lahko takoj začnete uporabljati.

Če želite omogočiti varnost v nastavitvah Elasticsearch, jo morate dodati v konfiguracijsko datoteko (privzeto je to elasticsearch/config/elasticsearch.yml) nova vrstica:

xpack.security.enabled: true

Ko spremenite konfiguracijsko datoteko, zaženite ali znova zaženite Elasticsearch, da bodo spremembe začele veljati. Naslednji korak je dodeljevanje gesel uporabnikom predala. Naredimo to interaktivno s spodnjim ukazom:

[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]

Preverjamo:

[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

Lahko se potrepljate po rami – nastavitve na strani Elasticsearch so končane. Zdaj je čas, da konfigurirate Kibano. Če ga zaženete zdaj, se bodo pojavile napake, zato je pomembno, da ustvarite shrambo ključev. To se naredi z dvema ukazoma (uporabnik kibana in geslo, vneseno v koraku ustvarjanja gesla v Elasticsearch):

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

Če je vse pravilno, bo Kibana začela zahtevati prijavo in geslo. Osnovna naročnina vključuje vzor, ​​ki temelji na notranjih uporabnikih. Začenši z Goldom, lahko povežete zunanje sisteme za preverjanje pristnosti - LDAP, PKI, Active Directory in sisteme enotne prijave.

Elastic under lock: omogočanje varnostnih možnosti gruče Elasticsearch za dostop od znotraj in zunaj

Prav tako je mogoče omejiti pravice dostopa do objektov znotraj Elasticsearch. Če želite storiti enako za dokumente ali polja, boste potrebovali plačano naročnino (to razkošje se začne s platinasto stopnjo). Te nastavitve so na voljo v vmesniku Kibana ali prek Varnostni API. Preverite lahko prek že poznanega menija Dev Tools:

Ustvarjanje vloge

PUT /_security/role/ruslan_i_ludmila_role
{
  "cluster": [],
  "indices": [
    {
      "names": [ "ruslan_i_ludmila" ],
      "privileges": ["read", "view_index_metadata"]
    }
  ]
}

Ustvarjanje uporabnika

POST /_security/user/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Varnost podatkov znotraj gruče Elasticsearch

Ko se Elasticsearch izvaja v gruči (kar je običajno), postanejo varnostne nastavitve znotraj gruče pomembne. Za varno komunikacijo med vozlišči Elasticsearch uporablja protokol TLS. Za vzpostavitev varne interakcije med njimi potrebujete certifikat. Generiramo potrdilo in zasebni ključ v formatu PEM:

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

Po izvedbi zgornjega ukaza v imeniku /../elasticsearch pojavil se bo arhiv elastic-stack-ca.zip. V njem boste našli potrdilo in zasebni ključ s končnicami crt и ključ oz. Priporočljivo je, da jih postavite na skupni vir, ki mora biti dostopen iz vseh vozlišč v gruči.

Vsako vozlišče zdaj potrebuje lastna potrdila in zasebne ključe, ki temeljijo na tistih v skupnem imeniku. Pri izvajanju ukaza boste pozvani, da nastavite geslo. Dodate lahko dodatni možnosti -ip in -dns za popolno preverjanje medsebojno delujočih vozlišč.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key

Kot rezultat izvedbe ukaza prejmemo potrdilo in zasebni ključ v formatu PKCS#12, zaščiten z geslom. Vse kar ostane je, da premaknete ustvarjeno datoteko p12 v konfiguracijski imenik:

[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config

Dodajte geslo certifikatu v formatu p12 v shrambi ključev in shrambi zaupanja na vsakem vozlišču:

[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

Že znano elasticsearch.yml Vse, kar ostane, je dodati vrstice s podatki potrdila:

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

Zaženemo vsa vozlišča Elasticsearch in jih izvedemo curl. Če je bilo vse narejeno pravilno, bo vrnjen odgovor z več vozlišči:

[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

Obstaja še ena varnostna možnost - filtriranje naslovov IP (na voljo v naročninah od nivoja Gold). Omogoča ustvarjanje belih seznamov naslovov IP, s katerih lahko dostopate do vozlišč.

Zaščita podatkov zunaj gruče Elasticsearch

Zunaj grozda pomeni povezovanje zunanjih orodij: Kibana, Logstash, Beats ali drugih zunanjih odjemalcev.

Elastic under lock: omogočanje varnostnih možnosti gruče Elasticsearch za dostop od znotraj in zunaj

Če želite konfigurirati podporo za https (namesto za http), dodajte nove vrstice v 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

Ker Potrdilo je zaščiteno z geslom, dodajte ga v shrambo ključev in shrambo zaupanja na vsakem vozlišču:

[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

Po dodajanju ključev so vozlišča Elasticsearch pripravljena za povezavo prek https. Zdaj jih je mogoče zagnati.

Naslednji korak je ustvariti ključ za povezavo Kibane in ga dodati v konfiguracijo. Na podlagi potrdila, ki se že nahaja v skupnem imeniku, bomo generirali potrdilo v formatu PEM (PKCS#12 Kibana, Logstash in Beats še ne podpirajo):

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pem

Vse kar ostane je, da razpakirate ustvarjene ključe v mapo s konfiguracijo Kibana:

[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config

Ključi so tam, tako da ostane samo še spremeniti konfiguracijo Kibane, da jih začne uporabljati. V konfiguracijski datoteki kibana.yml spremenite http v https in dodajte vrstice z nastavitvami povezave SSL. Zadnje tri vrstice konfigurirajo varno komunikacijo med brskalnikom uporabnika in Kibano.

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

S tem so nastavitve zaključene in dostop do podatkov v gruči Elasticsearch šifriran.

Če imate vprašanja o zmožnostih Elastic Stack pri brezplačnih ali plačljivih naročninah, nadzornih nalogah ali ustvarjanju sistema SIEM, pustite zahtevo na obrazec za povratne informacije na naši spletni strani.

Več naših člankov o Elastic Stack na Habréju:

Razumevanje strojnega učenja v elastičnem skladu (alias Elasticsearch, alias ELK)

Dimenzioniranje Elasticsearch

Vir: www.habr.com

Dodaj komentar