Elastic nën siguri: aktivizoni opsionet e sigurisë të klasterit Elasticsearch për akses nga brenda dhe jashtë

Elastic nën siguri: aktivizoni opsionet e sigurisë të klasterit Elasticsearch për akses nga brenda dhe jashtë

Elastic Stack — një mjet i njohur në tregun e sistemeve SIEM (nuk është vetëm për to). Ai mund të grumbullojë shumë të dhëna të ndryshme, si të ndjeshme ashtu edhe jo. Nuk është krejtësisht e saktë nëse qasja në vetë elementet e Elastic Stack nuk do të jetë e mbrojtur. Nga default, të gjithë elementët kutia të Elastic (Elasticsearch, Logstash, Kibana dhe kolektorët Beats) punojnë në protokollet e hapura. Ndërsa në vetë Kibana, autentifikimi është i çaktivizuar. Të gjitha këto ndërveprime mund të sigurohen, dhe në këtë artikull do të tregojmë se si ta bëjmë këtë. Për lehtësinë e lexuesve, e ndamë narrativin në 3 blloqe semantike:

  • Modeli i aksesit rol
  • Siguria e të dhënave brenda klasterit Elasticsearch
  • Siguria e të dhënave jashtë klasterit Elasticsearch

Detajet më poshtë.

Modeli i aksesit rol

Nëse instalohet Elasticsearch dhe nuk bëhet asnjë optimizim — qasja në të gjitha indekset do të jetë e hapur për të gjithë ata që dëshirojnë. Ose, ata që dinë të përdorin curl. Për ta shmangur këtë, në Elasticsearch ekziston një model roli, i cili është në dispozicion duke filluar nga niveli i abonimit Basic (i cili është falas). Duke e parë në mënyrë skematike, duket kështu:

Elastic nën siguri: aktivizoni opsionet e sigurisë të klasterit Elasticsearch për akses nga brenda dhe jashtë

Çfarë është në figurë

  • Përdoruesit — janë të gjithë ata që mund të identifikohen duke përdorur kredencialet.
  • 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ë indekse, dokumente, fusha, përdorues dhe subjekte të tjera të ruajtjes (modeli i rolit për disa burime është i disponueshëm vetëm në abonime me pagesë).

Në Elasticsearch, për default ka përdorues të fabrikës, të cilët lidhen me rollet e fabrikës. Pas aktivizimit të cilësimeve të sigurisë, ato mund të fillojnë të përdoren menjëherë.

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

xpack.security.enabled: true

Pas ndryshimit të skedarit të konfigurimit, startojmë ose rstartojmë Elasticsearch, që ndryshimet të hyjnë në fuqi. Hapi tjetër është caktimi i fjalëkalimeve për përdoruesit e fabrikës. Do ta bëjmë këtë në mënyrë interaktive me komandën më poshtë:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Duke procesin e konfigurimit të fjalëkalimeve për përdoruesit rezervë elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
Do të përballeni me nevojën për të futur fjalëkalime ndërsa procesi përparon.
Ju lutem konfirmoni nëse dëshironi të vazhdoni [y/N]y


Futni fjalëkalimin për [elastic]:
Rivendosni fjalëkalimin për [elastic]:
Futni fjalëkalimin për [apm_system]:
Rivendosni fjalëkalimin për [apm_system]:
Futni fjalëkalimin për [kibana]:
Rivendosni fjalëkalimin për [kibana]:
Futni fjalëkalimin për [logstash_system]:
Rivendosni fjalëkalimin për [logstash_system]:
Futni fjalëkalimin për [beats_system]:
Rivendosni fjalëkalimin për [beats_system]:
Futni fjalëkalimin për [remote_monitoring_user]:
Rivendosni fjalëkalimin për [remote_monitoring_user]:
Fjalëkalimi është ndryshuar për përdoruesin [apm_system]
Fjalëkalimi është ndryshuar për përdoruesin [kibana]
Fjalëkalimi është ndryshuar për përdoruesin [logstash_system]
Fjalëkalimi është ndryshuar për përdoruesin [beats_system]
Fjalëkalimi është ndryshuar për përdoruesin [remote_monitoring_user]
Fjalëkalimi është ndryshuar për përdoruesin [elastic]

Po kontrollojmë:

[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Futni 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ë përqafoni veten — konfigurimet në anën e Elasticsearch janë bërë. Tani është koha për të konfiguruar Kibana. Nëse e filloni tani, do të shfaqen gabime, kështu që është e rëndësishme të krijoni një depo çelesh. Kjo bëhet me dy komanda (përdoruesi kibana dhe fjalëkalimi, të 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ë e saktë — Kibana do të fillojë të kërkojë emrin e përdoruesit dhe fjalëkalimin. Në abonimin e nivelit Basic, është e disponueshme një model roli në bazë të përdoruesve të brendshëm. Duke filluar nga Gold, mund të lidhni sisteme autentifikimi të jashtme — LDAP, PKI, Active Directory dhe sisteme Single sign-on.

Elastic nën siguri: aktivizoni opsionet e sigurisë të klasterit 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ë abonim pagese (kjo luks fillon nga niveli Platinum). Këto cilësime janë të disponueshme në ndërfaqen e Kibana ose përmes Security API. Mund ta kontrolloni përmes menusë tashmë të njohur Dev Tools:

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 (çka është e zakonshme), konfigurimet e sigurisë brenda klasterit bëhen të rëndësishme. Për një ndërveprim të sigurt midis nodave, Elasticsearch përdor protokollin TLS. Për të konfiguruar një ndërveprim të sigurt midis tyre, nevojitet një certifikatë. Gjenerojmë një certifikatë dhe një çelës privat në formatin PEM:

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

Pas ekzekutimit të komandës së mësipërme, në drejtorinë /../elasticsearch do të shfaqet një arkiv elastic-stack-ca.zip. Brenda tij do të gjeni certifikatën dhe çelësin privat me përmasa crt dhe key përkatësisht. Është e preferueshme t'i vendosim ato në një burim të përbashkët, të cilit duhet të ketë akses nga të gjitha nodat e klasterit.

Për secilën nodë tani nevojiten certifikata dhe çelësat privatë mbi bazën e atyre që ndodhen në direktorinë e përbashkët. Gjatë ekzekutimit të komandës do të kërkohet të vendosni një fjalëkalim. Mund të shtoni mundësi të tjera —ip dhe —dns për një verifikim të 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 ekzekutimit 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ë transferojmë skedarin e gjeneruar p12 në drejtorinë me konfigurimin:

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

Shtojmë një fjalëkalim për certifikatën në formatin p12 në keystore dhe truststore në çdo nodë:

[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 elasticsearch.yml më mbetet të shtoj rreshtat me informacionin 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

Nisni të gjitha nodet Elasticsearch dhe realizoni curl. Nëse gjithçka është bërë siç duhet, do të keni një përgjigje me disa node:

[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

Ekziston një opsion tjetër për sigurinë — filtrimi i adresave IP (disponues në abonimet nga niveli Gold). Lejon krijimin e listave të bardha të adresave IP nga të cilat lejohet qasja në nodet.

Siguria e të dhënave jashtë klasterit Elasticsearch

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

Elastic nën siguri: aktivizoni opsionet e sigurisë të klasterit Elasticsearch për akses nga brenda dhe jashtë

Për të konfiguroni mbështetje https (në vend të http), do të shtojmë rreshta të rinj në 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

Duke qenë se certifikata është e 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 shtimit të çelësave, nodet Elasticsearch janë të gatshme për lidhje nëpërmjet https. Tani mund të fillohen.

Hapi tjetër ë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ë direktorinë e ndarë, do të gjenerojmë një certifikatë në formatin PEM (PKCS#12 Kibana, Logstash dhe Beats nuk e mbështesin ende):

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

I mbetet të nxjerrim çelësat e krijuar në folderin me konfigurimin e Kibana:

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

Çelësat ekzistojnë, tani mbetet të ndryshohet konfigurimi i Kibana-s që të fillojë t'i përdorë 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 midis shfletuesit të përdoruesit dhe Kibana-s.

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 qasja në të dhënat në klasterin Elasticsearch është e enkriptuar.

Nëse keni pyetje mbi mundësitë e Elastic Stack në abonimet falas ose me pagesë, çështjet për monitorimin ose krijimin e sistemeve SIEM, lëreni një kërkesë në formën e kontaktit në faqen tonë.

Akoma artikujt tanë mbi Elastic Stack në Habr:

Të kuptojmë Machine Learning në Elastic Stack (njësoj Elasticsearch, njësoj ELK)

S sizing Elasticsearch

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster