Elastic sub cheie: activarea opțiunilor de securitate pentru clusterul Elasticsearch pentru acces din interior și din exterior

Elastic sub cheie: activarea opțiunilor de securitate pentru clusterul Elasticsearch pentru acces din interior și din exterior

Elastic Stack este un instrument binecunoscut pe piața sistemelor SIEM (de fapt, nu numai ele). Poate colecta o mulțime de date de dimensiuni diferite, atât sensibile, cât și nu foarte sensibile. Nu este complet corect dacă accesul la elementele Elastic Stack în sine nu este protejat. În mod implicit, toate elementele Elastic out-of-the-box (colectorii Elasticsearch, Logstash, Kibana și Beats) rulează pe protocoale deschise. Și în Kibana însuși, autentificarea este dezactivată. Toate aceste interacțiuni pot fi securizate și în acest articol vă vom spune cum să faceți acest lucru. Pentru comoditate, am împărțit narațiunea în 3 blocuri semantice:

  • Model de acces la date bazat pe roluri
  • Securitatea datelor într-un cluster Elasticsearch
  • Securizarea datelor în afara unui cluster Elasticsearch

Detalii sub croiala.

Model de acces la date bazat pe roluri

Dacă instalați Elasticsearch și nu îl reglați în niciun fel, accesul la toți indexurile va fi deschis tuturor. Ei bine, sau cei care pot folosi curl. Pentru a evita acest lucru, Elasticsearch are un model care este disponibil începând cu un abonament Basic (care este gratuit). Schematic arată cam așa:

Elastic sub cheie: activarea opțiunilor de securitate pentru clusterul Elasticsearch pentru acces din interior și din exterior

Ce este în poză

  • Utilizatorii sunt toți cei care se pot conecta folosind acreditările lor.
  • Un rol este un set de drepturi.
  • Drepturile sunt un set de privilegii.
  • Privilegiile sunt permisiuni de scriere, citire, ștergere etc. (Lista completă de privilegii)
  • Resursele sunt indecși, documente, câmpuri, utilizatori și alte entități de stocare (modelul pentru unele resurse este disponibil numai cu abonamente plătite).

În mod implicit, Elasticsearch are utilizatorii cutiei, la care sunt atașate roluri de cutie. După ce activați setările de securitate, puteți începe să le utilizați imediat.

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

xpack.security.enabled: true

După modificarea fișierului de configurare, lansați sau reporniți Elasticsearch pentru ca modificările să aibă efect. Următorul pas este alocarea parolelor utilizatorilor cutiei. Să facem acest lucru în mod interactiv folosind comanda de mai jos:

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

Verificăm:

[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

Vă puteți bate pe spate - setările din partea Elasticsearch sunt finalizate. Acum este timpul să configurați Kibana. Dacă îl rulați acum, vor apărea erori, așa că este important să creați un depozit de chei. Acest lucru se face în două comenzi (user kibana și parola introdusă la pasul de creare a parolei î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ă autentificare și parolă. Abonamentul Basic include un model bazat pe utilizatori interni. Începând cu Gold, puteți conecta sisteme de autentificare externe - sisteme LDAP, PKI, Active Directory și Single sign-on.

Elastic sub cheie: activarea opțiunilor de securitate pentru clusterul Elasticsearch pentru acces din interior și din exterior

Drepturile de acces la obiectele din interiorul Elasticsearch pot fi, de asemenea, limitate. Totuși, pentru a face același lucru pentru documente sau câmpuri, veți avea nevoie de un abonament plătit (acest lux începe cu nivelul Platină). Aceste setări sunt disponibile în interfața Kibana sau prin intermediul API de securitate. Puteți verifica prin meniul deja familiar Instrumente de dezvoltare:

Crearea unui rol

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

Crearea unui utilizator

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

Securitatea datelor într-un cluster Elasticsearch

Când Elasticsearch rulează într-un cluster (ceea ce este obișnuit), setările de securitate din cluster devin importante. Pentru comunicarea sigură între noduri, Elasticsearch utilizează protocolul TLS. Pentru a configura interacțiunea sigură între ele, aveți nevoie de un certificat. Generăm un certificat și 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 arhiva elastic-stiva-ca.zip. În interiorul acestuia veți găsi un certificat și o cheie privată cu extensii crt и cheie respectiv. Este recomandabil să le puneți pe o resursă partajată, care ar trebui să fie accesibilă de la toate nodurile din cluster.

Fiecare nod are acum nevoie de propriile certificate și chei private bazate pe cele din directorul partajat. Când executați comanda, vi se va cere să setați o parolă. Puteți adăuga opțiuni suplimentare -ip și -dns pentru verificarea completă a nodurilor care interacționează.

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

Ca urmare a executării comenzii, vom primi un certificat și o cheie privată în format PKCS#12, protejate de o parolă. Tot ce rămâne este să mutați fișierul generat p12 la directorul de configurare:

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

Adăugați o parolă la certificat în format p12 în depozitul de chei și depozitul de încredere 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

Deja cunoscut elasticsearch.yml Tot ce rămâne este să adăugați linii cu datele certificatului:

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

Lansăm toate nodurile Elasticsearch și executăm răsuci. Dacă totul a fost făcut corect, va fi returnat 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 adresei IP (disponibilă în abonamentele de la nivelul Gold). Vă permite să creați liste albe de adrese IP de la care aveți permisiunea de a accesa nodurile.

Securizarea datelor în afara unui cluster Elasticsearch

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

Elastic sub cheie: activarea opțiunilor de securitate pentru clusterul Elasticsearch pentru acces din interior și din exterior

Pentru a configura suportul pentru https (în loc de http), adăugați linii noi la 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

Deoarece Certificatul este protejat prin parolă, adăugați-l în depozitul de chei și depozitul de încredere 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 să se conecteze prin https. Acum pot fi lansate.

Următorul pas este să creați o cheie pentru a conecta Kibana și să o adăugați la configurație. Pe baza certificatului care se află deja în directorul partajat, vom genera un certificat în format PEM (PKCS#12 Kibana, Logstash și Beats nu acceptă încă):

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

Tot ce rămâne este să despachetezi cheile create în folderul cu configurația Kibana:

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

Cheile sunt acolo, așa că tot ce rămâne este să schimbați configurația Kibana, astfel încât să înceapă să le folosească. În fișierul de configurare kibana.yml, schimbați http în https și adăugați linii cu setări de conexiune SSL. Ultimele trei linii configurează comunicarea securizată î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 finalizate și accesul la date din clusterul Elasticsearch este criptat.

Dacă aveți întrebări despre capabilitățile Elastic Stack privind abonamentele gratuite sau plătite, despre sarcinile de monitorizare sau despre crearea unui sistem SIEM, lăsați o solicitare către formular de feedback pe site-ul nostru.

Mai multe dintre articolele noastre despre Elastic Stack pe Habré:

Înțelegerea învățării automate în Elastic Stack (alias Elasticsearch, alias ELK)

Dimensiuni Elasticsearch

Sursa: www.habr.com

Adauga un comentariu