
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:

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. ()
- 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ă , la care sunt legate . 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: trueDupă 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.passwordDacă 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.

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 . 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 --pemDupă 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/configAdă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.p12Pornim 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 - node1Există 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.

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.p12Deoarece 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_passwordDupă 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 --pemRămâne să dezarhivăm cheile create în folderul cu configurația Kibana:
[elastic@node1 ~]$ unzip elasticsearch\/certificate-bundle.zip -d kibana\/configCheile 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.crtAstfel, 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 site-ului nostru.
Încă articolele noastre despre Elastic Stack pe Habr:
Sursa: habr.com
