Elastic under lock and key: aktivácia možností zabezpečenia klastra Elasticsearch pre prístup zvnútra aj zvonku

Elastic under lock and key: aktivácia možností zabezpečenia klastra Elasticsearch pre prístup zvnútra aj zvonku

Elastic Stack je na trhu SIEM systémov (vlastne nielen ich) známy nástroj. Dokáže zhromaždiť množstvo údajov rôznej veľkosti, citlivých aj málo citlivých. Nie je úplne správne, ak prístup k samotným prvkom Elastic Stack nie je chránený. Všetky prednastavené prvky Elastic (Elasticsearch, Logstash, Kibana a zberatelia Beats) štandardne bežia na otvorených protokoloch. A v samotnej Kibane je autentifikácia zakázaná. Všetky tieto interakcie je možné zabezpečiť a v tomto článku vám povieme, ako na to. Pre pohodlie sme rozdelili príbeh do 3 sémantických blokov:

  • Model prístupu k údajom založený na rolách
  • Bezpečnosť údajov v rámci klastra Elasticsearch
  • Zabezpečenie údajov mimo klastra Elasticsearch

Detaily pod strihom.

Model prístupu k údajom založený na rolách

Ak si Elasticsearch nainštalujete a nijako ho nevyladíte, prístup ku všetkým indexom bude otvorený pre všetkých. No, alebo tí, ktorí môžu použiť curl. Aby sa tomu zabránilo, Elasticsearch má model, ktorý je k dispozícii od základného predplatného (ktoré je bezplatné). Schematicky to vyzerá asi takto:

Elastic under lock and key: aktivácia možností zabezpečenia klastra Elasticsearch pre prístup zvnútra aj zvonku

Čo je na obrázku

  • Používatelia sú všetci, ktorí sa môžu prihlásiť pomocou svojich prihlasovacích údajov.
  • Rola je súbor práv.
  • Práva sú súborom privilégií.
  • Privilégiá sú oprávnenia zapisovať, čítať, mazať atď. (Úplný zoznam privilégií)
  • Prostriedky sú indexy, dokumenty, polia, používatelia a ďalšie entity úložiska (model úlohy pre niektoré zdroje je k dispozícii len s platenými odbermi).

V predvolenom nastavení má Elasticsearch používateľov boxov, ku ktorému sú pripojené krabicové role. Keď povolíte nastavenia zabezpečenia, môžete ich okamžite začať používať.

Ak chcete povoliť zabezpečenie v nastaveniach Elasticsearch, musíte ho pridať do konfiguračného súboru (v predvolenom nastavení je to elasticsearch/config/elasticsearch.yml) Nový riadok:

xpack.security.enabled: true

Po zmene konfiguračného súboru spustite alebo reštartujte Elasticsearch, aby sa zmeny prejavili. Ďalším krokom je prideľovanie hesiel používateľom schránky. Urobme to interaktívne pomocou príkazu nižšie:

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

skontrolujte:

[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

Môžete sa potľapkať po pleci – nastavenia na strane Elasticsearch sú dokončené. Teraz je čas nakonfigurovať Kibana. Ak ho teraz spustíte, objavia sa chyby, preto je dôležité vytvoriť úložisko kľúčov. To sa vykonáva pomocou dvoch príkazov (user kibana a heslo zadané v kroku vytvorenia hesla v Elasticsearch):

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

Ak je všetko správne, Kibana začne žiadať prihlasovacie meno a heslo. Základné predplatné zahŕňa model založený na interných používateľoch. Počnúc Gold môžete pripojiť externé autentifikačné systémy - LDAP, PKI, Active Directory a Single sign-on systémy.

Elastic under lock and key: aktivácia možností zabezpečenia klastra Elasticsearch pre prístup zvnútra aj zvonku

Prístupové práva k objektom vo vnútri Elasticsearch môžu byť tiež obmedzené. Aby ste však urobili to isté pre dokumenty alebo polia, budete potrebovať platené predplatné (tento luxus začína na úrovni Platinum). Tieto nastavenia sú dostupné v rozhraní Kibana alebo cez Security API. Môžete to skontrolovať prostredníctvom už známej ponuky Dev Tools:

Vytvorenie roly

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

Vytvorenie používateľa

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

Bezpečnosť údajov v rámci klastra Elasticsearch

Keď Elasticsearch beží v klastri (čo je bežné), stávajú sa dôležité nastavenia zabezpečenia v rámci klastra. Pre bezpečnú komunikáciu medzi uzlami používa Elasticsearch protokol TLS. Na nastavenie bezpečnej interakcie medzi nimi potrebujete certifikát. Vygenerujeme certifikát a súkromný kľúč vo formáte PEM:

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

Po vykonaní vyššie uvedeného príkazu v adresári /../elasticsearch objaví sa archív elastický-stack-ca.zips. V jeho vnútri nájdete certifikát a súkromný kľúč s rozšíreniami crt и kľúč resp. Je vhodné umiestniť ich na zdieľaný prostriedok, ktorý by mal byť dostupný zo všetkých uzlov v klastri.

Každý uzol teraz potrebuje svoje vlastné certifikáty a súkromné ​​kľúče na základe tých v zdieľanom adresári. Pri vykonávaní príkazu sa zobrazí výzva na nastavenie hesla. Môžete pridať ďalšie voľby -ip a -dns na kompletné overenie interagujúcich uzlov.

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

V dôsledku vykonania príkazu dostaneme certifikát a súkromný kľúč vo formáte PKCS#12, chránený heslom. Zostáva len presunúť vygenerovaný súbor p12 do konfiguračného adresára:

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

Pridajte heslo k certifikátu vo formáte p12 v úložisku kľúčov a truststore na každom uzle:

[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

Už známe elasticsearch.yml Zostáva len pridať riadky s údajmi certifikátu:

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

Spustíme všetky uzly Elasticsearch a spustíme curl. Ak bolo všetko vykonané správne, vráti sa odpoveď s niekoľkými uzlami:

[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

Existuje ďalšia možnosť zabezpečenia - filtrovanie IP adries (dostupné v predplatných od úrovne Gold). Umožňuje vám vytvárať biele zoznamy adries IP, z ktorých máte povolený prístup k uzlom.

Zabezpečenie údajov mimo klastra Elasticsearch

Mimo klastra znamená pripojenie externých nástrojov: Kibana, Logstash, Beats alebo iných externých klientov.

Elastic under lock and key: aktivácia možností zabezpečenia klastra Elasticsearch pre prístup zvnútra aj zvonku

Ak chcete nakonfigurovať podporu pre https (namiesto http), pridajte nové riadky do 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

Pretože Certifikát je chránený heslom, pridajte ho do úložiska kľúčov a dôveryhodného úložiska na každom uzle:

[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

Po pridaní kľúčov sú uzly Elasticsearch pripravené na pripojenie cez https. Teraz môžu byť spustené.

Ďalším krokom je vytvorenie kľúča na pripojenie Kibany a jeho pridanie do konfigurácie. Na základe certifikátu, ktorý sa už nachádza v zdieľanom adresári, vygenerujeme certifikát vo formáte PEM (PKCS#12 Kibana, Logstash a Beats zatiaľ nepodporujú):

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

Zostáva len rozbaliť vytvorené kľúče do priečinka s konfiguráciou Kibana:

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

Kľúče tam sú, takže ostáva už len zmeniť konfiguráciu Kibany tak, aby ich začala používať. V konfiguračnom súbore kibana.yml zmeňte http na https a pridajte riadky s nastaveniami pripojenia SSL. Posledné tri riadky konfigurujú zabezpečenú komunikáciu medzi prehliadačom používateľa a Kibanou.

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

Tým sú nastavenia dokončené a prístup k údajom v klastri Elasticsearch je zašifrovaný.

Ak máte otázky týkajúce sa možností Elastic Stack na bezplatných alebo platených odberoch, monitorovacích úlohách alebo vytváraní systému SIEM, zanechajte žiadosť na forma spätnej väzby na našej webovej stránke.

Ďalšie naše články o Elastic Stack na Habré:

Pochopenie strojového učenia v elastickom balíku (známy ako Elasticsearch, aka ELK)

Elasticsearch dimenzovanie

Zdroj: hab.com

Pridať komentár