Elastic sub în siguranță: activăm opțiunile de securitate ale cluster-ului Elasticsearch pentru acces din interior și exterior

Elastic sub în siguranță: activăm opțiunile de securitate ale cluster-ului Elasticsearch pentru acces din interior și exterior

Elastic Stack este un instrument cunoscut pe piața sistemelor SIEM (de fapt, nu numai pentru acestea). Poate aduna date variate, atât sensibile, cât și mai puțin sensibile. Nu este corect ca accesul la elementele în sine ale Elastic Stack să nu fie protejat. În mod implicit, toate componentele Elastic (Elasticsearch, Logstash, Kibana și colectoarele Beats) funcționează prin protocoale deschise. În Kibana, autentificarea este dezactivată. Toate aceste interacțiuni pot fi securizate și în acest articol vom explica cum să facem acest lucru. Din comoditate, am împărțit narațiunea în 3 blocuri de sens:

  • Modelul de acces bazat pe roluri
  • Securitatea datelor în interiorul cluster-ului Elasticsearch
  • Securitatea datelor în afara cluster-ului Elasticsearch

Detalii mai jos.

Modelul de acces bazat pe roluri

Dacă instalați Elasticsearch și nu-l configurați deloc, accesul la toate indexurile va fi deschis pentru oricine dorește. Sau, pentru cei care pot folosi curl. Pentru a evita acest lucru, Elasticsearch are un model bazat pe roluri, care este disponibil începând cu abonamentul Basic (care este gratuit). Arată schematic cam așa:

Elastic sub în siguranță: activăm opțiunile de securitate ale cluster-ului Elasticsearch pentru acces din interior și exterior

Ce este în imagine

  • Utilizatorii sunt toți cei care se pot autentifica folosind datele de acreditive.
  • Rolul este un set de privilegii.
  • Privilegiile sunt un set de permisiuni.
  • Permisiuni — sunt permisiuni pentru scriere, citire, ștergere etc. (Lista completă a privilegiilor)
  • Resursele sunt indexuri, documente, câmpuri, utilizatori și alte subiecte ale stocării (modelul bazat pe roluri pentru unele resurse este disponibil doar în abonamentele plătite).

În Elasticsearch, în mod implicit există utilizatori prestabiliți, la care sunt legate roluri prestabilite. După activarea setărilor de securitate, acestea pot fi utilizate imediat.

Pentru a activa securitatea în setările Elasticsearch, trebuie să adăugați în fișierul de configurație (în mod implicit acesta este elasticsearch/config/elasticsearch.yml) o nouă linie:

xpack.security.enabled: true

După modificarea fișierului de configurație, porniți sau reporniți Elasticsearch pentru ca modificările să aibă efect. Următorul pas este atribuirea de parole utilizatorilor prestabiliți. Vom face acest lucru interactiv folosind comanda de mai jos:

[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Inițierea configurării parolelor pentru utilizatorii rezervați elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
Veți fi solicitat să introduceți parole pe parcursul procesului.
Vă rugăm să confirmați că doriți să continuați [y\/N]y


Introduceți parola pentru [elastic]:
Reintroduceți parola pentru [elastic]:
Introduceți parola pentru [apm_system]:
Reintroduceți parola pentru [apm_system]:
Introduceți parola pentru [kibana]:
Reintroduceți parola pentru [kibana]:
Introduceți parola pentru [logstash_system]:
Reintroduceți parola pentru [logstash_system]:
Introduceți parola pentru [beats_system]:
Reintroduceți parola pentru [beats_system]:
Introduceți parola pentru [remote_monitoring_user]:
Reintroduceți parola pentru [remote_monitoring_user]:
Parola pentru utilizatorul [apm_system] a fost schimbată
Parola pentru utilizatorul [kibana] a fost schimbată
Parola pentru utilizatorul [logstash_system] a fost schimbată
Parola pentru utilizatorul [beats_system] a fost schimbată
Parola pentru utilizatorul [remote_monitoring_user] a fost schimbată
Parola pentru utilizatorul [elastic] a fost schimbată

Verificăm:

[elastic@node1 ~]$ curl -u elastic 'node1:9200\/_cat\/nodes?pretty'
Introduceți parola gazdelor pentru utilizatorul 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Poți să te bați pe umăr — setările pe partea Elasticsearch sunt complete. Acum este timpul să configurăm Kibana. Dacă o porniți acum, vor apărea erori, așa că este important să creați un depozit de chei. Se face asta în două comenzi (utilizator kibana și parola introdusă la pasul de creare a parolelor în Elasticsearch):

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

Dacă totul este corect — Kibana va începe să ceară numele de utilizator și parola. În abonamentul de nivel Basic, este disponibil un model de rol bazat pe utilizatori interni. Începând de la Gold, puteți conecta sisteme externe de autentificare — LDAP, PKI, Active Directory și sisteme de Single sign-on.

Elastic sub în siguranță: activăm opțiunile de securitate ale cluster-ului Elasticsearch pentru acces din interior și exterior

Drepturile de acces la obiecte în Elasticsearch pot fi, de asemenea, restricționate. Totuși, pentru a face același lucru pentru documente sau câmpuri, va fi necesar un abonament plătit (această luxurie începe de la nivelul Platinum). Aceste setări sunt disponibile în interfața Kibana sau prin Security API. Puteți verifica prin deja cunoscutul meniu Dev Tools:

Crearea rolului

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

Crearea utilizatorului

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"
  }
}

Securitatea datelor în interiorul cluster-ului Elasticsearch

Când Elasticsearch funcționează într-un cluster (ceea ce este obișnuit), setările de securitate din interiorul cluster-ului devin importante. Pentru interacțiunea sigură între noduri, Elasticsearch folosește protocolul TLS. Pentru a configura interacțiunea sigură între ele, este nevoie de un certificat. Generăm un certificat și o cheie privată în format PEM:

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

După executarea comenzii de mai sus, în director /../elasticsearch va apărea un arhivă elastic-stack-ca.zip. În interiorul acesteia, vor fi descoperite certificatul și cheia privată cu extensiile crt și key corespunzător. Este recomandabil să le publicați pe o resursă partajată, la care trebuie să aibă acces toate nodurile din cluster.

Pentru fiecare nod, acum sunt necesare certificate și chei private proprii, bazate pe cele care se află în directorul partajat. La executarea comenzii, vi se va cere să introduceți o parolă. Puteți adăuga opțiuni suplimentare —ip și —dns pentru o verificare completă a interacțiunii nodurilor.

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

În urma executării comenzii, vom obține un certificat și o cheie privată în format PKCS#12, protejat cu parolă. Rămâne să mutați fișierul generat p12 în directorul de configurare:

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

Adăugăm parola pentru certificat în format p12 în keystore și truststore de pe fiecare 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 deja cunoscutul elasticsearch.yml rămâne să adăugăm liniile cu datele despre certificat:

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

Pornim toate nodurile Elasticsearch și executăm curl. Dacă totul a fost efectuat corect, va reveni un răspuns cu mai multe noduri:

[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

Există o altă opțiune de securitate — filtrarea adreselor IP (disponibilă în abonamentele de la nivelul Gold). Permite crearea listelor albe de adrese IP, din care este permis accesul la noduri.

Securitatea datelor în afara cluster-ului Elasticsearch

În afara clusterului înseamnă conectarea instrumentelor externe: Kibana, Logstash, Beats sau alți clienți externi.

Elastic sub în siguranță: activăm opțiunile de securitate ale cluster-ului Elasticsearch pentru acces din interior și exterior

Pentru a configura suportul https (în loc de http), vom adăuga în elasticsearch.yml noi linii:

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

Deoarece certificatul este protejat cu parolă, îl adăugăm în keystore și truststore de pe fiecare 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

După adăugarea cheilor, nodurile Elasticsearch sunt gata pentru conectarea prin https. Acum pot fi pornite.

Următorul pas este crearea unei chei pentru conectarea Kibana și adăugarea acesteia în configurație. Pe baza certificatului deja plasat în directorul shared, vom genera un certificat în format PEM (PKCS#12 Kibana, Logstash și Beats nu sunt încă suportate):

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

Rămâne să dezarhivăm cheile create în folderul cu configurația Kibana:

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

Cheile sunt disponibile, deci rămâne să modificăm configurația Kibana pentru a le utiliza. În fișierul de configurare kibana.yml schimbăm http în https și adăugăm liniile cu setările SSL de conectare. Ultimele trei linii configurează interacțiunea sigură între browserul utilizatorului și 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

Astfel, setările sunt complete și accesul la datele din clusterul Elasticsearch este criptat.

Dacă aveți întrebări despre funcționalitățile Elastic Stack în abonamentele gratuite sau plătite, sau despre sarcini legate de monitorizare sau crearea unui sistem SIEM, lăsați o cerere în formularele de contact site-ului nostru.

Încă articolele noastre despre Elastic Stack pe Habr:

Facem clarificări despre Machine Learning în Elastic Stack (cunoscut și sub numele de Elasticsearch, ELK)

Sizarea Elasticsearch

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster