
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:

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. ()
- 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í , na které jsou navázány . 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: truePo 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.passwordPokud 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.

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 . 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 --pemPo 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.keyPo 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\/configPř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_passwordDo 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.p12Spustí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 - node1Existuje 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.

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.p12Vzhledem 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_passwordPo 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 --pemZbývá rozbalit vytvořené klíče do složky s konfigurací Kibany:
[elastic@node1 ~]$ unzip elasticsearch\/certificate-bundle.zip -d kibana\/configKlíč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.crtTí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 na našich webových stránkách.
Další naše články o Elastic Stack na Habr:
Zdroj: habr.com
