Elastic under lock: omogućavanje sigurnosnih opcija klastera Elasticsearch za pristup iznutra i izvana

Elastic under lock: omogućavanje sigurnosnih opcija klastera Elasticsearch za pristup iznutra i izvana

Elastic Stack je dobro poznat alat na tržištu SIEM sustava (zapravo, ne samo njih). Može prikupiti mnogo podataka različitih veličina, osjetljivih i manje osjetljivih. Nije sasvim ispravno ako pristup samim elementima Elastic Stack nije zaštićen. Prema zadanim postavkama, svi Elastic elementi izvan okvira (Elasticsearch, Logstash, Kibana i Beats kolektori) rade na otvorenim protokolima. A u samoj Kibani autentifikacija je onemogućena. Sve ove interakcije mogu se osigurati, au ovom članku ćemo vam reći kako to učiniti. Radi praktičnosti, podijelili smo narativ u 3 semantička bloka:

  • Model pristupa podacima temeljen na ulogama
  • Sigurnost podataka unutar Elasticsearch klastera
  • Osiguranje podataka izvan Elasticsearch klastera

Detalji ispod kroja.

Model pristupa podacima temeljen na ulogama

Ako instalirate Elasticsearch i ne podešavate ga ni na koji način, pristup svim indeksima će biti otvoren za sve. Pa, ili oni koji mogu koristiti curl. Kako bi se to izbjeglo, Elasticsearch ima uzor koji je dostupan počevši od Basic pretplate (koja je besplatna). Shematski to izgleda otprilike ovako:

Elastic under lock: omogućavanje sigurnosnih opcija klastera Elasticsearch za pristup iznutra i izvana

Što je na slici

  • Korisnici su svi koji se mogu prijaviti pomoću svojih vjerodajnica.
  • Uloga je skup prava.
  • Prava su skup privilegija.
  • Privilegije su dozvole za pisanje, čitanje, brisanje itd. (Cijeli popis privilegija)
  • Resursi su indeksi, dokumenti, polja, korisnici i drugi entiteti za pohranu (uzor za neke resurse dostupan je samo uz plaćene pretplate).

Prema zadanim postavkama Elasticsearch ima korisnici kutija, na koji su priloženi okvir uloge. Nakon što omogućite sigurnosne postavke, možete ih odmah početi koristiti.

Da biste omogućili sigurnost u postavkama Elasticsearcha, morate ga dodati u konfiguracijsku datoteku (prema zadanim postavkama to je elasticsearch/config/elasticsearch.yml) nova linija:

xpack.security.enabled: true

Nakon promjene konfiguracijske datoteke, pokrenite ili ponovno pokrenite Elasticsearch kako bi promjene stupile na snagu. Sljedeći korak je dodjeljivanje lozinki korisnicima box-a. Učinimo to interaktivno pomoću donje naredbe:

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

Provjeravamo:

[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

Možete se potapšati po ramenu – postavke na Elasticsearch strani su završene. Sada je vrijeme da konfigurirate Kibanu. Ako ga sada pokrenete, pojavit će se pogreške, stoga je važno izraditi pohranu ključeva. To se radi pomoću dvije naredbe (korisnik kibana i lozinka unesena u koraku kreiranja lozinke u Elasticsearch):

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

Ako je sve ispravno, Kibana će početi tražiti prijavu i lozinku. Osnovna pretplata uključuje uzor temeljen na internim korisnicima. Počevši od Golda, možete povezati vanjske sustave provjere autentičnosti - LDAP, PKI, Active Directory i sustave jedinstvene prijave.

Elastic under lock: omogućavanje sigurnosnih opcija klastera Elasticsearch za pristup iznutra i izvana

Prava pristupa objektima unutar Elasticsearcha također mogu biti ograničena. Međutim, da biste učinili isto za dokumente ili polja, trebat će vam plaćena pretplata (ovaj luksuz počinje s Platinum razinom). Ove postavke dostupne su u Kibana sučelju ili putem Sigurnosni API. Možete provjeriti kroz već poznati izbornik Dev Tools:

Stvaranje uloge

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

Stvaranje korisnika

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

Sigurnost podataka unutar Elasticsearch klastera

Kada se Elasticsearch izvodi u klasteru (što je uobičajeno), sigurnosne postavke unutar klastera postaju važne. Za sigurnu komunikaciju između čvorova Elasticsearch koristi TLS protokol. Za postavljanje sigurne interakcije između njih potreban vam je certifikat. Generiramo certifikat i privatni ključ u PEM formatu:

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

Nakon izvršenja gornje naredbe, u direktoriju /../elasticsearch pojavit će se arhiva elastic-stack-ca.zip. Unutar njega pronaći ćete certifikat i privatni ključ s nastavcima crt и ključ odnosno. Preporučljivo je staviti ih na zajednički resurs, koji bi trebao biti dostupan sa svih čvorova u klasteru.

Svaki čvor sada treba vlastite certifikate i privatne ključeve temeljene na onima u zajedničkom direktoriju. Prilikom izvršavanja naredbe od vas će se tražiti da postavite lozinku. Možete dodati dodatne opcije -ip i -dns za potpunu provjeru čvorova u interakciji.

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

Kao rezultat izvršenja naredbe dobit ćemo certifikat i privatni ključ u PKCS#12 formatu, zaštićen lozinkom. Sve što preostaje je premjestiti generiranu datoteku p12 u konfiguracijski direktorij:

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

Dodajte lozinku certifikatu u formatu p12 u spremištu ključeva i spremištu povjerenja na svakom čvoru:

[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

Već poznato elasticsearch.yml Sve što preostaje je dodati retke s podacima certifikata:

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

Pokrećemo sve Elasticsearch čvorove i izvršavamo sklupčati. Ako je sve učinjeno ispravno, vratit će se odgovor s nekoliko čvorova:

[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

Postoji još jedna sigurnosna opcija - filtriranje IP adresa (dostupno u pretplatama od zlatne razine). Omogućuje vam stvaranje bijelih popisa IP adresa s kojih vam je dopušten pristup čvorovima.

Osiguranje podataka izvan Elasticsearch klastera

Izvan klastera znači povezivanje vanjskih alata: Kibana, Logstash, Beats ili drugih vanjskih klijenata.

Elastic under lock: omogućavanje sigurnosnih opcija klastera Elasticsearch za pristup iznutra i izvana

Za konfiguriranje podrške za https (umjesto http), dodajte nove retke u 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

Jer Certifikat je zaštićen lozinkom, dodajte ga u spremište ključeva i pouzdano skladište na svakom čvoru:

[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

Nakon dodavanja ključeva, čvorovi Elasticsearch spremni su za povezivanje putem https-a. Sada se mogu pokrenuti.

Sljedeći korak je stvoriti ključ za povezivanje Kibane i dodati ga u konfiguraciju. Na temelju certifikata koji se već nalazi u dijeljenom direktoriju, generirat ćemo certifikat u PEM formatu (PKCS#12 Kibana, Logstash i Beats još ne podržavaju):

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

Sve što preostaje je raspakirati stvorene ključeve u mapu s konfiguracijom Kibana:

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

Ključevi su tu, preostaje samo promijeniti konfiguraciju Kibane da ih počne koristiti. U konfiguracijskoj datoteci kibana.yml promijenite http u https i dodajte retke s postavkama SSL veze. Posljednja tri retka konfiguriraju sigurnu komunikaciju između preglednika korisnika i Kibane.

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

Time su postavke završene i pristup podacima u klasteru Elasticsearch je kriptiran.

Ako imate pitanja o mogućnostima Elastic Stacka na besplatnim ili plaćenim pretplatama, nadzornim zadacima ili stvaranju SIEM sustava, ostavite zahtjev na obrazac za povratne informacije na našoj web stranici.

Više naših članaka o Elastic Stacku na Habréu:

Razumijevanje strojnog učenja u Elastic Stacku (aka Elasticsearch, aka ELK)

Elasticsearch dimenzioniranje

Izvor: www.habr.com

Dodajte komentar