Elastic në mbrojtje: aktivizimi i opsioneve të sigurisë për klasterin Elasticsearch për akses nga brenda dhe jashtë

Elastic në mbrojtje: aktivizimi i opsioneve të sigurisë për klasterin Elasticsearch për akses nga brenda dhe jashtë

Elastic Stack është një mjet i njohur në tregun e sistemeve SIEM (në fakt, jo vetëm ato). Ai mund të mbledhë shumë lloje të ndryshme të të dhënave, si ato të ndjeshme ashtu edhe të tjera. Nuk është krejtësisht e drejtë nëse aksesi në vetë elementët e Elastic Stack nuk është i mbrojtur. Në mënyrë të parazgjedhur, të gjithë elementët standard të Elastic (Elasticsearch, Logstash, Kibana dhe kolektorët Beats) punojnë me protokolle të hapura. Gjithashtu, autentifikimi është i çaktivizuar në Kibana. Të gjitha këto ndërveprime mund të sigurohen dhe në këtë artikull do të tregojmë se si ta bëni këtë. Për lehtësi, e kemi ndarë narrativin në 3 blloqe të kuptimshme:

  • Modeli i rolit tĂ« aksesit nĂ« tĂ« dhĂ«na
  • Siguria e tĂ« dhĂ«nave brenda klasterit Elasticsearch
  • Siguria e tĂ« dhĂ«nave jashtĂ« klasterit Elasticsearch

Detajet më poshtë.

Modeli i rolit të aksesit në të dhëna

Nëse vendosni Elasticsearch dhe nuk e konfiguroni, aksesin në të gjitha indeksat do ta kenë të gjithë ata që duan. Ose, të paktën, ata që dinë si të përdorin curl. Për të shmangur këtë, Elasticsearch ka një model roli që është i disponueshëm që nga niveli i abonimit Basic (i cili është falas). Ai duket përafërsisht kështu:

Elastic në mbrojtje: aktivizimi i opsioneve të sigurisë për klasterin Elasticsearch për akses nga brenda dhe jashtë

ÇfarĂ« Ă«shtĂ« nĂ« imazh

  • PĂ«rdoruesit janĂ« tĂ« gjithĂ« ata qĂ« mund tĂ« autentifikohen duke pĂ«rdorur tĂ« dhĂ«nat e identifikimit.
  • Roli Ă«shtĂ« njĂ« grup tĂ« drejtash.
  • TĂ« drejtat janĂ« njĂ« grup privilegjesh.
  • Privilegjet janĂ« leje pĂ«r tĂ« shkruar, lexuar, fshirĂ« etj. (Lista e plotĂ« e privilegjeve)
  • Burimet janĂ« indeksat, dokumentet, fushat, pĂ«rdoruesit dhe subjekte tĂ« tjera tĂ« depozitĂ«s (modeli i rolit Ă«shtĂ« i dispozitshĂ«m pĂ«r disa burime vetĂ«m nĂ« abonimet me pagesĂ«).

Në Elasticsearch, si parazgjedhje ka përdorues standard, të cilët lidhen me rollet standard. Pas aktivizimit të parametrave të sigurisë, ato mund të fillohen të përdoren menjëherë.

Për të aktivizuar sigurinë në parametrat Elasticsearch, duhet të shtoni një rresht të ri në skedarin e konfigurimit (në mënyrë të parazgjedhur është elasticsearch/config/elasticsearch.yml).

xpack.security.enabled: true

Pas ndryshimit të skedarit të konfigurimit, nisni ose rifilloni Elasticsearch për të bërë efekt ndryshimet. Hapi tjetër është caktimi i fjalëkalimeve për përdoruesit standard. Le ta bëjmë këtë interaktivisht me komandën më poshtë:

[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Duke dritë për ngjyrat e përdoruesve rezervë elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
Do të kërkohet të jepni fjalëkalimet ndërsa procesi vazhdon.
Ju lutemi konfirmoni që dëshironi të vazhdoni [y\/N]y


Jepni fjalëkalimin për [elastic]:
Rinjisni fjalëkalimin për [elastic]:
Jepni fjalëkalimin për [apm_system]:
Rinjisni fjalëkalimin për [apm_system]:
Jepni fjalëkalimin për [kibana]:
Rinjisni fjalëkalimin për [kibana]:
Jepni fjalëkalimin për [logstash_system]:
Rinjisni fjalëkalimin për [logstash_system]:
Jepni fjalëkalimin për [beats_system]:
Rinjisni fjalëkalimin për [beats_system]:
Jepni fjalëkalimin për [remote_monitoring_user]:
Rinjisni fjalëkalimin për [remote_monitoring_user]:
Fjalëkalimi për përdoruesin [apm_system] është ndërruar
Fjalëkalimi për përdoruesin [kibana] është ndërruar
Fjalëkalimi për përdoruesin [logstash_system] është ndërruar
Fjalëkalimi për përdoruesin [beats_system] është ndërruar
Fjalëkalimi për përdoruesin [remote_monitoring_user] është ndërruar
Fjalëkalimi për përdoruesin [elastic] është ndërruar

Po kontrollojmë:

[elastic@node1 ~]$ curl -u elastic 'node1:9200\/cat\/nodes?pretty'
Jepni fjalëkalimin e hostit për përdoruesin 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Mund t'i japĂ«sh vetes njĂ« shuplakĂ« — konfigurimet nĂ« anĂ«n e Elasticsearch janĂ« kryer. Tani Ă«shtĂ« koha pĂ«r tĂ« konfiguruar Kibana. NĂ«se e nis tani, do tĂ« dalin gabime, ndaj Ă«shtĂ« e rĂ«ndĂ«sishme tĂ« krijosh njĂ« depo çelĂ«sash. Kjo bĂ«het me dy komanda (pĂ«rdoruesi kibana dhe fjalĂ«kalimi, i futur nĂ« hapin e krijimit tĂ« fjalĂ«kalimeve nĂ« Elasticsearch):

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

NĂ«se gjithçka Ă«shtĂ« bĂ«rĂ« saktĂ« — Kibana do tĂ« kĂ«rkojĂ« emrin e pĂ«rdoruesit dhe fjalĂ«kalimin. NĂ« mbĂ«shtetje tĂ« nivelit Basic, modelet e rolit bazohen nĂ« pĂ«rdoruesit e brendshĂ«m. Duke filluar nga Gold, mund tĂ« lidhen sisteme autentikimi tĂ« jashtme — LDAP, PKI, Active Directory dhe sisteme Single sign-on.

Elastic në mbrojtje: aktivizimi i opsioneve të sigurisë për klasterin Elasticsearch për akses nga brenda dhe jashtë

Të drejtat e aksesit në objektet brenda Elasticsearch gjithashtu mund të kufizohen. Megjithatë, për të bërë të njëjtën gjë për dokumentet ose fushat, do të nevojitet një të subscription paguar (kjo luks fillon nga niveli Platinum). Këto konfigurime janë të disponueshme në ndërfaqen e Kibana ose përmes Security API. Mund të kontrollohet përmes menusë Dev Tools të njohur:

Krijimi i rolit

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

Krijimi i përdoruesit

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

Siguria e të dhënave brenda klasterit Elasticsearch

Kur Elasticsearch punon në një klaster (dhe kjo është e zakonshme), konfigurimet e sigurisë brenda klasterit bëhen të rëndësishme. Për një bashkëpunim të sigurt midis nyjeve, Elasticsearch përdor protokollin TLS. Për të konfiguruar bashkëpunimin e sigurt midis tyre, është e nevojshme një certifikatë. Gjenerojmë certifikatën dhe çelësin privat në formatin PEM:

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

Pas pasjes sĂ« ekzekutimit tĂ« komandĂ«s mĂ« sipĂ«r, do tĂ« shfaqet njĂ« arkiv nĂ« direktoriumin /../elasticsearch qĂ« do tĂ« pĂ«rmbajĂ« njĂ« certifikatĂ« dhe njĂ« çelĂ«s privat me zgjatjet elastic-stack-ca.zippĂ«rkatĂ«sisht. ËshtĂ« preferueshme qĂ« ato tĂ« publikohen nĂ« njĂ« burim tĂ« pĂ«rbashkĂ«t, tĂ« cilit duhet t'i kalohet qasja nga tĂ« gjitha nodet e klastrit. crt dhe key PĂ«r çdo nod tani nevojiten certifikatat dhe çelĂ«sat privatĂ« tĂ« veta, tĂ« bazuar nĂ« ato qĂ« janĂ« nĂ« direktoriumin e pĂ«rbashkĂ«t. GjatĂ« ekzekutimit tĂ« komandĂ«s do tĂ« kĂ«rkohet tĂ« vendoset njĂ« fjalĂ«kalim. Mund tĂ« shtoni opsione shtesĂ« —ip dhe —dns pĂ«r verifikimin e plotĂ« tĂ« nodave qĂ« ndĂ«rveprojnĂ«.

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

Pas përfundimit të komandës do të marrim një certifikatë dhe një çelës privat në formatin PKCS#12, të mbrojtur me fjalëkalim. Tani mbetet të zhvendosim dosjen e gjeneruar

p12 në direktoriumin me konfigurimin: [elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config

Shtojmë fjalëkalimin për certifikatën në formatin

në keystore dhe truststore në çdo nodë: në direktoriumin me konfigurimin: [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

Në skedarin e njohur më parë

elasticsearch.yml mbetet të shtojmë rreshtat me të dhënat për certifikatën: 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

E startojmë të gjitha nodet Elasticsearch dhe ekzekutojmë

. Nëse çdo gjë është kryer siç duhet, do të kthehet një përgjigje me disa nodë: 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

Ka njĂ« opsion tjetĂ«r pĂ«r sigurinĂ« — filtrimin e adresave IP (i disponueshĂ«m nĂ« abonimet nga niveli Gold). Lejon krijimin e listeve tĂ« bardha tĂ« adresave IP, nga tĂ« cilat Ă«shtĂ« e lejuar tĂ« aksesohen nodet.

Jashtë klastri do të thotë të lidheni me mjete të jashtme: Kibana, Logstash, Beats ose klientë të tjerë të jashtëm.

Siguria e të dhënave jashtë klasterit Elasticsearch

Për të konfiguruar mbështetje https (në vend të http), shtojmë në elasticsearch.yml rreshta të rinj:

Elastic në mbrojtje: aktivizimi i opsioneve të sigurisë për klasterin Elasticsearch për akses nga brenda dhe jashtë

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

Duke qenë se certifikata është e mbrojtur me fjalëkalim, e shtojmë atë në keystore dhe truststore në çdo nodë:

Pasi certifikati është i mbrojtur me fjalëkalim, do ta shtojmë në keystore dhe truststore në çdo nod:

[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

Pas pastrimit të çelësave, nodet Elasticsearch janë gati për t'u lidhur nëpërmjet https. Tani, mund të fillohen.

Hapi i ardhshëm është krijimi i një çelësi për lidhjen me Kibana dhe shtimi i tij në konfigurim. Në bazë të certifikatës, e cila tashmë është vendosur në dosjen e përbashkët, do të gjenerojmë certifikat në formatin PEM (PKCS#12 Kibana, Logstash dhe Beats deri tani nuk e mbështesin):

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

Ka mbetur të nxirren çelësat e krijuar në dosjen e konfigurimit të Kibana:

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

ÇelĂ«sat janĂ« kĂ«tu, kĂ«shtu qĂ« mbetet tĂ« ndryshohet konfigurimi i Kibana pĂ«r t'i pĂ«rdorur ato. NĂ« skedarin e konfigurimit kibana.yml, ndryshojmĂ« http nĂ« https dhe shtojmĂ« rreshtat me cilĂ«simet e lidhjes SSL. Tre rreshtat e fundit konfigurojnĂ« ndĂ«rveprimin e sigurt mes shfletuesit tĂ« pĂ«rdoruesit dhe 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

Kështu, cilësimet janë kryer dhe qasje në të dhënat në klasterin Elasticsearch është e kriptuar.

Nëse keni pyetje rreth mundësive të Elastic Stack në abonime falas ose të paguara, detyrat për monitorim ose krijimin e sistemeve SIEM, lëreni një kërkesë në formën e kontaktit në faqen tonë.

Të tjera artikuj tona mbi Elastic Stack në Habr:

Po merremi me Machine Learning në Elastic Stack (ai që është Elasticsearch, ai që është ELK)

Sizing Elasticsearch

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster