Elastingas po užraktu ir raktu: įgalinamos Elasticsearch klasterio saugos parinktys, leidžiančios pasiekti prieigą iš vidaus ir išorės

Elastingas po užraktu ir raktu: įgalinamos Elasticsearch klasterio saugos parinktys, leidžiančios pasiekti prieigą iš vidaus ir išorės

Elastic Stack yra gerai žinomas įrankis SIEM sistemų rinkoje (tiesą sakant, ne tik jų). Jis gali rinkti daug įvairaus dydžio duomenų, tiek jautrių, tiek nelabai jautrių. Tai nėra visiškai teisinga, jei prieiga prie pačių Elastic Stack elementų nėra apsaugota. Pagal numatytuosius nustatymus visi „Elastic“ elementai („Elasticsearch“, „Logstash“, „Kibana“ ir „Beats“ kolekcionieriai) veikia atvirais protokolais. O pačioje Kibanoje autentifikavimas išjungtas. Visos šios sąveikos gali būti apsaugotos ir šiame straipsnyje mes jums pasakysime, kaip tai padaryti. Patogumui pasakojimą suskirstėme į 3 semantinius blokus:

  • Vaidmenimis pagrįstas duomenų prieigos modelis
  • Duomenų saugumas Elasticsearch klasteryje
  • Duomenų apsauga už Elasticsearch klasterio ribų

Detalės po pjūviu.

Vaidmenimis pagrįstas duomenų prieigos modelis

Jei įdiegsite „Elasticsearch“ ir jokiu būdu jo nederinsite, prieiga prie visų indeksų bus atvira visiems. Na, arba tie, kurie gali naudoti garbanas. Kad to išvengtų, Elasticsearch turi pavyzdį, kurį galima įsigyti pradedant nuo pagrindinės prenumeratos (kuri yra nemokama). Schematiškai tai atrodo maždaug taip:

Elastingas po užraktu ir raktu: įgalinamos Elasticsearch klasterio saugos parinktys, leidžiančios pasiekti prieigą iš vidaus ir išorės

Kas nuotraukoje

  • Vartotojai yra visi, kurie gali prisijungti naudodami savo kredencialus.
  • Vaidmuo yra teisių rinkinys.
  • Teisės yra privilegijų visuma.
  • Privilegijos yra leidimai rašyti, skaityti, ištrinti ir pan. (Visas privilegijų sąrašas)
  • Ištekliai yra indeksai, dokumentai, laukai, vartotojai ir kiti saugojimo objektai (kai kurių išteklių pavyzdys pasiekiamas tik su mokama prenumerata).

Pagal numatytuosius nustatymus Elasticsearch turi dėžutės naudotojai, prie kurių jie yra pritvirtinti dėžutės vaidmenys. Įjungę saugos nustatymus, galite nedelsdami pradėti juos naudoti.

Norėdami įjungti apsaugą Elasticsearch nustatymuose, turite įtraukti jį į konfigūracijos failą (pagal numatytuosius nustatymus tai yra elasticsearch/config/elasticsearch.yml) nauja linija:

xpack.security.enabled: true

Pakeitę konfigūracijos failą, paleiskite arba iš naujo paleiskite Elasticsearch, kad pakeitimai įsigaliotų. Kitas žingsnis yra slaptažodžių priskyrimas dėžutės vartotojams. Padarykime tai interaktyviai naudodami toliau pateiktą komandą:

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

Mes patikriname:

[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

Galite paglostyti sau nugarą – Elasticsearch pusės nustatymai baigti. Dabar atėjo laikas konfigūruoti „Kibana“. Jei paleisite dabar, atsiras klaidų, todėl svarbu sukurti raktų saugyklą. Tai atliekama dviem komandomis (user kibana ir slaptažodis, įvestas slaptažodžio kūrimo žingsnyje Elasticsearch):

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

Jei viskas teisinga, Kibana pradės prašyti prisijungimo vardo ir slaptažodžio. Į pagrindinę prenumeratą įtrauktas pavyzdys, pagrįstas vidiniais vartotojais. Pradedant nuo Gold, galite prijungti išorines autentifikavimo sistemas – LDAP, PKI, Active Directory ir Single sign-on sistemas.

Elastingas po užraktu ir raktu: įgalinamos Elasticsearch klasterio saugos parinktys, leidžiančios pasiekti prieigą iš vidaus ir išorės

Prieigos prie Elasticsearch objektų teisės taip pat gali būti ribojamos. Tačiau norint tą patį padaryti su dokumentais ar laukais, jums reikės mokamos prenumeratos (ši prabanga prasideda nuo platinos lygio). Šie nustatymai pasiekiami Kibana sąsajoje arba per Saugos API. Galite patikrinti per jau pažįstamą kūrėjo įrankių meniu:

Vaidmens kūrimas

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

Vartotojo kūrimas

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

Duomenų saugumas Elasticsearch klasteryje

Kai Elasticsearch veikia klasteryje (tai yra įprasta), klasterio saugos nustatymai tampa svarbūs. Kad užtikrintų saugų ryšį tarp mazgų, Elasticsearch naudoja TLS protokolą. Norint nustatyti saugią sąveiką tarp jų, jums reikia sertifikato. Sugeneruojame sertifikatą ir privatųjį raktą PEM formatu:

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

Įvykdę aukščiau pateiktą komandą, kataloge /../elasticsearch pasirodys archyvas elastinga-stack-ca.zip. Jo viduje rasite sertifikatą ir privatų raktą su plėtiniais krt и raktas atitinkamai. Patartina juos sudėti į bendrą išteklių, kuris turėtų būti pasiekiamas iš visų klasterio mazgų.

Kiekvienam mazgui dabar reikia savo sertifikatų ir privačių raktų, pagrįstų bendrame kataloge esančiais sertifikatais. Vykdydami komandą būsite paprašyti nustatyti slaptažodį. Norėdami visiškai patikrinti sąveikaujančius mazgus, galite pridėti papildomų parinkčių -ip ir -dn.

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

Vykdydami komandą gausime sertifikatą ir privatų raktą PKCS#12 formatu, apsaugotą slaptažodžiu. Belieka perkelti sugeneruotą failą p12 į konfigūracijos katalogą:

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

Pridėkite slaptažodį prie sertifikato tokiu formatu p12 raktų saugykloje ir patikimumo saugykloje kiekviename mazge:

[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

Jau žinoma elasticsearch.yml Belieka pridėti eilutes su sertifikato duomenimis:

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

Paleidžiame visus Elasticsearch mazgus ir vykdome raitytis. Jei viskas buvo padaryta teisingai, bus grąžintas atsakymas su keliais mazgais:

[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

Yra dar vienas saugumo variantas – IP adresų filtravimas (pasiekiamas prenumeratose nuo auksinio lygio). Leidžia kurti baltuosius IP adresų sąrašus, iš kurių jums leidžiama pasiekti mazgus.

Duomenų apsauga už Elasticsearch klasterio ribų

Už klasterio ribų reiškia išorinių įrankių prijungimą: Kibana, Logstash, Beats ar kitus išorinius klientus.

Elastingas po užraktu ir raktu: įgalinamos Elasticsearch klasterio saugos parinktys, leidžiančios pasiekti prieigą iš vidaus ir išorės

Norėdami sukonfigūruoti https palaikymą (vietoj http), į elasticsearch.yml pridėkite naujų eilučių:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

Nes Sertifikatas yra apsaugotas slaptažodžiu, pridėkite jį prie raktų saugyklos ir patikimumo saugyklos kiekviename mazge:

[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

Pridėjus raktus, Elasticsearch mazgai yra pasirengę prisijungti per https. Dabar juos galima paleisti.

Kitas žingsnis yra sukurti raktą, skirtą Kibana prijungti, ir pridėti jį prie konfigūracijos. Remdamiesi sertifikatu, kuris jau yra bendrame kataloge, sugeneruosime sertifikatą PEM formatu (PKCS#12 Kibana, Logstash ir Beats dar nepalaiko):

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

Belieka išpakuoti sukurtus raktus į aplanką su „Kibana“ konfigūracija:

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

Raktai yra, tad belieka pakeisti Kibana konfigūraciją, kad ji pradėtų juos naudoti. Konfigūracijos faile kibana.yml pakeiskite http į https ir pridėkite eilutes su SSL ryšio parametrais. Paskutinės trys eilutės konfigūruoja saugų ryšį tarp vartotojo naršyklės ir „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

Taigi nustatymai baigti ir prieiga prie duomenų Elasticsearch klasteryje yra užšifruota.

Jei turite klausimų apie Elastic Stack galimybes, susijusias su nemokama ar mokama prenumerata, stebėjimo užduotimis ar kuriant SIEM sistemą, palikite užklausą atsiliepimo forma mūsų svetainėje.

Daugiau mūsų straipsnių apie Elastic Stack on Habré:

Mašininio mokymosi supratimas elastiniame krūvoje (dar žinomas kaip Elasticsearch, dar žinomas kaip ELK)

Elasticsearch dydžio nustatymas

Šaltinis: www.habr.com

Добавить комментарий