
Elastic Stack är ett välkänt verktyg på SIEM-marknaden (faktiskt inte bara på dem). Det kan samla in en mängd olika data, både känsliga och mindre känsliga. Det är inte helt rätt om åtkomsten till själva Elastic Stack-elementen inte är skyddad. Som standard fungerar alla Elastic box-element (Elasticsearch, Logstash, Kibana och Beats collectors) via öppna protokoll. Och autentisering är inaktiverad i själva Kibana. Alla dessa interaktioner kan säkras och i den här artikeln kommer vi att berätta hur du gör det. För enkelhetens skull har vi delat upp berättelsen i tre semantiska block:
- Rollbaserad dataåtkomstmodell
- Datasäkerhet inom ett Elasticsearch-kluster
- Datasäkerhet utanför Elasticsearch-klustret
Detaljer under snittet.
Rollbaserad dataåtkomstmodell
Om du installerar Elasticsearch och inte justerar det på något sätt, kommer alla index att vara tillgängliga för alla som vill ha dem. Eller åtminstone för alla som kan använda curl. För att undvika detta har Elasticsearch en rollmodell, som är tillgänglig från och med Basic-prenumerationen (den är gratis). Den ser ut ungefär så här:

Vad finns på bilden?
- Användare är alla som kan logga in med inloggningsuppgifter.
- En roll är en uppsättning rättigheter.
- Rättigheter är en uppsättning privilegier.
- Privilegier är behörigheter att skriva, läsa, radera osv.)
- Resurser är index, dokument, fält, användare och andra lagringsenheter (rollmodellen för vissa resurser är endast tillgänglig i betalda prenumerationer).
Elasticsearch har det som standard , till vilka de är fästa När du har aktiverat säkerhetsinställningarna kan du börja använda dem direkt.
För att aktivera säkerhet i Elasticsearch-inställningarna måste du lägga till i konfigurationsfilen (som standard är detta elasticsearch/config/elasticsearch.yml) ny rad:
xpack.security.enabled: trueEfter att du har ändrat konfigurationsfilen, starta eller starta om Elasticsearch för att ändringarna ska träda i kraft. Nästa steg är att tilldela lösenord till boxanvändare. Låt oss göra detta interaktivt med hjälp av kommandot nedan:
[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]
Vi kontrollerar:
[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
Du kan klappa dig själv på axeln – inställningarna på Elasticsearch-sidan är klara. Nu är det dags att konfigurera Kibana. Om du kör det nu kommer fel att välla in, så det är viktigt att skapa en nyckelbutik. Detta görs i två kommandon (användare Kibana och lösenordet som angavs i steget för att skapa lösenord i Elasticsearch):
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.passwordOm allt är korrekt kommer Kibana att börja fråga efter inloggning och lösenord. Basic-prenumerationen har en rollmodell baserad på interna användare. Från och med Gold kan du ansluta externa autentiseringssystem - LDAP, PKI, Active Directory och system för enkel inloggning.

Åtkomsträttigheter till objekt i Elasticsearch kan också begränsas. För att göra detsamma för dokument eller fält behöver du dock en betald prenumeration (denna lyx börjar på Platinum-nivån). Dessa inställningar är tillgängliga i Kibana-gränssnittet eller via Du kan kontrollera det via den redan välbekanta menyn för utvecklarverktyg:
Skapa en roll
PUT /_security/role/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}Skapa en användare
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"
}
}Datasäkerhet inom ett Elasticsearch-kluster
När Elasticsearch körs i ett kluster (vilket är vanligt) blir säkerhetsinställningarna inom klustret viktiga. För säker kommunikation mellan noder använder Elasticsearch TLS-protokollet. För att konfigurera säker kommunikation mellan dem behöver du ett certifikat. Låt oss generera ett certifikat och en privat nyckel i PEM-format:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pemEfter att ha kört kommandot ovan, i katalogen /../elasticsearch ett arkiv kommer att dyka upp elastic-stack-ca.zipInuti den hittar du ett certifikat och en privat nyckel med tillägg. crt и nyckel respektive. Det är lämpligt att placera dem på en delad resurs, som ska vara åtkomlig från alla klusternoder.
Varje nod kräver nu sina egna certifikat och privata nycklar baserat på de i den delade katalogen. När du kör kommandot kommer du att bli ombedd att ange ett lösenord. Du kan lägga till ytterligare alternativ -ip och -dns för fullständig verifiering av interagerande noder.
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.keySom ett resultat av kommandokörningen får vi ett certifikat och en privat nyckel i PKCS#12-format, skyddade av ett lösenord. Allt som återstår är att flytta den genererade filen. p12 till konfigurationskatalogen:
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/configLåt oss lägga till ett lösenord till certifikatet i formatet p12 i nyckellagret och trustlagret på varje 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_passwordI det redan kända elasticsearch.yml det återstår att lägga till rader med certifikatdata:
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.p12Starta alla Elasticsearch-noder och kör curlOm allt gjordes korrekt returneras ett svar med flera noder:
[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 - node1Det finns ytterligare ett säkerhetsalternativ – IP-adressfiltrering (tillgängligt i prenumerationer från Guldnivå). Låter dig skapa vitlistor över IP-adresser från vilka åtkomst till noder är tillåten.
Datasäkerhet utanför Elasticsearch-klustret
Utanför klustret innebär att ansluta externa verktyg: Kibana, Logstash, Beats eller andra externa klienter.

För att konfigurera https-stöd (istället för http), lägg till nya rader i 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.p12Eftersom certifikatet är lösenordsskyddat lägger vi till det i nyckellagret och trustlagret på varje 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_passwordEfter att nycklarna har lagts till är Elasticsearch-noderna redo att ansluta via https. Nu kan du starta dem.
Nästa steg är att skapa en nyckel för att ansluta Kibana och lägga till den i konfigurationen. Baserat på certifikatet, som redan finns i den delade katalogen, kommer vi att generera ett certifikat i PEM-format (PKCS#12 Kibana, Logstash och Beats stöder inte ännu):
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pemAllt som återstår är att packa upp de skapade nycklarna i mappen med Kibana-konfigurationen:
[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/configNycklarna finns där, så allt som återstår är att ändra Kibana-konfigurationen så att den börjar använda dem. I konfigurationsfilen kibana.yml, ändra http till https och lägg till rader med SSL-anslutningsinställningar. De tre sista raderna konfigurerar säker interaktion mellan användarens webbläsare och 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.crtDärmed är inställningarna klara och åtkomsten till data i Elasticsearch-klustret är krypterad.
Om du har frågor om Elastic Stacks funktioner för gratis- eller betalda prenumerationer, uppgifter om övervakning eller att skapa ett SIEM-system, lämna en förfrågan i på vår webbplats.
Fler av våra artiklar om Elastic Stack på Habr:
Källa: will.com
