Elastic pod zámkem: aktivujeme možnosti zabezpečení clusteru Elasticsearch pro přístup vnitřní i venkovní

Elastic pod zámkem: aktivujeme možnosti zabezpečení clusteru Elasticsearch pro přístup vnitřní i venkovní

Elastic Stack — známý nástroj na trhu SIEM systémů (ve skutečnosti nejen těch). Může shromažďovat široké spektrum dat, jak citlivých, tak méně citlivých. Není úplně správné, pokud přístup k samotným prvkům Elastic Stack není chráněn. Ve výchozím nastavení všechny základní prvky Elastic (Elasticsearch, Logstash, Kibana a collectory Beats) fungují na otevřených protokolech. A v samotné Kibana je deaktivována autentizace. Všechna tato spojení lze zabezpečit a v tomto článku vám řekneme, jak to udělat. Pro pohodlí jsme rozčlenili vyprávění do 3 významových bloků:

  • Role model pro přístup k datům
  • Bezpečnost dat uvnitř clusteru Elasticsearch
  • Bezpečnost dat mimo cluster Elasticsearch

Podrobnosti pod katem.

Role model pro přístup k datům

Pokud nainstalujete Elasticsearch a nijak ho netuníte — přístup ke všem indexům bude otevřený pro každého, kdo si to přeje. No, nebo pro ty, kteří umí používat curl. Aby se tomu předešlo, v Elasticsearch existuje role model, který je dostupný od úrovně předplatného Basic (je zdarma). Schématicky to vypadá přibližně takto:

Elastic pod zámkem: aktivujeme možnosti zabezpečení clusteru Elasticsearch pro přístup vnitřní i venkovní

Co je na obrázku

  • Uživatelé — to jsou všichni, kdo se mohou autorizovat pomocí přihlašovacích údajů.
  • Role — to je soubor práv.
  • Práva — to je soubor privilegií.
  • Privilegie — to jsou oprávnění k zápisu, čtení, mazání atd. (Úplný seznam privilegií)
  • Zdroje — to jsou indexy, dokumenty, pole, uživatelé a další subjekty úložiště (role model pro některé zdroje je dostupný pouze v placených předplatných).

V Elasticsearch jsou ve výchozím nastavení předdefinovaní uživatelé, na které jsou navázány předdefinované role. Po aktivaci bezpečnostních nastavení je lze okamžitě začít používat.

Chcete-li aktivovat zabezpečení v nastavení Elasticsearch, musíte do konfiguračního souboru (předvolené je elasticsearch/config/elasticsearch.yml) přidat nový řádek:

xpack.security.enabled: true

Po změně konfiguračního souboru spusťte nebo restartujte Elasticsearch, aby se změny projevily. Další krok — přiřazení hesel předdefinovaným uživatelům. Uděláme to interaktivně pomocí níže uvedeného příkazu:

[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Iniciujeme nastavení hesel pro rezervované uživatele elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user.
Budete vyzváni k zadání hesel, jakmile proces bude pokračovat.
Potvrďte, že chcete pokračovat [y/N]y


Zadejte heslo pro [elastic]:
Znovu zadejte heslo pro [elastic]:
Zadejte heslo pro [apm_system]:
Znovu zadejte heslo pro [apm_system]:
Zadejte heslo pro [kibana]:
Znovu zadejte heslo pro [kibana]:
Zadejte heslo pro [logstash_system]:
Znovu zadejte heslo pro [logstash_system]:
Zadejte heslo pro [beats_system]:
Znovu zadejte heslo pro [beats_system]:
Zadejte heslo pro [remote_monitoring_user]:
Znovu zadejte heslo pro [remote_monitoring_user]:
Změněno heslo pro uživatele [apm_system]
Změněno heslo pro uživatele [kibana]
Změněno heslo pro uživatele [logstash_system]
Změněno heslo pro uživatele [beats_system]
Změněno heslo pro uživatele [remote_monitoring_user]
Změněno heslo pro uživatele [elastic]

Kontrolujeme:

[elastic@node1 ~]$ curl -u elastic 'node1:9200\/_cat\/_nodes?pretty'
Zadejte heslo pro uživatele 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Můžete si plácnout po rameni — nastavení na straně Elasticsearch bylo dokončeno. Nyní je na řadě nastavit Kibana. Pokud ji spusťte nyní, objeví se chyby, proto je důležité vytvořit úložiště klíčů. To se dělá ve dvou příkazech (uživatelské jméno kibana a heslo zadané při vytváření hesel v Elasticsearch):

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

Pokud je vše správně — Kibana začne žádat o přihlášení a heslo. V předplatném úrovně Basic je k dispozici model rolí na základě interních uživatelů. Od Gold si můžete připojit externí autentifikační systémy — LDAP, PKI, Active Directory a systémy Single sign-on.

Elastic pod zámkem: aktivujeme možnosti zabezpečení clusteru Elasticsearch pro přístup vnitřní i venkovní

Práva přístupu k objektům uvnitř Elasticsearch lze také omezit. Aby bylo možné stejné udělat pro dokumenty nebo pole, je vyžadováno placené předplatné (tato vymoženost začíná na úrovni Platinum). Tato nastavení jsou k dispozici v rozhraní Kibana nebo přes Security API. Můžete to zkontrolovat prostřednictvím již známého menu Dev Tools:

Vytvoření role

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

Vytvoření uživatele

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

Bezpečnost dat uvnitř clusteru Elasticsearch

Když Elasticsearch pracuje v clusteru (což je běžné), důležitá se stává zabezpečení uvnitř clustera. Pro bezpečnou interakci mezi uzly, Elasticsearch používá protokol TLS. Abyste nastavili bezpečnou interakci mezi nimi, potřebujete certifikát. Generujeme certifikát a privátní klíč ve formátu PEM:

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

Po provedení výše uvedeného příkazu se v adresáři /../elasticsearch objeví archiv elastic-stack-ca.zip. Uvnitř něj se nachází certifikát a privátní klíč s příponami crt a key případně. Je dobré je umístit na sdílený zdroj, ke kterému by měl mít přístup ze všech uzlů clusteru.

Pro každý uzel nyní potřebujete své certifikáty a privátní klíče na základě těch, které jsou v sdíleném adresáři. Při provádění příkazu se budete muset zadat heslo. Můžete přidat další volby —ip a —dns pro úplnou verifikaci interagujících uzlů.

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

Po provedení příkazu získáte certifikát a privátní klíč ve formátu PKCS#12, chráněný heslem. Zbývá přesunout vygenerovaný soubor p12 do adresáře s konfigurací:

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

Přidáme heslo k certifikátu ve formátu p12 do keystore a truststore na každém uzlu:

[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

Do již známého elasticsearch.yml je třeba přidat řádky s informacemi o 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šechny uzly Elasticsearch a provedeme curl. Pokud bylo vše provedeno správně, vrátí se odpověď s několika uzly:

[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 ještě jedna možnost zabezpečení — filtrování IP adres (dostupné v předplatném od úrovně Gold). Umožňuje vytvářet bílé seznamy IP adres, ze kterých je povoleno přistupovat k uzlům.

Bezpečnost dat mimo cluster Elasticsearch

Mimo cluster znamená připojení externích nástrojů: Kibana, Logstash, Beats nebo jiní externí klienti.

Elastic pod zámkem: aktivujeme možnosti zabezpečení clusteru Elasticsearch pro přístup vnitřní i venkovní

Pro nastavení podpory https (místo http) přidáme do elasticsearch.yml nové řádky:

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

Vzhledem k tomu, že je certifikát chráněn heslem, přidáme ho do keystore a truststore na každém uzlu:

[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 přidání klíčů jsou uzly Elasticsearch připraveny pro připojení přes https. Nyní je můžete spustit.

Dalším krokem je vytvoření klíče pro připojení Kibany a jeho přidání do konfigurace. Na základě certifikátu, který již je umístěn ve sdíleném adresáři, vygenerujeme certifikát ve formátu PEM (PKCS#12, Kibana, Logstash a Beats zatím nepodporují):

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

Zbývá rozbalit vytvořené klíče do složky s konfigurací Kibany:

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

Klíče jsou, takže zbývá změnit konfiguraci Kibany, aby je začala používat. V konfiguračním souboru kibana.yml změníme http na https a přidáme řádky s nastavením SSL připojení. Poslední tři řádky nastavují bezpečnou interakci mezi uživatelským prohlížečem 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ímto jsou nastavení provedena a přístup k datům v klastru Elasticsearch je šifrovaný.

Pokud máte dotazy k možnostem Elastic Stack na bezplatných nebo placených předplatných, úkolům týkajícím se monitorování nebo vytváření SIEM systému, zanechte nám zprávu na kontaktním formuláři na našich webových stránkách.

Další naše články o Elastic Stack na Habr:

Zkoumáme Machine Learning v Elastic Stack (také známý jako Elasticsearch, ELK)

S sizingem Elasticsearch

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster